diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/CHANGELOG.md b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/CHANGELOG.md deleted file mode 100755 index ec0f7769da..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/CHANGELOG.md +++ /dev/null @@ -1,26 +0,0 @@ -## Changelog - -* 4.28.1.2 - * This version of the adapters has been certified with Facebook Audience Network 4.28.1. - * Enables advanced bidding for all adapters and adds FacebookAdvancedBidder. - -* 4.28.1.1 - * This version of the adapters has been certified with Facebook Audience Network 4.28.1. - * Rename delegate method rewardedVideoAdComplete to rewardedVideoAdVideoComplete per Facebook Audience Network change. -* 4.28.1.0 - * This version of the adapters has been certified with Facebook Audience Network 4.28.1. - - * 4.28.0.1 - * This version of the adapters has been certified with Facebook Audience Network 4.28.0. - * Removed star rating from the native ad adapter since it has been deprecated by Facebook. - - * 4.28.0.0 - * This version of the adapters has been certified with Facebook Audience Network 4.28.0. - * Updated native adapters to handle the use-case of empty clickable views - * Updated Rewarded Video header files to be consistent with the rest of the header files - - * 4.27.0.1 - * This version of the adapters has been certified with Facebook Audience Network 4.27.0. - - * Initial Commit - * Adapters moved from [mopub-iOS-sdk](https://github.com/mopub/mopub-ios-sdk) to [mopub-iOS-mediation](https://github.com/mopub/mopub-iOS-mediation/) diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookAdvancedBidder.h b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookAdvancedBidder.h deleted file mode 100755 index 1b06ea4eea..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookAdvancedBidder.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FacebookAdvancedBidder.h -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import -#if __has_include() -#import -#else -#import "MPAdvancedBidder.h" -#endif - - -@interface FacebookAdvancedBidder : NSObject -@property (nonatomic, copy, readonly) NSString * creativeNetworkName; -@property (nonatomic, copy, readonly) NSString * token; -@end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookAdvancedBidder.m b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookAdvancedBidder.m deleted file mode 100755 index 62b019d562..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookAdvancedBidder.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// FacebookAdvancedBidder.m -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "FacebookAdvancedBidder.h" -#import - -@implementation FacebookAdvancedBidder - -+ (void)initialize { - if (self == [FacebookAdvancedBidder self]) { - // Initialize an adview to trigger [FBAdUtility initializeAudienceNetwork] - FBAdView * initHackforFacebook = [[FBAdView alloc] initWithPlacementID:@"" adSize:kFBAdSize320x50 rootViewController:[UIViewController new]]; - if (initHackforFacebook) { - NSLog(@"Initialized Facebook Audience Network"); - } - } -} - -- (NSString *)creativeNetworkName { - return @"facebook"; -} - -- (NSString *)token { - return [FBAdSettings bidderToken]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookBannerCustomEvent.m b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookBannerCustomEvent.m deleted file mode 100755 index 6e08c85680..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookBannerCustomEvent.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// FacebookBannerCustomEvent.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "FacebookBannerCustomEvent.h" - -#import "MPInstanceProvider.h" -#import "MPLogging.h" - -@interface MPInstanceProvider (FacebookBanners) - -- (FBAdView *)buildFBAdViewWithPlacementID:(NSString *)placementID - size:(FBAdSize)size - rootViewController:(UIViewController *)controller - delegate:(id)delegate; -@end - -@implementation MPInstanceProvider (FacebookBanners) - -- (FBAdView *)buildFBAdViewWithPlacementID:(NSString *)placementID - size:(FBAdSize)size - rootViewController:(UIViewController *)controller - delegate:(id)delegate -{ - FBAdView *adView = [[FBAdView alloc] initWithPlacementID:placementID - adSize:size - rootViewController:controller]; - adView.delegate = delegate; - [adView disableAutoRefresh]; - return adView; -} - -@end - -@interface FacebookBannerCustomEvent () - -@property (nonatomic, strong) FBAdView *fbAdView; - -@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 -{ - /** - * 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). - */ - FBAdSize fbAdSize; - if (size.height == kFBAdSizeHeight250Rectangle.size.height) { - fbAdSize = kFBAdSizeHeight250Rectangle; - } else if (size.height == kFBAdSizeHeight90Banner.size.height) { - fbAdSize = kFBAdSizeHeight90Banner; - } else if (size.height == kFBAdSizeHeight50Banner.size.height) { - fbAdSize = kFBAdSizeHeight50Banner; - } else { - MPLogError(@"Invalid size for Facebook banner ad"); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; - return; - } - - if (![info objectForKey:@"placement_id"]) { - MPLogError(@"Placement ID is required for Facebook banner ad"); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; - return; - } - - MPLogInfo(@"Requesting Facebook banner ad"); - self.fbAdView = - [[MPInstanceProvider sharedProvider] buildFBAdViewWithPlacementID:[info objectForKey:@"placement_id"] - size:fbAdSize - rootViewController:[self.delegate viewControllerForPresentingModalView] - delegate:self]; - - if (!self.fbAdView) { - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; - 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 = size; - self.fbAdView.frame = fbAdFrame; - [FBAdSettings setMediationService:[NSString stringWithFormat:@"MOPUB_%@", MP_SDK_VERSION]]; - - // Load the advanced bid payload. - if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook banner ad markup"); - [self.fbAdView loadAdWithBidPayload:adMarkup]; - } - // Request a banner ad. - else { - MPLogInfo(@"Requesting Facebook banner ad"); - [self.fbAdView loadAd]; - } -} - -- (void)dealloc -{ - _fbAdView.delegate = nil; -} - -#pragma mark FBAdViewDelegate methods - -- (void)adView:(FBAdView *)adView didFailWithError:(NSError *)error -{ - MPLogInfo(@"Facebook banner failed to load with error: %@", error.localizedDescription); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)adViewDidLoad:(FBAdView *)adView -{ - MPLogInfo(@"Facebook banner ad did load"); - [self.delegate bannerCustomEvent:self didLoadAd:adView]; -} - -- (void)adViewWillLogImpression:(FBAdView *)adView -{ - MPLogInfo(@"Facebook banner ad did log impression"); - [self.delegate trackImpression]; -} - -- (void)adViewDidClick:(FBAdView *)adView -{ - MPLogInfo(@"Facebook banner ad was clicked"); - [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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m deleted file mode 100755 index 63f519e1a2..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m +++ /dev/null @@ -1,154 +0,0 @@ -// -// FacebookInterstitialCustomEvent.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "FacebookInterstitialCustomEvent.h" - -#import "MPInstanceProvider.h" -#import "MPLogging.h" -#import "MPRealTimeTimer.h" - -//Timer to record the expiration interval -#define FB_ADS_EXPIRATION_INTERVAL 3600 - - -@interface MPInstanceProvider (FacebookInterstitials) - -- (FBInterstitialAd *)buildFBInterstitialAdWithPlacementID:(NSString *)placementID - delegate:(id)delegate; - -@end - -@implementation MPInstanceProvider (FacebookInterstitials) - -- (FBInterstitialAd *)buildFBInterstitialAdWithPlacementID:(NSString *)placementID - delegate:(id)delegate -{ - FBInterstitialAd *interstitialAd = [[FBInterstitialAd alloc] initWithPlacementID:placementID]; - interstitialAd.delegate = delegate; - return interstitialAd; -} - -@end - -@interface FacebookInterstitialCustomEvent () - -@property (nonatomic, strong) FBInterstitialAd *fbInterstitialAd; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; -@property (nonatomic, assign) BOOL hasTrackedImpression; - -@end - -@implementation FacebookInterstitialCustomEvent - -@synthesize hasTrackedImpression = _hasTrackedImpression; - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info -{ - [self requestInterstitialWithCustomEventInfo:info adMarkup:nil]; -} - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - if (![info objectForKey:@"placement_id"]) { - MPLogError(@"Placement ID is required for Facebook interstitial ad"); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:nil]; - return; - } - - self.fbInterstitialAd = - [[MPInstanceProvider sharedProvider] buildFBInterstitialAdWithPlacementID:[info objectForKey:@"placement_id"] - delegate:self]; - [FBAdSettings setMediationService:[NSString stringWithFormat:@"MOPUB_%@", MP_SDK_VERSION]]; - - // Load the advanced bid payload. - if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook interstitial ad markup"); - [self.fbInterstitialAd loadAdWithBidPayload:adMarkup]; - } - // Request a interstitial ad. - else { - MPLogInfo(@"Requesting Facebook interstitial ad"); - [self.fbInterstitialAd loadAd]; - } -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)controller { - if (!self.fbInterstitialAd || !self.fbInterstitialAd.isAdValid) { - MPLogError(@"Facebook interstitial ad was not loaded"); - [self.delegate interstitialCustomEventDidExpire:self]; - } else { - MPLogInfo(@"Facebook interstitial ad will be presented"); - [self.delegate interstitialCustomEventWillAppear:self]; - [self.fbInterstitialAd showAdFromRootViewController:controller]; - MPLogInfo(@"Facebook interstitial ad was presented"); - [self.delegate interstitialCustomEventDidAppear:self]; - } -} - -- (void)dealloc -{ - _fbInterstitialAd.delegate = nil; -} - -#pragma mark FBInterstitialAdDelegate methods - -- (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd -{ - MPLogInfo(@"Facebook intersitital ad was loaded. Can present now"); - [self.delegate interstitialCustomEvent:self didLoadAd:interstitialAd]; - - // introduce timer for 1 hour as per caching 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) { - [self.delegate interstitialCustomEventDidExpire:self]; - MPLogInfo(@"Facebook intersitital ad expired as per the audience network's caching policy"); - //Delete the cached objects - self.fbInterstitialAd = nil; - } - [strongSelf.expirationTimer invalidate]; - }]; - [self.expirationTimer scheduleNow]; - -} - -- (void)interstitialAdWillLogImpression:(FBInterstitialAd *)interstitialAd -{ - MPLogInfo(@"Facebook intersitital ad is logging impressions for interstitials"); - //set the tracker to true when the ad is shown on the screen. So that the timer is invalidated. - _hasTrackedImpression = true; - [self.expirationTimer invalidate]; -} - -- (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error -{ - MPLogInfo(@"Facebook intersitital ad failed to load with error: %@", error.localizedDescription); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd -{ - MPLogInfo(@"Facebook interstitial ad was clicked"); - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd -{ - MPLogInfo(@"Facebook interstitial ad was closed"); - [self.delegate interstitialCustomEventDidDisappear:self]; -} - -- (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd -{ - MPLogInfo(@"Facebook interstitial ad will close"); - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeAdAdapter.m b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeAdAdapter.m deleted file mode 100755 index 269837f8b6..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeAdAdapter.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// FacebookNativeAdAdapter.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "FacebookNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" - -NSString *const kFBVideoAdsEnabledKey = @"video_enabled"; - -@interface FacebookNativeAdAdapter () - -@property (nonatomic, readonly) FBNativeAd *fbNativeAd; -@property (nonatomic, readonly) FBAdChoicesView *adChoicesView; -@property (nonatomic, readonly) FBMediaView *mediaView; - -@end - -@implementation FacebookNativeAdAdapter - -@synthesize properties = _properties; - -- (instancetype)initWithFBNativeAd:(FBNativeAd *)fbNativeAd adProperties:(NSDictionary *)adProps -{ - if (self = [super init]) { - _fbNativeAd = fbNativeAd; - _fbNativeAd.delegate = self; - - NSMutableDictionary *properties; - if (adProps) { - properties = [NSMutableDictionary dictionaryWithDictionary:adProps]; - } else { - properties = [NSMutableDictionary dictionary]; - } - - if (fbNativeAd.title) { - [properties setObject:fbNativeAd.title forKey:kAdTitleKey]; - } - - if (fbNativeAd.body) { - [properties setObject:fbNativeAd.body forKey:kAdTextKey]; - } - - if (fbNativeAd.callToAction) { - [properties setObject:fbNativeAd.callToAction forKey:kAdCTATextKey]; - } - - if (fbNativeAd.icon.url.absoluteString) { - [properties setObject:fbNativeAd.icon.url.absoluteString forKey:kAdIconImageKey]; - } - - if (fbNativeAd.placementID) { - [properties setObject:fbNativeAd.placementID forKey:@"placementID"]; - } - - if (fbNativeAd.socialContext) { - [properties setObject:fbNativeAd.socialContext forKey:@"socialContext"]; - } - - _properties = properties; - - _adChoicesView = [[FBAdChoicesView alloc] initWithNativeAd:fbNativeAd]; - _adChoicesView.backgroundShown = NO; - - // If video ad is enabled, use mediaView, otherwise use coverImage. - if ([[_properties objectForKey:kFBVideoAdsEnabledKey] boolValue]) { - _mediaView = [[FBMediaView alloc] initWithNativeAd:fbNativeAd]; - } else { - if (fbNativeAd.coverImage.url.absoluteString) { - [properties setObject:fbNativeAd.coverImage.url.absoluteString forKey:kAdMainImageKey]; - } - } - } - - return self; -} - - -#pragma mark - MPNativeAdAdapter - -- (NSURL *)defaultActionURL -{ - return nil; -} - -- (BOOL)enableThirdPartyClickTracking -{ - return YES; -} - -- (void)willAttachToView:(UIView *)view -{ - [self.fbNativeAd registerViewForInteraction:view withViewController:[self.delegate viewControllerForPresentingModalView]]; -} - -- (void)willAttachToView:(UIView *)view withAdContentViews:(NSArray *)adContentViews -{ - if ( adContentViews.count > 0 ) { - [self.fbNativeAd registerViewForInteraction:view withViewController:[self.delegate viewControllerForPresentingModalView] withClickableViews:adContentViews]; - } else { - [self willAttachToView:view]; - } -} - -- (UIView *)privacyInformationIconView -{ - return self.adChoicesView; -} - -- (UIView *)mainMediaView -{ - return self.mediaView; -} - -#pragma mark - FBNativeAdDelegate - -- (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLogImpression:)]) { - [self.delegate nativeAdWillLogImpression:self]; - } else { - MPLogWarn(@"Delegate does not implement impression tracking callback. Impressions likely not being tracked."); - } -} - -- (void)nativeAdDidClick:(FBNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidClick:)]) { - [self.delegate nativeAdDidClick:self]; - } else { - MPLogWarn(@"Delegate does not implement click tracking callback. Clicks likely not being tracked."); - } - - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd -{ - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeCustomEvent.h b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeCustomEvent.h deleted file mode 100755 index a887c14b1f..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeCustomEvent.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// FacebookNativeCustomEvent.h -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#if __has_include() - #import -#else - #import "MPNativeCustomEvent.h" -#endif - -/* - * Certified with Facebook Audience Network 4.26.1 - */ -@interface FacebookNativeCustomEvent : MPNativeCustomEvent - - -/** - * Toggle FB video ads on/off. If it is enabled, it means you are open yourself to video inventory. - * If it is not enabled, it is gauranteed you won't get video ads. - * - * IMPORTANT: If you choose to use this method, be sure to call it before making any ad requests, - * and avoid calling it more than once. - */ - -+ (void)setVideoEnabled:(BOOL)enabled; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeCustomEvent.m b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeCustomEvent.m deleted file mode 100755 index e8b56e741a..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeCustomEvent.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// FacebookNativeCustomEvent.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// -#import -#import "FacebookNativeCustomEvent.h" -#import "FacebookNativeAdAdapter.h" -#import "MPNativeAd.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeAdConstants.h" - -static const NSInteger FacebookNoFillErrorCode = 1001; -static BOOL gVideoEnabled = NO; - -@interface FacebookNativeCustomEvent () - -@property (nonatomic, readwrite, strong) FBNativeAd *fbNativeAd; -@property (nonatomic) BOOL videoEnabled; - -@end - -@implementation FacebookNativeCustomEvent - -+ (void)setVideoEnabled:(BOOL)enabled -{ - gVideoEnabled = enabled; -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info -{ - [self requestAdWithCustomEventInfo:info adMarkup:nil]; -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - NSString *placementID = [info objectForKey:@"placement_id"]; - - if ([info objectForKey:kFBVideoAdsEnabledKey] == nil) { - self.videoEnabled = gVideoEnabled; - } else { - self.videoEnabled = [[info objectForKey:kFBVideoAdsEnabledKey] boolValue]; - } - - if (placementID) { - _fbNativeAd = [[FBNativeAd alloc] initWithPlacementID:placementID]; - self.fbNativeAd.delegate = self; - [FBAdSettings setMediationService:[NSString stringWithFormat:@"MOPUB_%@", MP_SDK_VERSION]]; - - // Load the advanced bid payload. - if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook native ad markup"); - [self.fbNativeAd loadAdWithBidPayload:adMarkup]; - } - // Request a banner ad. - else { - MPLogInfo(@"Requesting Facebook native ad"); - [self.fbNativeAd loadAd]; - } - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid Facebook placement ID")]; - } -} - -#pragma mark - FBNativeAdDelegate - -- (void)nativeAdDidLoad:(FBNativeAd *)nativeAd -{ - FacebookNativeAdAdapter *adAdapter = [[FacebookNativeAdAdapter alloc] initWithFBNativeAd:nativeAd adProperties:@{kFBVideoAdsEnabledKey:@(self.videoEnabled)}]; - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - - NSMutableArray *imageURLs = [NSMutableArray array]; - - if (nativeAd.icon.url) { - [imageURLs addObject:nativeAd.icon.url]; - } - - // If video is enabled, no need to load coverImage. - if (!self.videoEnabled && nativeAd.coverImage.url) { - [imageURLs addObject:nativeAd.coverImage.url]; - } - - [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { - if (errors) { - MPLogDebug(@"%@", errors); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForImageDownloadFailure()]; - } else { - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; - } - }]; -} - -- (void)nativeAd:(FBNativeAd *)nativeAd didFailWithError:(NSError *)error -{ - if (error.code == FacebookNoFillErrorCode) { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForNoInventory()]; - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"Facebook ad load error")]; - } -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/MoPub-FacebookAudienceNetwork-Podspecs/MoPub-FacebookAudienceNetwork-Adapters.podspec b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/MoPub-FacebookAudienceNetwork-Podspecs/MoPub-FacebookAudienceNetwork-Adapters.podspec deleted file mode 100755 index 1e80a6d5f8..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/MoPub-FacebookAudienceNetwork-Podspecs/MoPub-FacebookAudienceNetwork-Adapters.podspec +++ /dev/null @@ -1,24 +0,0 @@ -# -# Be sure to run `pod lib lint MoPub-Facebook-Adapters.podspec' to ensure this is a -# valid spec before submitting. -# - -Pod::Spec.new do |s| -s.name = 'MoPub-FacebookAudienceNetwork-Adapters' -s.version = '4.28.1.2' -s.summary = 'Facebook Adapters for mediating through MoPub.' -s.description = <<-DESC -Supported ad formats: Banners, Interstitial, Rewarded Video and Native.\n -To download and integrate the Facebook SDK, please check https://developers.facebook.com/docs/audience-network/ios/#sdk. \n\n -For inquiries and support, please visit https://developers.facebook.com/products/audience-network/faq/. \n -DESC -s.homepage = 'https://github.com/mopub/mopub-ios-mediation' -s.license = { :type => 'New BSD', :file => 'LICENSE' } -s.author = { 'MoPub' => 'support@mopub.com' } -s.source = { :git => 'https://github.com/mopub/mopub-ios-mediation.git', :commit => 'master' } -s.ios.deployment_target = '8.0' -s.static_framework = true -s.source_files = 'FacebookAudienceNetwork/*.{h,m}' -s.dependency 'mopub-ios-sdk', '~> 5.0' -s.dependency 'FBAudienceNetwork', '4.28.1' -end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/README.md b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/README.md deleted file mode 100755 index 2a7701fa24..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Overview - * This folder contains mediation adapters used to mediate Facebook AN. - * To download and integrate the Facebook AN SDK, please check [this tutorial](https://developers.facebook.com/docs/audience-network/ios/#sdk). - * For inquiries and support, please visit [support](https://developers.facebook.com/products/audience-network/faq/) forum. - -## Adapter integration - * To integrate adapters, please visit our [integration tutorial](https://developers.mopub.com/docs/ios/integrating-networks/). diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAd.h b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAd.h deleted file mode 100644 index d7bde27334..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAd.h +++ /dev/null @@ -1,307 +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 - -@protocol FBNativeAdDelegate; -@class FBAdImage; - -/** - Determines what parts of a native ad's content are cached through FBMediaView - */ -typedef NS_OPTIONS(NSInteger, FBNativeAdsCachePolicy) { - /// No ad content is cached - FBNativeAdsCachePolicyNone = 1 << 0, - /// Icon is cached - FBNativeAdsCachePolicyIcon = 1 << 1, - /// Cover image is cached - FBNativeAdsCachePolicyCoverImage = 1 << 2, - /// Video is cached - FBNativeAdsCachePolicyVideo = 1 << 3, - /// AdChoices icon is cached - FBNativeAdsCachePolicyAdChoices = 1 << 4, - /// All content is cached - FBNativeAdsCachePolicyAll = FBNativeAdsCachePolicyCoverImage | FBNativeAdsCachePolicyIcon | FBNativeAdsCachePolicyVideo | FBNativeAdsCachePolicyAdChoices, -}; - -/** - 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 : NSObject - -/** - Typed access to the id of the ad placement. - */ -@property (nonatomic, copy, readonly) NSString *placementID; -/** - Typed access to the ad star rating. See `FBAdStarRating` for details. - */ -@property (nonatomic, assign, readonly) struct FBAdStarRating starRating FB_DEPRECATED; -/** - Typed access to the ad title. - */ -@property (nonatomic, copy, readonly, nullable) NSString *title; -/** - Typed access to the ad subtitle. - */ -@property (nonatomic, copy, readonly, nullable) NSString *subtitle; -/** - 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 ad icon. See `FBAdImage` for details. - */ -@property (nonatomic, strong, readonly, nullable) FBAdImage *icon; -/** - Typed access to the ad cover image creative. See `FBAdImage` for details. - */ -@property (nonatomic, strong, readonly, nullable) FBAdImage *coverImage; -/** - Typed access to the body raw untruncated text, usually a longer description of the ad. Note, this method always returns untruncated text, as opposed to -(NSString *) body. - */ -@property (nonatomic, copy, readonly, nullable) NSString *rawBody; -/** - Typed access to the body text, usually a longer description of the ad. - */ -@property (nonatomic, copy, readonly, nullable) NSString *body; -/** - 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 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; - -/** - Set the native ad caching policy. This 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 not block on caching. Ensure that media is loaded through FBMediaView or through [FBAdImage loadImageAsyncWithBlock:] to take full advantage of caching. - */ -@property (nonatomic, assign) FBNativeAdsCachePolicy mediaCachePolicy; -/** - the delegate - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - This is a method to initialize a FBNativeAd object matching the given placement id. - - - Parameter placementID: The id of the ad placement. You can create your placement id from Facebook developers page. - */ -- (instancetype)initWithPlacementID:(NSString *)placementID NS_DESIGNATED_INITIALIZER; - -/** - This is a method to associate a FBNativeAd with the UIView you will use to display the native ads. - - - Parameter view: The UIView you created to render all the native ads data elements. - - Parameter 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 - withViewController:(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. - - - Parameter view: The UIView you created to render all the native ads data elements. - - Parameter 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. - - Parameter 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 - withViewController:(nullable UIViewController *)viewController - withClickableViews:(FB_NSArrayOf(UIView *)*)clickableViews; - -/** - 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 from a bid payload attained through a server side bid. - - - Parameter bidPayload: The payload of the ad bid. You can get your bid payload from Facebook bidder endpoint. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload; - -/** - 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, copy, readonly, nullable, getter=getAdNetwork) NSString *adNetwork; - -@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. - - - Parameter nativeAd: An FBNativeAd object sending the message. - */ -- (void)nativeAdDidLoad:(FBNativeAd *)nativeAd; - -/** - Sent immediately before the impression of an FBNativeAd object will be logged. - - - Parameter nativeAd: An FBNativeAd object sending the message. - */ -- (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd; - -/** - Sent when an FBNativeAd is failed to load. - - - Parameter nativeAd: An FBNativeAd object sending the message. - - Parameter 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. - - - Parameter 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. - - - Parameter nativeAd: An FBNativeAd object sending the message. - */ -- (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd; - -@end - -/** - Represents the Facebook ad star rating, which contains the rating value and rating scale. - */ -FB_EXPORT struct FBAdStarRating { - /// The value of the star rating, X in X/5 - CGFloat value; - /// The total possible star rating, Y in 4/Y - NSInteger scale; -} FBAdStarRating; - -/** - 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. - - - Parameter url: the image url. - - Parameter width: the image width. - - Parameter 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. - - - Parameter block: Block to handle the loaded image. - */ -- (void)loadImageAsyncWithBlock:(nullable void (^)(UIImage * __nullable image))block; - -@end - -/** - Helper view that draws a star rating based off a native ad. - */ -FB_CLASS_EXPORT FB_DEPRECATED -@interface FBAdStarRatingView : UIView - -/** - The current rating from an FBNativeAd. When set, updates the view. - */ -@property (nonatomic, assign) struct FBAdStarRating rating FB_DEPRECATED; - -/** - The color drawn for filled-in stars. Defaults to yellow. - */ -@property (strong, nonatomic) UIColor *primaryColor FB_DEPRECATED; - -/** - The color drawn for empty stars. Defaults to gray. - */ -@property (strong, nonatomic) UIColor *secondaryColor FB_DEPRECATED; - -/** - Initializes a star rating view with a given frame and star rating. - - - Parameter frame: Frame of this view. - - Parameter starRating: Star rating from a native ad. - */ -- (instancetype)initWithFrame:(CGRect)frame withStarRating:(struct FBAdStarRating)starRating NS_DESIGNATED_INITIALIZER FB_DEPRECATED; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdView.h b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdView.h deleted file mode 100644 index df826d8113..0000000000 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdView.h +++ /dev/null @@ -1,136 +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; - -/** - Determines the type of native ad template. Different views are created - for different values of FBNativeAdViewType - */ -typedef NS_ENUM(NSInteger, FBNativeAdViewType) { - /// Fixed height view, 100 points (banner equivalent) - FBNativeAdViewTypeGenericHeight100 = 1, - /// Fixed height view, 120 points (banner equivalent) - FBNativeAdViewTypeGenericHeight120, - /// Fixed height view, 300 points - FBNativeAdViewTypeGenericHeight300, - /// Fixed height view, 400 points - FBNativeAdViewTypeGenericHeight400, -}; - -/** - The FBNativeAdView creates prebuilt native ad template views and manages native ads. - */ -FB_CLASS_EXPORT -@interface FBNativeAdView : UIView - -/** - 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 placement id and type. - - Parameter nativeAd: The native ad to use to create this view. - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. - */ -+ (instancetype)nativeAdViewWithNativeAd:(FBNativeAd *)nativeAd withType:(FBNativeAdViewType)type; - -/** - 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; - -/** - This is a method to create a native ad template using the given placement id and type. - - Parameter nativeAd: The native ad to use to create this view. - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. - - Parameter attributes: The attributes to render this native ad template with. - */ -+ (instancetype)nativeAdViewWithNativeAd:(FBNativeAd *)nativeAd withType:(FBNativeAdViewType)type withAttributes:(FBNativeAdViewAttributes *)attributes; - -@end - -/** - 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; -/** - 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; - -/** - Returns default attributes for a given type. - - - Parameter type: The type for this layout. - */ -+ (instancetype)defaultAttributesForType:(FBNativeAdViewType)type; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Info.plist b/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Info.plist deleted file mode 100644 index ce76579798..0000000000 Binary files a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h b/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h deleted file mode 100644 index bd6a5be352..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPBannerCustomEvent+Internal.h -// MoPubSampleApp -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "MPBannerCustomEvent.h" - -@interface MPBannerCustomEvent (Internal) - -/** - * Track marketplace and 3rd party impressions. - * Extended class implements this method if necessary. - * Currently, only HTML and MRAID banners contain MPX and 3rd party trackers. - * Mediated networks don't contain MPX and 3rd party trackers. - */ - -- (void)trackMPXAndThirdPartyImpressions; - -/** - * 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/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h deleted file mode 100644 index 2f34ebddd4..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPAdAlertGestureRecognizer.h -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import - -extern NSInteger const kMPAdAlertGestureMaxAllowedYAxisMovement; - -typedef enum -{ - MPAdAlertGestureRecognizerState_ZigRight1, - MPAdAlertGestureRecognizerState_ZagLeft2, - MPAdAlertGestureRecognizerState_Recognized -} MPAdAlertGestureRecognizerState; - -@interface MPAdAlertGestureRecognizer : UIGestureRecognizer - -// default is 4 -@property (nonatomic, assign) NSInteger numZigZagsForRecognition; - -// default is 100 -@property (nonatomic, assign) CGFloat minTrackedDistanceForZigZag; - -@property (nonatomic, readonly) MPAdAlertGestureRecognizerState currentAlertGestureState; -@property (nonatomic, readonly) CGPoint inflectionPoint; -@property (nonatomic, readonly) BOOL thresholdReached; -@property (nonatomic, readonly) NSInteger curNumZigZags; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAPIEndpoints.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAPIEndpoints.m deleted file mode 100644 index 61048b785e..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAPIEndpoints.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPAPIEndpoints.m -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPAPIEndpoints.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" - -@implementation MPAPIEndpoints - -static BOOL sUsesHTTPS = YES; - -+ (void)setUsesHTTPS:(BOOL)usesHTTPS -{ - sUsesHTTPS = usesHTTPS; -} - -+ (NSString *)baseURL -{ - if ([[MPCoreInstanceProvider sharedProvider] appTransportSecuritySettings] == MPATSSettingEnabled) { - return [@"https://" stringByAppendingString:MOPUB_BASE_HOSTNAME]; - } - - return [@"http://" stringByAppendingString:MOPUB_BASE_HOSTNAME]; -} - -+ (NSString *)baseURLScheme -{ - return sUsesHTTPS ? @"https://" : @"http://"; -} - -+ (NSString *)baseURLStringWithPath:(NSString *)path -{ - return [NSString stringWithFormat:@"%@%@%@", - [[self class] baseURLScheme], - MOPUB_BASE_HOSTNAME, - path]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.h deleted file mode 100644 index 931d5c2a7c..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MPAdBrowserController.h -// MoPub -// -// Created by Nafis Jamal on 1/19/11. -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import -#import "MPWebView.h" - -#ifndef CF_RETURNS_RETAINED -#if __has_feature(attribute_cf_returns_retained) -#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) -#else -#define CF_RETURNS_RETAINED -#endif -#endif - -@class MPAdConfiguration; - -@protocol MPAdBrowserControllerDelegate; - -@interface MPAdBrowserController : UIViewController - -@property (nonatomic, strong) IBOutlet MPWebView *webView; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *backButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *forwardButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *refreshButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *safariButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *doneButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *spinnerItem; -@property (nonatomic, strong) UIActivityIndicatorView *spinner; - -@property (nonatomic, weak) id delegate; -@property (nonatomic, copy) NSURL *URL; - -- (instancetype)initWithURL:(NSURL *)URL HTMLString:(NSString *)HTMLString delegate:(id)delegate; -- (instancetype)initWithURL:(NSURL *)URL delegate:(id)delegate; - -// Navigation methods. -- (IBAction)back; -- (IBAction)forward; -- (IBAction)refresh; -- (IBAction)safari; -- (IBAction)done; - -// Drawing methods. -- (CGContextRef)createContext CF_RETURNS_RETAINED; -- (UIImage *)backArrowImage; -- (UIImage *)forwardArrowImage; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPAdBrowserControllerDelegate - -- (void)dismissBrowserController:(MPAdBrowserController *)browserController animated:(BOOL)animated; - -@optional - -- (MPAdConfiguration *)adConfiguration; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.m deleted file mode 100644 index 7308db9cc7..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.m +++ /dev/null @@ -1,345 +0,0 @@ -// -// MPAdBrowserController.m -// MoPub -// -// Created by Nafis Jamal on 1/19/11. -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import "MPAdBrowserController.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MPAPIEndpoints.h" -#import "NSBundle+MPAdditions.h" -#import "MPURLRequest.h" - -static NSString * const kAdBrowserControllerNibName = @"MPAdBrowserController"; - -@interface MPAdBrowserController () - -@property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *navigationBarYConstraint; - -@property (weak, nonatomic) IBOutlet UIToolbar *browserControlToolbar; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *browserControlToolbarBottomConstraint; - -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewTopConstraint; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewLeadingConstraint; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewTrailingConstraint; - -@property (nonatomic, strong) UIActionSheet *actionSheet; -@property (nonatomic, strong) NSString *HTMLString; -@property (nonatomic, assign) int webViewLoadCount; - -- (void)dismissActionSheet; - -@end - -@implementation MPAdBrowserController - -#pragma mark - -#pragma mark Lifecycle - -- (instancetype)initWithURL:(NSURL *)URL HTMLString:(NSString *)HTMLString delegate:(id)delegate -{ - if (self = [super initWithNibName:kAdBrowserControllerNibName bundle:[NSBundle resourceBundleForClass:self.class]]) - { - self.delegate = delegate; - self.URL = URL; - self.HTMLString = HTMLString; - - MPLogDebug(@"Ad browser (%p) initialized with URL: %@", self, self.URL); - - self.spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectZero]; - [self.spinner sizeToFit]; - self.spinner.hidesWhenStopped = YES; - - self.webViewLoadCount = 0; - } - return self; -} - -- (instancetype)initWithURL:(NSURL *)URL delegate:(id)delegate { - return [self initWithURL:URL - HTMLString:nil - delegate:delegate]; -} - -- (void)dealloc -{ - self.webView.delegate = nil; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Set web view delegate - self.webView.delegate = self; - self.webView.scalesPageToFit = YES; - - // Set up toolbar buttons - self.backButton.image = [self backArrowImage]; - self.backButton.title = nil; - self.forwardButton.image = [self forwardArrowImage]; - self.forwardButton.title = nil; - self.spinnerItem.customView = self.spinner; - self.spinnerItem.title = nil; - - // If iOS 11, set up autolayout constraints so that the toolbar and web view stay within the safe area - // Note: The web view has to be constrained to the safe area on top for the notch in Portait and leading/trailing - // for the notch in Landscape. Only the bottom of the toolbar needs to be constrained because Apple will move - // the buttons into the safe area automatically in Landscape, and otherwise it's preferable for the toolbar to - // stretch the length of the unsafe area as well. - if (@available(iOS 11, *)) { - // Disable the old constraints - self.navigationBarYConstraint.active = NO; - self.browserControlToolbarBottomConstraint.active = NO; - self.webViewTopConstraint.active = NO; - self.webViewLeadingConstraint.active = NO; - self.webViewTrailingConstraint.active = NO; - - // Set new constraints based on the safe area layout guide - self.navigationBarYConstraint = [self.navigationBar.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor]; // put nav bar just above safe area - self.browserControlToolbarBottomConstraint = [self.browserControlToolbar.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor]; - self.webViewTopConstraint = [self.webView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor]; - self.webViewLeadingConstraint = [self.webView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor]; - self.webViewTrailingConstraint = [self.webView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor]; - - // Enable the new constraints - [NSLayoutConstraint activateConstraints:@[ - self.navigationBarYConstraint, - self.browserControlToolbarBottomConstraint, - self.webViewTopConstraint, - self.webViewLeadingConstraint, - self.webViewTrailingConstraint, - ]]; - } - - // Set web view background color to white so scrolling at extremes won't have a gray background - self.webView.backgroundColor = [UIColor whiteColor]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // Set button enabled status. - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; - self.refreshButton.enabled = NO; - self.safariButton.enabled = NO; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - NSURL *baseURL = (self.URL != nil) ? self.URL : [NSURL URLWithString:[MPAPIEndpoints baseURL]]; - - if (self.HTMLString) { - [self.webView loadHTMLString:self.HTMLString baseURL:baseURL]; - } else { - [self.webView loadRequest:[MPURLRequest requestWithURL:self.URL]]; - } -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [self.webView stopLoading]; - [super viewWillDisappear:animated]; -} - -#pragma mark - Hidding status bar (iOS 7 and above) - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -#pragma mark - -#pragma mark Navigation - -- (IBAction)refresh -{ - [self dismissActionSheet]; - [self.webView reload]; -} - -- (IBAction)done -{ - [self dismissActionSheet]; - if (self.delegate) { - [self.delegate dismissBrowserController:self animated:MP_ANIMATED]; - } else { - [self dismissViewControllerAnimated:MP_ANIMATED completion:nil]; - } -} - -- (IBAction)back -{ - [self dismissActionSheet]; - [self.webView goBack]; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; -} - -- (IBAction)forward -{ - [self dismissActionSheet]; - [self.webView goForward]; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; -} - -- (IBAction)safari -{ - if (self.actionSheet) { - [self dismissActionSheet]; - } else { - self.actionSheet = [[UIActionSheet alloc] initWithTitle:nil - delegate:self - cancelButtonTitle:@"Cancel" - destructiveButtonTitle:nil - otherButtonTitles:@"Open in Safari", nil]; - - if ([UIActionSheet instancesRespondToSelector:@selector(showFromBarButtonItem:animated:)]) { - [self.actionSheet showFromBarButtonItem:self.safariButton animated:YES]; - } else { - [self.actionSheet showInView:self.webView]; - } - } -} - -- (void)dismissActionSheet -{ - [self.actionSheet dismissWithClickedButtonIndex:0 animated:YES]; - -} - -#pragma mark - -#pragma mark UIActionSheetDelegate - -- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex -{ - self.actionSheet = nil; - if (buttonIndex == 0) { - // Open in Safari. - [[UIApplication sharedApplication] openURL:self.URL]; - } -} - -#pragma mark - -#pragma mark MPWebViewDelegate - -- (BOOL)webView:(MPWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType -{ - MPLogDebug(@"Ad browser (%p) starting to load URL: %@", self, request.URL); - self.URL = request.URL; - - BOOL appShouldOpenURL = ![self.URL.scheme isEqualToString:@"http"] && ![self.URL.scheme isEqualToString:@"https"]; - - if (appShouldOpenURL) { - [[UIApplication sharedApplication] openURL:self.URL]; - } - - return !appShouldOpenURL; -} - -- (void)webViewDidStartLoad:(MPWebView *)webView -{ - self.refreshButton.enabled = YES; - self.safariButton.enabled = YES; - [self.spinner startAnimating]; - - self.webViewLoadCount++; -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView -{ - self.webViewLoadCount--; - if (self.webViewLoadCount > 0) return; - - self.refreshButton.enabled = YES; - self.safariButton.enabled = YES; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; - [self.spinner stopAnimating]; -} - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error -{ - self.webViewLoadCount--; - - self.refreshButton.enabled = YES; - self.safariButton.enabled = YES; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; - [self.spinner stopAnimating]; - - // Ignore NSURLErrorDomain error (-999). - if (error.code == NSURLErrorCancelled) return; - - // Ignore "Frame Load Interrupted" errors after navigating to iTunes or the App Store. - if (error.code == 102 && [error.domain isEqual:@"WebKitErrorDomain"]) return; - - MPLogError(@"Ad browser (%p) experienced an error: %@.", self, [error localizedDescription]); -} - -#pragma mark - -#pragma mark Drawing - -- (CGContextRef)createContext -{ - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = CGBitmapContextCreate(nil,27,27,8,0, - colorSpace,(CGBitmapInfo)kCGImageAlphaPremultipliedLast); - CFRelease(colorSpace); - return context; -} - -- (UIImage *)backArrowImage -{ - CGContextRef context = [self createContext]; - CGColorRef fillColor = [[UIColor blackColor] CGColor]; - CGContextSetFillColor(context, CGColorGetComponents(fillColor)); - - CGContextBeginPath(context); - CGContextMoveToPoint(context, 8.0f, 13.0f); - CGContextAddLineToPoint(context, 24.0f, 4.0f); - CGContextAddLineToPoint(context, 24.0f, 22.0f); - CGContextClosePath(context); - CGContextFillPath(context); - - CGImageRef imageRef = CGBitmapContextCreateImage(context); - CGContextRelease(context); - - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; - CGImageRelease(imageRef); - return image; -} - -- (UIImage *)forwardArrowImage -{ - CGContextRef context = [self createContext]; - CGColorRef fillColor = [[UIColor blackColor] CGColor]; - CGContextSetFillColor(context, CGColorGetComponents(fillColor)); - - CGContextBeginPath(context); - CGContextMoveToPoint(context, 24.0f, 13.0f); - CGContextAddLineToPoint(context, 8.0f, 4.0f); - CGContextAddLineToPoint(context, 8.0f, 22.0f); - CGContextClosePath(context); - CGContextFillPath(context); - - CGImageRef imageRef = CGBitmapContextCreateImage(context); - CGContextRelease(context); - - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; - CGImageRelease(imageRef); - return image; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.xib b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.xib deleted file mode 100644 index f79f27b032..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdBrowserController.xib +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdConfiguration.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdConfiguration.h deleted file mode 100644 index e9a68972f7..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdConfiguration.h +++ /dev/null @@ -1,115 +0,0 @@ -// -// MPAdConfiguration.h -// MoPub -// -// Copyright (c) 2012 MoPub, Inc. All rights reserved. -// - -#import -#import "MPGlobal.h" - -@class MPRewardedVideoReward; - -enum { - MPAdTypeUnknown = -1, - MPAdTypeBanner = 0, - MPAdTypeInterstitial = 1 -}; -typedef NSUInteger MPAdType; - -extern NSString * const kAdTypeHeaderKey; -extern NSString * const kAdUnitWarmingUpHeaderKey; -extern NSString * const kClickthroughHeaderKey; -extern NSString * const kCreativeIdHeaderKey; -extern NSString * const kCustomSelectorHeaderKey; -extern NSString * const kCustomEventClassNameHeaderKey; -extern NSString * const kCustomEventClassDataHeaderKey; -extern NSString * const kFailUrlHeaderKey; -extern NSString * const kHeightHeaderKey; -extern NSString * const kImpressionTrackerHeaderKey; -extern NSString * const kLaunchpageHeaderKey; -extern NSString * const kNativeSDKParametersHeaderKey; -extern NSString * const kNetworkTypeHeaderKey; -extern NSString * const kRefreshTimeHeaderKey; -extern NSString * const kAdTimeoutHeaderKey; -extern NSString * const kScrollableHeaderKey; -extern NSString * const kWidthHeaderKey; -extern NSString * const kDspCreativeIdKey; -extern NSString * const kPrecacheRequiredKey; -extern NSString * const kIsVastVideoPlayerKey; -extern NSString * const kRewardedVideoCurrencyNameHeaderKey; -extern NSString * const kRewardedVideoCurrencyAmountHeaderKey; -extern NSString * const kRewardedVideoCompletionUrlHeaderKey; -extern NSString * const kRewardedCurrenciesHeaderKey; -extern NSString * const kRewardedPlayableDurationHeaderKey; -extern NSString * const kRewardedPlayableRewardOnClickHeaderKey; - -extern NSString * const kInterstitialAdTypeHeaderKey; -extern NSString * const kOrientationTypeHeaderKey; - -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 kClickthroughExperimentBrowserAgent; - -extern NSString * const kViewabilityDisableHeaderKey; - -extern NSString * const kBannerImpressionVisableMsHeaderKey; -extern NSString * const kBannerImpressionMinPixelHeaderKey; - -@interface MPAdConfiguration : NSObject - -@property (nonatomic, assign) MPAdType adType; -@property (nonatomic, assign) BOOL adUnitWarmingUp; -@property (nonatomic, copy) NSString *networkType; -@property (nonatomic, assign) CGSize preferredSize; -@property (nonatomic, strong) NSURL *clickTrackingURL; -@property (nonatomic, strong) NSURL *impressionTrackingURL; -@property (nonatomic, strong) NSURL *failoverURL; -@property (nonatomic, strong) NSURL *interceptURLPrefix; -@property (nonatomic, assign) BOOL scrollable; -@property (nonatomic, assign) NSTimeInterval refreshInterval; -@property (nonatomic, assign) NSTimeInterval adTimeoutInterval; -@property (nonatomic, copy) NSData *adResponseData; -@property (nonatomic, strong) NSDictionary *nativeSDKParameters; -@property (nonatomic, copy) NSString *customSelectorName; -@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 *headerAdType; -@property (nonatomic, assign) NSInteger nativeVideoPlayVisiblePercent; -@property (nonatomic, assign) NSInteger nativeVideoPauseVisiblePercent; -@property (nonatomic, assign) CGFloat nativeImpressionMinVisiblePixels; -@property (nonatomic, assign) NSInteger nativeImpressionMinVisiblePercent; // The pixels header takes priority over percentage, but percentage is left for backwards compatibility -@property (nonatomic, assign) NSTimeInterval nativeImpressionMinVisibleTimeInterval; -@property (nonatomic, assign) NSTimeInterval nativeVideoMaxBufferingTime; -@property (nonatomic) NSDictionary *nativeVideoTrackers; -@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; - - -// viewable impression tracking experiment -@property (nonatomic) NSTimeInterval impressionMinVisibleTimeInSec; -@property (nonatomic) CGFloat impressionMinVisiblePixels; -@property (nonatomic) BOOL visibleImpressionTrackingEnabled; - -- (id)initWithHeaders:(NSDictionary *)headers data:(NSData *)data; - -- (BOOL)hasPreferredSize; -- (NSString *)adResponseHTMLString; -- (NSString *)clickDetectionURLPrefix; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdConfiguration.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdConfiguration.m deleted file mode 100644 index 254fa8c597..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdConfiguration.m +++ /dev/null @@ -1,530 +0,0 @@ -// -// MPAdConfiguration.m -// MoPub -// -// Copyright (c) 2012 MoPub, Inc. All rights reserved. -// - -#import "MPAdConfiguration.h" - -#import "MOPUBExperimentProvider.h" -#import "MPConsentAdServerKeys.h" -#import "MPConsentManager.h" -#import "MPConstants.h" -#import "MPLogging.h" -#import "MPRewardedVideoReward.h" -#import "MPViewabilityTracker.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "NSString+MPAdditions.h" - -#if MP_HAS_NATIVE_PACKAGE -#import "MPVASTTrackingEvent.h" -#endif - -NSString * const kAdTypeHeaderKey = @"X-Adtype"; -NSString * const kAdUnitWarmingUpHeaderKey = @"X-Warmup"; -NSString * const kClickthroughHeaderKey = @"X-Clickthrough"; -NSString * const kCreativeIdHeaderKey = @"X-CreativeId"; -NSString * const kCustomSelectorHeaderKey = @"X-Customselector"; -NSString * const kCustomEventClassNameHeaderKey = @"X-Custom-Event-Class-Name"; -NSString * const kCustomEventClassDataHeaderKey = @"X-Custom-Event-Class-Data"; -NSString * const kFailUrlHeaderKey = @"X-Failurl"; -NSString * const kHeightHeaderKey = @"X-Height"; -NSString * const kImpressionTrackerHeaderKey = @"X-Imptracker"; -NSString * const kLaunchpageHeaderKey = @"X-Launchpage"; -NSString * const kNativeSDKParametersHeaderKey = @"X-Nativeparams"; -NSString * const kNetworkTypeHeaderKey = @"X-Networktype"; -NSString * const kRefreshTimeHeaderKey = @"X-Refreshtime"; -NSString * const kAdTimeoutHeaderKey = @"X-AdTimeout"; -NSString * const kScrollableHeaderKey = @"X-Scrollable"; -NSString * const kWidthHeaderKey = @"X-Width"; -NSString * const kDspCreativeIdKey = @"X-DspCreativeid"; -NSString * const kPrecacheRequiredKey = @"X-PrecacheRequired"; -NSString * const kIsVastVideoPlayerKey = @"X-VastVideoPlayer"; - -NSString * const kInterstitialAdTypeHeaderKey = @"X-Fulladtype"; -NSString * const kOrientationTypeHeaderKey = @"X-Orientation"; - -NSString * const kNativeImpressionMinVisiblePixelsHeaderKey = @"X-Native-Impression-Min-Px"; // The pixels header takes priority over percentage, but percentage is left for backwards compatibility -NSString * const kNativeImpressionMinVisiblePercentHeaderKey = @"X-Impression-Min-Visible-Percent"; -NSString * const kNativeImpressionVisibleMsHeaderKey = @"X-Impression-Visible-Ms"; -NSString * const kNativeVideoPlayVisiblePercentHeaderKey = @"X-Play-Visible-Percent"; -NSString * const kNativeVideoPauseVisiblePercentHeaderKey = @"X-Pause-Visible-Percent"; -NSString * const kNativeVideoMaxBufferingTimeMsHeaderKey = @"X-Max-Buffer-Ms"; -NSString * const kNativeVideoTrackersHeaderKey = @"X-Video-Trackers"; - -NSString * const kBannerImpressionVisableMsHeaderKey = @"X-Banner-Impression-Min-Ms"; -NSString * const kBannerImpressionMinPixelHeaderKey = @"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"; - -// rewarded video -NSString * const kRewardedVideoCurrencyNameHeaderKey = @"X-Rewarded-Video-Currency-Name"; -NSString * const kRewardedVideoCurrencyAmountHeaderKey = @"X-Rewarded-Video-Currency-Amount"; -NSString * const kRewardedVideoCompletionUrlHeaderKey = @"X-Rewarded-Video-Completion-Url"; -NSString * const kRewardedCurrenciesHeaderKey = @"X-Rewarded-Currencies"; - -// rewarded playables -NSString * const kRewardedPlayableDurationHeaderKey = @"X-Rewarded-Duration"; -NSString * const kRewardedPlayableRewardOnClickHeaderKey = @"X-Should-Reward-On-Click"; - -// native video -NSString * const kNativeVideoTrackerUrlMacro = @"%%VIDEO_EVENT%%"; -NSString * const kNativeVideoTrackerEventsHeaderKey = @"events"; -NSString * const kNativeVideoTrackerUrlsHeaderKey = @"urls"; -NSString * const kNativeVideoTrackerEventDictionaryKey = @"event"; -NSString * const kNativeVideoTrackerTextDictionaryKey = @"text"; - -// clickthrough experiment -NSString * const kClickthroughExperimentBrowserAgent = @"X-Browser-Agent"; -static const NSInteger kMaximumVariantForClickthroughExperiment = 2; - -// viewability -NSString * const kViewabilityDisableHeaderKey = @"X-Disable-Viewability"; - - -@interface MPAdConfiguration () - -@property (nonatomic, copy) NSString *adResponseHTMLString; -@property (nonatomic, strong, readwrite) NSArray *availableRewards; -@property (nonatomic) MOPUBDisplayAgentType clickthroughExperimentBrowserAgent; - -- (MPAdType)adTypeFromHeaders:(NSDictionary *)headers; -- (NSString *)networkTypeFromHeaders:(NSDictionary *)headers; -- (NSTimeInterval)refreshIntervalFromHeaders:(NSDictionary *)headers; -- (NSDictionary *)dictionaryFromHeaders:(NSDictionary *)headers forKey:(NSString *)key; -- (NSURL *)URLFromHeaders:(NSDictionary *)headers forKey:(NSString *)key; -- (Class)setUpCustomEventClassFromHeaders:(NSDictionary *)headers; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdConfiguration - -- (id)initWithHeaders:(NSDictionary *)headers data:(NSData *)data -{ - self = [super init]; - if (self) { - self.adResponseData = data; - - self.adType = [self adTypeFromHeaders:headers]; - - self.adUnitWarmingUp = [[headers objectForKey:kAdUnitWarmingUpHeaderKey] boolValue]; - - self.networkType = [self networkTypeFromHeaders:headers]; - self.networkType = self.networkType ? self.networkType : @""; - - self.preferredSize = CGSizeMake([[headers objectForKey:kWidthHeaderKey] floatValue], - [[headers objectForKey:kHeightHeaderKey] floatValue]); - - self.clickTrackingURL = [self URLFromHeaders:headers - forKey:kClickthroughHeaderKey]; - self.impressionTrackingURL = [self URLFromHeaders:headers - forKey:kImpressionTrackerHeaderKey]; - self.failoverURL = [self URLFromHeaders:headers - forKey:kFailUrlHeaderKey]; - self.interceptURLPrefix = [self URLFromHeaders:headers - forKey:kLaunchpageHeaderKey]; - - self.scrollable = [[headers objectForKey:kScrollableHeaderKey] boolValue]; - self.refreshInterval = [self refreshIntervalFromHeaders:headers]; - self.adTimeoutInterval = [self timeIntervalFromHeaders:headers forKey:kAdTimeoutHeaderKey]; - - - self.nativeSDKParameters = [self dictionaryFromHeaders:headers - forKey:kNativeSDKParametersHeaderKey]; - self.customSelectorName = [headers objectForKey:kCustomSelectorHeaderKey]; - - self.orientationType = [self orientationTypeFromHeaders:headers]; - - self.customEventClass = [self setUpCustomEventClassFromHeaders:headers]; - - self.customEventClassData = [self customEventClassDataFromHeaders:headers]; - - self.dspCreativeId = [headers objectForKey:kDspCreativeIdKey]; - - self.precacheRequired = [[headers objectForKey:kPrecacheRequiredKey] boolValue]; - - self.isVastVideoPlayer = [[headers objectForKey:kIsVastVideoPlayerKey] boolValue]; - - self.creationTimestamp = [NSDate date]; - - self.creativeId = [headers objectForKey:kCreativeIdHeaderKey]; - - self.headerAdType = [headers objectForKey:kAdTypeHeaderKey]; - - self.nativeVideoPlayVisiblePercent = [self percentFromHeaders:headers forKey:kNativeVideoPlayVisiblePercentHeaderKey]; - - self.nativeVideoPauseVisiblePercent = [self percentFromHeaders:headers forKey:kNativeVideoPauseVisiblePercentHeaderKey]; - - self.nativeImpressionMinVisiblePixels = [[self adAmountFromHeaders:headers key:kNativeImpressionMinVisiblePixelsHeaderKey] floatValue]; - - self.nativeImpressionMinVisiblePercent = [self percentFromHeaders:headers forKey:kNativeImpressionMinVisiblePercentHeaderKey]; - - self.nativeImpressionMinVisibleTimeInterval = [self timeIntervalFromMsHeaders:headers forKey:kNativeImpressionVisibleMsHeaderKey]; - - self.nativeVideoMaxBufferingTime = [self timeIntervalFromMsHeaders:headers forKey:kNativeVideoMaxBufferingTimeMsHeaderKey]; -#if MP_HAS_NATIVE_PACKAGE - self.nativeVideoTrackers = [self nativeVideoTrackersFromHeaders:headers key:kNativeVideoTrackersHeaderKey]; -#endif - - self.impressionMinVisibleTimeInSec = [self timeIntervalFromMsHeaders:headers forKey:kBannerImpressionVisableMsHeaderKey]; - self.impressionMinVisiblePixels = [[self adAmountFromHeaders:headers key:kBannerImpressionMinPixelHeaderKey] floatValue]; - - // rewarded video - - // Attempt to parse the multiple currency header first since this will take - // precedence over the older single currency approach. - self.availableRewards = [self parseAvailableRewardsFromHeaders:headers]; - 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 - // headers. - else { - NSString *currencyName = [headers objectForKey:kRewardedVideoCurrencyNameHeaderKey] ?: kMPRewardedVideoRewardCurrencyTypeUnspecified; - - NSNumber *currencyAmount = [self adAmountFromHeaders:headers key:kRewardedVideoCurrencyAmountHeaderKey]; - if (currencyAmount.integerValue <= 0) { - currencyAmount = @(kMPRewardedVideoRewardCurrencyAmountUnspecified); - } - - MPRewardedVideoReward * reward = [[MPRewardedVideoReward alloc] initWithCurrencyType:currencyName amount:currencyAmount]; - self.availableRewards = [NSArray arrayWithObject:reward]; - self.selectedReward = reward; - } - - self.rewardedVideoCompletionUrl = [headers objectForKey:kRewardedVideoCompletionUrlHeaderKey]; - - // rewarded playables - self.rewardedPlayableDuration = [self timeIntervalFromHeaders:headers forKey:kRewardedPlayableDurationHeaderKey]; - self.rewardedPlayableShouldRewardOnClick = [[headers objectForKey:kRewardedPlayableRewardOnClickHeaderKey] boolValue]; - - // clickthrough experiment - self.clickthroughExperimentBrowserAgent = [self clickthroughExperimentVariantFromHeaders:headers forKey:kClickthroughExperimentBrowserAgent]; - [MOPUBExperimentProvider setDisplayAgentFromAdServer:self.clickthroughExperimentBrowserAgent]; - - // viewability - NSString * disabledViewabilityValue = [headers objectForKey:kViewabilityDisableHeaderKey]; - NSNumber * disabledViewabilityVendors = disabledViewabilityValue != nil ? [disabledViewabilityValue safeIntegerValue] : nil; - if (disabledViewabilityVendors != nil && - [disabledViewabilityVendors integerValue] >= MPViewabilityOptionNone && - [disabledViewabilityVendors integerValue] <= MPViewabilityOptionAll) { - MPViewabilityOption vendorsToDisable = (MPViewabilityOption)([disabledViewabilityVendors integerValue]); - [MPViewabilityTracker disableViewability:vendorsToDisable]; - } - - // consent - [[MPConsentManager sharedManager] forceStatusShouldForceExplicitNo:[headers[kForceExplicitNoKey] boolValue] - shouldInvalidateConsent:[headers[kInvalidateConsentKey] boolValue] - shouldReacquireConsent:[headers[kReacquireConsentKey] boolValue] - consentChangeReason:headers[kConsentChangedReasonKey] - shouldBroadcast:YES]; - } - return self; -} - -- (Class)setUpCustomEventClassFromHeaders:(NSDictionary *)headers -{ - NSString *customEventClassName = [headers objectForKey:kCustomEventClassNameHeaderKey]; - - NSMutableDictionary *convertedCustomEvents = [NSMutableDictionary dictionary]; - if (self.adType == MPAdTypeBanner) { - [convertedCustomEvents setObject:@"MPGoogleAdMobBannerCustomEvent" forKey:@"admob_native"]; - [convertedCustomEvents setObject:@"MPMillennialBannerCustomEvent" forKey:@"millennial_native"]; - [convertedCustomEvents setObject:@"MPHTMLBannerCustomEvent" forKey:@"html"]; - [convertedCustomEvents setObject:@"MPMRAIDBannerCustomEvent" forKey:@"mraid"]; - [convertedCustomEvents setObject:@"MOPUBNativeVideoCustomEvent" forKey:@"json_video"]; - [convertedCustomEvents setObject:@"MPMoPubNativeCustomEvent" forKey:@"json"]; - } else if (self.adType == MPAdTypeInterstitial) { - [convertedCustomEvents setObject:@"MPGoogleAdMobInterstitialCustomEvent" forKey:@"admob_full"]; - [convertedCustomEvents setObject:@"MPMillennialInterstitialCustomEvent" forKey:@"millennial_full"]; - [convertedCustomEvents setObject:@"MPHTMLInterstitialCustomEvent" forKey:@"html"]; - [convertedCustomEvents setObject:@"MPMRAIDInterstitialCustomEvent" forKey:@"mraid"]; - [convertedCustomEvents setObject:@"MPMoPubRewardedVideoCustomEvent" forKey:@"rewarded_video"]; - [convertedCustomEvents setObject:@"MPMoPubRewardedPlayableCustomEvent" forKey:@"rewarded_playable"]; - } - if ([convertedCustomEvents objectForKey:self.networkType]) { - customEventClassName = [convertedCustomEvents objectForKey:self.networkType]; - } - - Class customEventClass = NSClassFromString(customEventClassName); - - if (customEventClassName && !customEventClass) { - MPLogWarn(@"Could not find custom event class named %@", customEventClassName); - } - - return customEventClass; -} - - - -- (NSDictionary *)customEventClassDataFromHeaders:(NSDictionary *)headers -{ - NSDictionary *result = [self dictionaryFromHeaders:headers forKey:kCustomEventClassDataHeaderKey]; - if (!result) { - result = [self dictionaryFromHeaders:headers forKey:kNativeSDKParametersHeaderKey]; - } - return result; -} - - -- (BOOL)hasPreferredSize -{ - return (self.preferredSize.width > 0 && self.preferredSize.height > 0); -} - -- (NSString *)adResponseHTMLString -{ - if (!_adResponseHTMLString) { - self.adResponseHTMLString = [[NSString alloc] initWithData:self.adResponseData - encoding:NSUTF8StringEncoding]; - } - - return _adResponseHTMLString; -} - -- (NSString *)clickDetectionURLPrefix -{ - return self.interceptURLPrefix.absoluteString ? self.interceptURLPrefix.absoluteString : @""; -} - -#pragma mark - Private - -- (MPAdType)adTypeFromHeaders:(NSDictionary *)headers -{ - NSString *adTypeString = [headers objectForKey:kAdTypeHeaderKey]; - - if ([adTypeString isEqualToString:@"interstitial"] || [adTypeString isEqualToString:@"rewarded_video"] || [adTypeString isEqualToString:@"rewarded_playable"]) { - return MPAdTypeInterstitial; - } else if (adTypeString && - [headers objectForKey:kOrientationTypeHeaderKey]) { - return MPAdTypeInterstitial; - } else if (adTypeString) { - return MPAdTypeBanner; - } else { - return MPAdTypeUnknown; - } -} - -- (NSString *)networkTypeFromHeaders:(NSDictionary *)headers -{ - NSString *adTypeString = [headers objectForKey:kAdTypeHeaderKey]; - if ([adTypeString isEqualToString:@"interstitial"]) { - return [headers objectForKey:kInterstitialAdTypeHeaderKey]; - } else { - return adTypeString; - } -} - -- (NSURL *)URLFromHeaders:(NSDictionary *)headers forKey:(NSString *)key -{ - NSString *URLString = [headers objectForKey:key]; - return URLString ? [NSURL URLWithString:URLString] : nil; -} - -- (NSDictionary *)dictionaryFromHeaders:(NSDictionary *)headers forKey:(NSString *)key -{ - NSData *data = [(NSString *)[headers objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]; - NSDictionary *JSONFromHeaders = nil; - if (data) { - JSONFromHeaders = [NSJSONSerialization mp_JSONObjectWithData:data options:NSJSONReadingMutableContainers clearNullObjects:YES error:nil]; - } - return JSONFromHeaders; -} - -- (NSTimeInterval)refreshIntervalFromHeaders:(NSDictionary *)headers -{ - NSString *intervalString = [headers objectForKey:kRefreshTimeHeaderKey]; - NSTimeInterval interval = -1; - if (intervalString) { - interval = [intervalString doubleValue]; - if (interval < MINIMUM_REFRESH_INTERVAL) { - interval = MINIMUM_REFRESH_INTERVAL; - } - } - return interval; -} - -- (NSTimeInterval)timeIntervalFromHeaders:(NSDictionary *)headers forKey:(NSString *)key -{ - NSString *intervalString = [headers objectForKey:key]; - NSTimeInterval interval = -1; - if (intervalString) { - int parsedInt = -1; - BOOL isNumber = [[NSScanner scannerWithString:intervalString] scanInt:&parsedInt]; - if (isNumber && parsedInt >= 0) { - interval = parsedInt; - } - } - - return interval; -} - -- (NSTimeInterval)timeIntervalFromMsHeaders:(NSDictionary *)headers forKey:(NSString *)key -{ - NSString *msString = [headers objectForKey:key]; - NSTimeInterval interval = -1; - if (msString) { - int parsedInt = -1; - BOOL isNumber = [[NSScanner scannerWithString:msString] scanInt:&parsedInt]; - if (isNumber && parsedInt >= 0) { - interval = parsedInt / 1000.0f; - } - } - - return interval; -} - -- (NSInteger)percentFromHeaders:(NSDictionary *)headers forKey:(NSString *)key -{ - NSString *percentString = [headers objectForKey:key]; - NSInteger percent = -1; - if (percentString) { - int parsedInt = -1; - BOOL isNumber = [[NSScanner scannerWithString:percentString] scanInt:&parsedInt]; - if (isNumber && parsedInt >= 0 && parsedInt <= 100) { - percent = parsedInt; - } - } - - return percent; -} - -- (NSNumber *)adAmountFromHeaders:(NSDictionary *)headers key:(NSString *)key -{ - NSString *amountString = [headers objectForKey:key]; - NSNumber *amount = @(-1); - if (amountString) { - int parsedInt = -1; - BOOL isNumber = [[NSScanner scannerWithString:amountString] scanInt:&parsedInt]; - if (isNumber && parsedInt >= 0) { - amount = @(parsedInt); - } - } - - return amount; -} - -- (MPInterstitialOrientationType)orientationTypeFromHeaders:(NSDictionary *)headers -{ - NSString *orientation = [headers objectForKey:kOrientationTypeHeaderKey]; - if ([orientation isEqualToString:@"p"]) { - return MPInterstitialOrientationTypePortrait; - } else if ([orientation isEqualToString:@"l"]) { - return MPInterstitialOrientationTypeLandscape; - } else { - return MPInterstitialOrientationTypeAll; - } -} - -#if MP_HAS_NATIVE_PACKAGE -- (NSDictionary *)nativeVideoTrackersFromHeaders:(NSDictionary *)headers key:(NSString *)key -{ - NSDictionary *dictFromHeader = [self dictionaryFromHeaders:headers forKey:key]; - if (!dictFromHeader) { - return nil; - } - NSMutableDictionary *videoTrackerDict = [NSMutableDictionary new]; - NSArray *events = dictFromHeader[kNativeVideoTrackerEventsHeaderKey]; - NSArray *urls = dictFromHeader[kNativeVideoTrackerUrlsHeaderKey]; - NSSet *supportedEvents = [NSSet setWithObjects:MPVASTTrackingEventTypeStart, MPVASTTrackingEventTypeFirstQuartile, MPVASTTrackingEventTypeMidpoint, MPVASTTrackingEventTypeThirdQuartile, MPVASTTrackingEventTypeComplete, nil]; - for (NSString *event in events) { - if (![supportedEvents containsObject:event]) { - continue; - } - [self setVideoTrackers:videoTrackerDict event:event urls:urls]; - } - if (videoTrackerDict.count == 0) { - return nil; - } - return videoTrackerDict; -} - -- (void)setVideoTrackers:(NSMutableDictionary *)videoTrackerDict event:(NSString *)event urls:(NSArray *)urls { - NSMutableArray *trackers = [NSMutableArray new]; - for (NSString *url in urls) { - if ([url rangeOfString:kNativeVideoTrackerUrlMacro].location != NSNotFound) { - NSString *trackerUrl = [url stringByReplacingOccurrencesOfString:kNativeVideoTrackerUrlMacro withString:event]; - NSDictionary *dict = @{kNativeVideoTrackerEventDictionaryKey:event, kNativeVideoTrackerTextDictionaryKey:trackerUrl}; - MPVASTTrackingEvent *tracker = [[MPVASTTrackingEvent alloc] initWithDictionary:dict]; - [trackers addObject:tracker]; - } - } - if (trackers.count > 0) { - videoTrackerDict[event] = trackers; - } -} - -#endif - -- (NSArray *)parseAvailableRewardsFromHeaders:(NSDictionary *)headers { - // The X-Rewarded-Currencies header key doesn't exist. This is probably - // not a rewarded ad. - NSDictionary * currencies = [self dictionaryFromHeaders:headers forKey:kRewardedCurrenciesHeaderKey]; - 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) { - MPLogError(@"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)clickthroughExperimentVariantFromHeaders:(NSDictionary *)headers forKey:(NSString *)key -{ - NSString *variantString = [headers objectForKey:key]; - NSInteger variant = 0; - if (variantString) { - int parsedInt = -1; - BOOL isNumber = [[NSScanner scannerWithString:variantString] scanInt:&parsedInt]; - if (isNumber && parsedInt >= 0 && parsedInt <= kMaximumVariantForClickthroughExperiment) { - variant = parsedInt; - } - } - - return variant; -} - -- (BOOL)visibleImpressionTrackingEnabled -{ - if (self.impressionMinVisibleTimeInSec < 0 || self.impressionMinVisiblePixels <= 0) { - return NO; - } - return YES; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerCommunicator.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerCommunicator.m deleted file mode 100644 index 07a11246b4..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerCommunicator.m +++ /dev/null @@ -1,217 +0,0 @@ -// -// MPAdServerCommunicator.m -// MoPub -// -// Copyright (c) 2012 MoPub, Inc. All rights reserved. -// - -#import "MPAdServerCommunicator.h" - -#import "MoPub.h" -#import "MPAdConfiguration.h" -#import "MPAPIEndpoints.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPURLRequest.h" - -// Ad response header -static NSString * const kAdResponseTypeHeaderKey = @"X-Ad-Response-Type"; -static NSString * const kAdResponseTypeMultipleResponse = @"multi"; - -// Multiple response JSON fields -static NSString * const kMultiAdResponsesKey = @"ad-responses"; -static NSString * const kMultiAdResponsesHeadersKey = @"headers"; -static NSString * const kMultiAdResponsesBodyKey = @"body"; -static NSString * const kMultiAdResponsesAdMarkupKey = @"adm"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdServerCommunicator () - -@property (nonatomic, assign, readwrite) BOOL loading; -@property (nonatomic, strong) NSURLSessionTask * task; - -@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; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdServerCommunicator - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [self.task cancel]; -} - -#pragma mark - Public - -- (void)loadURL:(NSURL *)URL -{ - [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]; - } - - // Generate request - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:URL]; - - __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; - - // Status code indicates an error. - if (response.statusCode >= 400) { - [strongSelf didFailWithError:[strongSelf errorForStatusCode:response.statusCode]]; - return; - } - - // Handle the response. - [strongSelf didFinishLoadingWithData:data headers:response.allHeaderFields]; - - } 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)failLoadForSDKInit { - MPLogError(@"Warning: Ad requested before initializing MoPub SDK. MoPub SDK 5.2.0 will require initializeSdkWithConfiguration:completion: to be called on MoPub.sharedInstance before attempting to load ads. Please update your integration as soon as possible."); -} - -#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 headers:(NSDictionary *)headers { - NSArray *configurations; - // Single ad response - if (![headers[kAdResponseTypeHeaderKey] isEqualToString:kAdResponseTypeMultipleResponse]) { - MPAdConfiguration *configuration = [[MPAdConfiguration alloc] initWithHeaders:headers - data:data]; - configurations = @[configuration]; - } - // Multiple ad responses - else { - // The response data is a JSON payload conforming to the structure: - // ad-responses: [ - // { - // headers: { x-adtype: html, ... }, - // body: " ... ", - // adm: "some ad markup" - // }, - // ... - // ] - NSError * error = nil; - NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; - if (error) { - MPLogError(@"Failed to parse multiple ad response JSON: %@", error.localizedDescription); - self.loading = NO; - [self.delegate communicatorDidFailWithError:error]; - return; - } - - NSArray * responses = json[kMultiAdResponsesKey]; - if (responses == nil) { - MPLogError(@"No ad responses"); - self.loading = NO; - [self.delegate communicatorDidFailWithError:[MOPUBError errorWithCode:MOPUBErrorUnableToParseJSONAdResponse]]; - return; - } - - MPLogInfo(@"There are %ld ad responses", responses.count); - - NSMutableArray * responseConfigurations = [NSMutableArray arrayWithCapacity:responses.count]; - for (NSDictionary * responseJson in responses) { - NSDictionary * headers = responseJson[kMultiAdResponsesHeadersKey]; - NSData * body = [responseJson[kMultiAdResponsesBodyKey] dataUsingEncoding:NSUTF8StringEncoding]; - - MPAdConfiguration * configuration = [[MPAdConfiguration alloc] initWithHeaders:headers data:body]; - if (configuration) { - configuration.advancedBidPayload = responseJson[kMultiAdResponsesAdMarkupKey]; - [responseConfigurations addObject:configuration]; - } - else { - MPLogInfo(@"Failed to generate configuration from\nheaders:\n%@\nbody:\n%@", headers, responseJson[kMultiAdResponsesBodyKey]); - } - } - - configurations = [NSArray arrayWithArray:responseConfigurations]; - } - - self.loading = NO; - [self.delegate communicatorDidReceiveAdConfigurations:configurations]; -} - -#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]; - } -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h deleted file mode 100644 index 8d1b968ce4..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// MPAdServerURLBuilder.h -// MoPub -// -// Copyright (c) 2012 MoPub. All rights reserved. -// - -#import -#import - -@interface MPAdServerURLBuilder : NSObject - -+ (NSURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location; - -+ (NSURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - viewability:(BOOL)viewability; - -+ (NSURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - adSequence:(NSInteger)adSequence - viewability:(BOOL)viewability; - -@end - -@interface MPAdServerURLBuilder (OpenEndpoint) - -/** - 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. - */ -+ (NSURL *)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. - */ -+ (NSURL *)sessionTrackingURL; - -@end - -@interface MPAdServerURLBuilder (Consent) - -/** - Constructs the consent synchronization endpoint URL using the current consent manager - state. - @returns URL to the consent synchronization endpoint. - */ -+ (NSURL *)consentSynchronizationUrl; - -/** - Constructs the URL to fetch the consent dialog using the current consent manager state. - @returns URL to the consent dialog endpoint - */ -+ (NSURL *)consentDialogURL; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m deleted file mode 100644 index bbe041a6a2..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m +++ /dev/null @@ -1,552 +0,0 @@ -// -// MPAdServerURLBuilder.m -// MoPub -// -// Copyright (c) 2012 MoPub. All rights reserved. -// - -#import "MPAdServerURLBuilder.h" - -#import "MPAdvancedBiddingManager.h" -#import "MPConsentAdServerKeys.h" -#import "MPConstants.h" -#import "MPGeolocationProvider.h" -#import "MPGlobal.h" -#import "MPIdentityProvider.h" -#import "MPCoreInstanceProvider.h" -#import "MPReachability.h" -#import "MPAPIEndpoints.h" -#import "MPViewabilityTracker.h" -#import "NSString+MPAdditions.h" -#import "NSString+MPConsentStatus.h" -#import "MPConsentManager.h" - -static NSString * const kMoPubInterfaceOrientationPortrait = @"p"; -static NSString * const kMoPubInterfaceOrientationLandscape = @"l"; -static NSInteger const kAdSequenceNone = -1; - -// Ad Server URL Keys -static NSString * const kServerAPIVersionKey = @"v"; -static NSString * const kApplicationVersionKey = @"av"; - -// Open Endpoint-specific Keys -static NSString * const kOpenEndpointIDKey = @"id"; -static NSString * const kOpenEndpointSessionTrackingKey = @"st"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdServerURLBuilder () - -+ (NSString *)queryParameterForKeywords:(NSString *)keywords; -+ (NSString *)queryParameterForUserDataKeywords:(NSString *)userDataKeywords; -+ (NSString *)queryParameterForOrientation; -+ (NSString *)queryParameterForScaleFactor; -+ (NSString *)queryParameterForTimeZone; -+ (NSString *)queryParameterForLocation:(CLLocation *)location; -+ (NSString *)queryParameterForMRAID; -+ (NSString *)queryParameterForDNT; -+ (NSString *)queryParameterForConnectionType; -+ (NSString *)queryParameterForApplicationVersion; -+ (NSString *)queryParameterForCarrierName; -+ (NSString *)queryParameterForISOCountryCode; -+ (NSString *)queryParameterForMobileNetworkCode; -+ (NSString *)queryParameterForMobileCountryCode; -+ (NSString *)queryParameterForDeviceName; -+ (NSString *)queryParameterForDesiredAdAssets:(NSArray *)assets; -+ (NSString *)queryParameterForAdSequence:(NSInteger)adSequence; -+ (NSString *)queryParameterForPhysicalScreenSize; -+ (NSString *)queryParameterForBundleIdentifier; -+ (NSString *)queryParameterForAppTransportSecurity; -+ (NSString *)queryParameterForConsent; -+ (BOOL)advertisingTrackingEnabled; - -// Helper methods -+ (NSString *)URLEncodedApplicationVersion; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdServerURLBuilder - -+ (NSURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location -{ - return [self URLWithAdUnitID:adUnitID - keywords:keywords - userDataKeywords:userDataKeywords - location:location - desiredAssets:nil - viewability:YES]; -} - -+ (NSURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - viewability:(BOOL)viewability -{ - - - return [self URLWithAdUnitID:adUnitID - keywords:keywords - userDataKeywords:userDataKeywords - location:location - desiredAssets:assets - adSequence:kAdSequenceNone - viewability:viewability]; -} - -+ (NSURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - adSequence:(NSInteger)adSequence - viewability:(BOOL)viewability -{ - NSString *URLString = [NSString stringWithFormat:@"%@?%@=%@&udid=%@&id=%@&nv=%@", - [MPAPIEndpoints baseURLStringWithPath:MOPUB_API_PATH_AD_REQUEST], - kServerAPIVersionKey, - MP_SERVER_VERSION, - [MPIdentityProvider identifier], - [adUnitID stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], - MP_SDK_VERSION]; - URLString = [URLString stringByAppendingString:[self queryParameterForOrientation]]; - URLString = [URLString stringByAppendingString:[self queryParameterForScaleFactor]]; - URLString = [URLString stringByAppendingString:[self queryParameterForTimeZone]]; - URLString = [URLString stringByAppendingString:[self queryParameterForMRAID]]; - URLString = [URLString stringByAppendingString:[self queryParameterForDNT]]; - URLString = [URLString stringByAppendingString:[self queryParameterForConnectionType]]; - URLString = [URLString stringByAppendingString:[self queryParameterForApplicationVersion]]; - URLString = [URLString stringByAppendingString:[self queryParameterForCarrierName]]; - URLString = [URLString stringByAppendingString:[self queryParameterForISOCountryCode]]; - URLString = [URLString stringByAppendingString:[self queryParameterForMobileNetworkCode]]; - URLString = [URLString stringByAppendingString:[self queryParameterForMobileCountryCode]]; - URLString = [URLString stringByAppendingString:[self queryParameterForDeviceName]]; - URLString = [URLString stringByAppendingString:[self queryParameterForDesiredAdAssets:assets]]; - URLString = [URLString stringByAppendingString:[self queryParameterForAdSequence:adSequence]]; - URLString = [URLString stringByAppendingString:[self queryParameterForPhysicalScreenSize]]; - URLString = [URLString stringByAppendingString:[self queryParameterForBundleIdentifier]]; - URLString = [URLString stringByAppendingString:[self queryParameterForAppTransportSecurity]]; - - if ([MPConsentManager sharedManager].canCollectPersonalInfo) { - URLString = [URLString stringByAppendingString:[self queryParameterForLocation:location]]; - } - - // If a user is in GDPR region and MoPub doesn't obtain consent from the user, personal keywords won't be sent - // to the server. It's handled in `queryParameterForKeywords` method. - URLString = [URLString stringByAppendingString:[self queryParameterForKeywords:keywords]]; - URLString = [URLString stringByAppendingString:[self queryParameterForUserDataKeywords:userDataKeywords]]; - - if (viewability) { - URLString = [URLString stringByAppendingString:[self queryParameterForViewability]]; - } - - NSString * advancedBiddingQueryParameter = [self queryParameterForAdvancedBidding]; - if (advancedBiddingQueryParameter) { - URLString = [URLString stringByAppendingString:advancedBiddingQueryParameter]; - } - - URLString = [URLString stringByAppendingString:[self queryParameterForConsent]]; - - // In the event that the `adUnitIdUsedForConsent` from `MPConsentManager` is still `nil`, - // we should populate it with this `adUnitId`. This is to cover the edge case where the - // publisher does not explcitily initialize the SDK via `initializeSdkWithConfiguration:completion:`. - if (adUnitID != nil && MPConsentManager.sharedManager.adUnitIdUsedForConsent == nil) { - MPConsentManager.sharedManager.adUnitIdUsedForConsent = adUnitID; - } - - return [NSURL URLWithString:URLString]; -} - - -+ (NSString *)queryParameterForUserDataKeywords:(NSString *)userDataKeywords -{ - if (![MPConsentManager sharedManager].canCollectPersonalInfo) { - return @""; - } - return [MPAdServerURLBuilder queryParameterForKeywords:userDataKeywords key:@"user_data_q"]; -} - -+ (NSString *)queryParameterForKeywords:(NSString *)keywords -{ - return [MPAdServerURLBuilder queryParameterForKeywords:keywords key:@"q"]; -} - -+ (NSString *)queryParameterForKeywords:(NSString *)keywords key:(NSString *)key -{ - NSString *trimmedKeywords = [keywords stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceCharacterSet]]; - if ([trimmedKeywords length] > 0) { - NSString *keywords = [trimmedKeywords stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - return [NSString stringWithFormat:@"&%@=%@", key, keywords]; - } - return @""; -} - -+ (NSString *)queryParameterForOrientation -{ - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - NSString *orientString = UIInterfaceOrientationIsPortrait(orientation) ? - kMoPubInterfaceOrientationPortrait : kMoPubInterfaceOrientationLandscape; - return [NSString stringWithFormat:@"&o=%@", orientString]; -} - -+ (NSString *)queryParameterForScaleFactor -{ - return [NSString stringWithFormat:@"&sc=%.1f", MPDeviceScaleFactor()]; -} - -+ (NSString *)queryParameterForTimeZone -{ - static NSDateFormatter *formatter; - @synchronized(self) - { - if (!formatter) formatter = [[NSDateFormatter alloc] init]; - } - [formatter setDateFormat:@"Z"]; - NSDate *today = [NSDate date]; - return [NSString stringWithFormat:@"&z=%@", [formatter stringFromDate:today]]; -} - -+ (NSString *)queryParameterForLocation:(CLLocation *)location -{ - NSString *result = @""; - - CLLocation *bestLocation = location; - CLLocation *locationFromProvider = [[[MPCoreInstanceProvider sharedProvider] sharedMPGeolocationProvider] lastKnownLocation]; - - if (locationFromProvider) { - bestLocation = locationFromProvider; - } - - if (bestLocation && bestLocation.horizontalAccuracy >= 0) { - result = [NSString stringWithFormat:@"&ll=%@,%@", - [NSNumber numberWithDouble:bestLocation.coordinate.latitude], - [NSNumber numberWithDouble:bestLocation.coordinate.longitude]]; - - if (bestLocation.horizontalAccuracy) { - result = [result stringByAppendingFormat:@"&lla=%@", - [NSNumber numberWithDouble:bestLocation.horizontalAccuracy]]; - } - - if (bestLocation == locationFromProvider) { - result = [result stringByAppendingString:@"&llsdk=1"]; - } - - NSTimeInterval locationLastUpdatedMillis = [[NSDate date] timeIntervalSinceDate:bestLocation.timestamp] * 1000.0; - - result = [result stringByAppendingFormat:@"&llf=%.0f", locationLastUpdatedMillis]; - } - - return result; -} - -+ (NSString *)queryParameterForMRAID -{ - if (NSClassFromString(@"MPMRAIDBannerCustomEvent") && - NSClassFromString(@"MPMRAIDInterstitialCustomEvent")) { - return @"&mr=1"; - } else { - return @""; - } -} - -+ (NSString *)queryParameterForDNT -{ - return [self advertisingTrackingEnabled] ? @"" : @"&dnt=1"; -} - -+ (NSString *)queryParameterForConnectionType -{ - return [[[MPCoreInstanceProvider sharedProvider] sharedMPReachability] hasWifi] ? @"&ct=2" : @"&ct=3"; -} - -+ (NSString *)queryParameterForApplicationVersion -{ - return [NSString stringWithFormat:@"&%@=%@", kApplicationVersionKey, [self URLEncodedApplicationVersion]]; -} - -+ (NSString *)queryParameterForCarrierName -{ - NSString *carrierName = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"carrierName"]; - return carrierName ? [NSString stringWithFormat:@"&cn=%@", - [carrierName mp_URLEncodedString]] : @""; -} - -+ (NSString *)queryParameterForISOCountryCode -{ - NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"isoCountryCode"]; - return code ? [NSString stringWithFormat:@"&iso=%@", [code mp_URLEncodedString]] : @""; -} - -+ (NSString *)queryParameterForMobileNetworkCode -{ - NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"mobileNetworkCode"]; - return code ? [NSString stringWithFormat:@"&mnc=%@", [code mp_URLEncodedString]] : @""; -} - -+ (NSString *)queryParameterForMobileCountryCode -{ - NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"mobileCountryCode"]; - return code ? [NSString stringWithFormat:@"&mcc=%@", [code mp_URLEncodedString]] : @""; -} - -+ (NSString *)queryParameterForDeviceName -{ - NSString *deviceName = [[UIDevice currentDevice] mp_hardwareDeviceName]; - return deviceName ? [NSString stringWithFormat:@"&dn=%@", [deviceName mp_URLEncodedString]] : @""; -} - -+ (NSString *)queryParameterForDesiredAdAssets:(NSArray *)assets -{ - NSString *concatenatedAssets = [assets componentsJoinedByString:@","]; - return [concatenatedAssets length] ? [NSString stringWithFormat:@"&assets=%@", concatenatedAssets] : @""; -} - -+ (NSString *)queryParameterForAdSequence:(NSInteger)adSequence -{ - return (adSequence >= 0) ? [NSString stringWithFormat:@"&seq=%ld", (long)adSequence] : @""; -} - -+ (NSString *)queryParameterForPhysicalScreenSize -{ - CGSize screenSize = MPScreenResolution(); - - return [NSString stringWithFormat:@"&w=%.0f&h=%.0f", screenSize.width, screenSize.height]; -} - -+ (NSString *)queryParameterForBundleIdentifier -{ - NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; - return bundleIdentifier ? [NSString stringWithFormat:@"&bundle=%@", [bundleIdentifier mp_URLEncodedString]] : @""; -} - -+ (NSString *)queryParameterForAppTransportSecurity -{ - return [NSString stringWithFormat:@"&ats=%@", @([[MPCoreInstanceProvider sharedProvider] appTransportSecuritySettings])]; -} - -+ (NSString *)queryParameterForViewability { - return [NSString stringWithFormat:@"&vv=%d", (int)[MPViewabilityTracker enabledViewabilityVendors]]; -} - -+ (NSString *)queryParameterForAdvancedBidding { - // Opted out of advanced bidding, no query parameter should be sent. - if (![MPAdvancedBiddingManager sharedManager].advancedBiddingEnabled) { - return nil; - } - - // No JSON at this point means that no advanced bidders were initialized. - NSString * tokens = MPAdvancedBiddingManager.sharedManager.bidderTokensJson; - if (tokens == nil) { - return nil; - } - - // URL encode the JSON string - NSString * urlEncodedTokens = [tokens mp_URLEncodedString]; - if (urlEncodedTokens == nil) { - return nil; - } - - return [NSString stringWithFormat:@"&abt=%@", urlEncodedTokens]; -} - -+ (NSString *)queryParameterForConsent { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // Consent state - NSString * consent = [NSString stringFromConsentStatus:manager.currentStatus]; - NSMutableString * consentQuery = [NSMutableString stringWithFormat:@"&%@=%@", kCurrentConsentStatusKey, consent]; - - // GDPR applicable state - if (manager.isGDPRApplicable != MPBoolUnknown) { - NSString * gdprBoolValue = manager.isGDPRApplicable > 0 ? @"1" : @"0"; - [consentQuery appendFormat:@"&%@=%@", kGDPRAppliesKey, gdprBoolValue]; - } - - // User consented versions - if (manager.consentedPrivacyPolicyVersion != nil) { - [consentQuery appendFormat:@"&%@=%@", kConsentedPrivacyPolicyVersionKey, manager.consentedPrivacyPolicyVersion]; - } - - if (manager.consentedVendorListVersion != nil) { - [consentQuery appendFormat:@"&%@=%@", kConsentedVendorListVersionKey, manager.consentedVendorListVersion]; - } - - return consentQuery; -} - -+ (BOOL)advertisingTrackingEnabled -{ - return [MPIdentityProvider advertisingTrackingEnabled]; -} - -+ (NSString *)URLEncodedApplicationVersion { - static NSString * gApplicationVersion; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gApplicationVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] mp_URLEncodedString]; - }); - - return gApplicationVersion; -} - -@end - -@interface MPAdServerURLBuilder (Helper) - -+ (NSURL *)URLWithEndpointPath:(NSString *)endpointPath queryParameters:(NSDictionary *)parameters; - -+ (NSString *)queryItemForKey:(NSString *)key value:(NSString *)value; - -@end - -@implementation MPAdServerURLBuilder (Helper) - -+ (NSURL *)URLWithEndpointPath:(NSString *)endpointPath queryParameters:(NSDictionary *)parameters { - // Build the full URL string - NSString * baseURLString = [MPAPIEndpoints baseURLStringWithPath:endpointPath]; - - NSMutableArray * queryItems = [NSMutableArray array]; - [parameters enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull value, BOOL * _Nonnull stop) { - NSString * queryItem = [self queryItemForKey:key value:value]; - [queryItems addObject:queryItem]; - }]; - - NSString * queryParameters = [queryItems componentsJoinedByString:@"&"]; - NSString * url = [NSString stringWithFormat:@"%@?%@", baseURLString, queryParameters]; - - return [NSURL URLWithString:url]; -} - -+ (NSString *)queryItemForKey:(NSString *)key value:(NSString *)value { - if (key == nil || value == nil) { - return nil; - } - - NSString * encodedValue = [value mp_URLEncodedString]; - return [NSString stringWithFormat:@"%@=%@", key, encodedValue]; -} - -@end - -@implementation MPAdServerURLBuilder (OpenEndpoint) - -+ (NSURL *)conversionTrackingURLForAppID:(NSString *)appID { - return [self openEndpointURLWithIDParameter:appID isSessionTracking:NO]; -} - -+ (NSURL *)sessionTrackingURL { - NSString *bundleIdentifier = [[[NSBundle mainBundle] bundleIdentifier] mp_URLEncodedString]; - return [self openEndpointURLWithIDParameter:bundleIdentifier isSessionTracking:YES]; -} - -+ (NSURL *)openEndpointURLWithIDParameter:(NSString *)idParameter isSessionTracking:(BOOL)isSessionTracking { - MPConsentManager * manager = MPConsentManager.sharedManager; - - NSMutableDictionary * queryParameters = [NSMutableDictionary dictionary]; - - // REQUIRED: IDFA - queryParameters[kIdfaKey] = [MPIdentityProvider identifier]; - - // REQUIRED: ID Parameter (used for different things depending on which URL, take from method parameter) - queryParameters[kOpenEndpointIDKey] = idParameter; - - // REQUIRED: Server API Version - queryParameters[kServerAPIVersionKey] = MP_SERVER_VERSION; - - // REQUIRED: SDK Version - queryParameters[kSDKVersionKey] = MP_SDK_VERSION; - - // REQUIRED: Application Version - queryParameters[kApplicationVersionKey] = [self URLEncodedApplicationVersion]; - - // OPTIONAL: Include Session Tracking Parameter if needed - if (isSessionTracking) { - queryParameters[kOpenEndpointSessionTrackingKey] = @"1"; - } - - // REQUIRED: GDPR region applicable - if (manager.isGDPRApplicable != MPBoolUnknown) { - queryParameters[kGDPRAppliesKey] = manager.isGDPRApplicable > 0 ? @"1" : @"0"; - } - - // REQUIRED: Current consent status - queryParameters[kCurrentConsentStatusKey] = [NSString stringFromConsentStatus:manager.currentStatus]; - - // OPTIONAL: Consented versions - queryParameters[kConsentedPrivacyPolicyVersionKey] = manager.consentedPrivacyPolicyVersion; - queryParameters[kConsentedVendorListVersionKey] = manager.consentedVendorListVersion; - - return [self URLWithEndpointPath:MOPUB_API_PATH_OPEN queryParameters:queryParameters]; -} - -@end - -@implementation MPAdServerURLBuilder (Consent) - -#pragma mark - Consent URLs - -+ (NSURL *)consentSynchronizationUrl { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // REQUIRED: Ad unit ID for consent may be empty if the publisher - // never initialized the SDK. - NSMutableDictionary * queryParameters = [NSMutableDictionary dictionary]; - queryParameters[kAdUnitIdKey] = manager.adUnitIdUsedForConsent; - - // REQUIRED: SDK version, DNT, Bundle - queryParameters[kSDKVersionKey] = MP_SDK_VERSION; - queryParameters[kDoNotTrackIdKey] = [MPIdentityProvider advertisingTrackingEnabled] ? nil : @"1"; - queryParameters[kBundleKey] = [[[NSBundle mainBundle] bundleIdentifier] mp_URLEncodedString]; - - // REQUIRED: Current consent status - queryParameters[kCurrentConsentStatusKey] = [NSString stringFromConsentStatus:manager.currentStatus]; - - // REQUIRED: GDPR region applicable - if (manager.isGDPRApplicable != MPBoolUnknown) { - queryParameters[kGDPRAppliesKey] = manager.isGDPRApplicable > 0 ? @"1" : @"0"; - } - - // OPTIONAL: IFA for consent, last synchronized consent status, last changed reason, - // last changed timestamp in milliseconds - queryParameters[kIdfaKey] = manager.ifaForConsent; - queryParameters[kLastSynchronizedConsentStatusKey] = manager.lastSynchronizedStatus; - queryParameters[kConsentChangedReasonKey] = manager.lastChangedReason; - queryParameters[kLastChangedMsKey] = manager.lastChangedTimestampInMilliseconds > 0 ? [NSString stringWithFormat:@"%llu", (unsigned long long)manager.lastChangedTimestampInMilliseconds] : nil; - - // OPTIONAL: Consented versions - queryParameters[kConsentedPrivacyPolicyVersionKey] = manager.consentedPrivacyPolicyVersion; - queryParameters[kConsentedVendorListVersionKey] = manager.consentedVendorListVersion; - queryParameters[kCachedIabVendorListHashKey] = manager.iabVendorListHash; - - // OPTIONAL: Server extras - queryParameters[kExtrasKey] = manager.extras; - - return [self URLWithEndpointPath:MOPUB_API_PATH_CONSENT_SYNC queryParameters:queryParameters]; -} - -+ (NSURL *)consentDialogURL { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // REQUIRED: Ad unit ID for consent may be empty if the publisher - // never initialized the SDK. - NSMutableDictionary * queryParameters = [NSMutableDictionary dictionary]; - queryParameters[kAdUnitIdKey] = manager.adUnitIdUsedForConsent; - - // REQUIRED: SDK version, DNT, Bundle, Language - queryParameters[kSDKVersionKey] = MP_SDK_VERSION; - queryParameters[kDoNotTrackIdKey] = [MPIdentityProvider advertisingTrackingEnabled] ? nil : @"1"; - queryParameters[kBundleKey] = [[[NSBundle mainBundle] bundleIdentifier] mp_URLEncodedString]; - queryParameters[kLanguageKey] = manager.currentLanguageCode; - - return [self URLWithEndpointPath:MOPUB_API_PATH_CONSENT_DIALOG queryParameters:queryParameters]; -} - -@end - diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPCountdownTimerView.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPCountdownTimerView.h deleted file mode 100644 index c4a6aff689..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPCountdownTimerView.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// MPCountdownTimerView.h -// MoPubSDK -// -// Copyright © 2016 MoPub. All rights reserved. -// - -#import - -/** - * A view that will display a countdown timer and invoke a completion block once - * the timer has elapsed. - */ -@interface MPCountdownTimerView : UIView - -/** - * Flag indicating if the timer is active. - */ -@property (nonatomic, readonly) BOOL isActive; - -/** - * Flag indicating if the timer is currently paused. - */ -@property (nonatomic, readonly) BOOL isPaused; - -/** - * Initializes a countdown timer view. The timer is not automatically started. - * - * @param frame Frame of the view. - * @param seconds Duration of the timer in seconds. This value must be greater than zero. - * @returns An initialized timer if successful; otherwise nil. - */ -- (instancetype)initWithFrame:(CGRect)frame duration:(NSTimeInterval)seconds; - -/** - * Starts the countdown timer. If the timer has already started, calling this method again will do nothing. - * - * @param completion Completion block that is fired when the timer elapses or is stopped. - */ -- (void)startWithTimerCompletion:(void(^)(BOOL hasElapsed))completion; - -/** - * Stops the timer and optionally invokes the completion block from `startWithTimerCompletion:`. - * If the timer hasn't started, calling this method will do nothing. - */ -- (void)stopAndSignalCompletion:(BOOL)shouldSignalCompletion; - -/** - * Pauses the timer. If the timer hasn't started, calling this method will do nothing. - */ -- (void)pause; - -/** - * Resumes the timer. If the timer isn't paused, calling this method will do nothing. - */ -- (void)resume; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPCountdownTimerView.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPCountdownTimerView.m deleted file mode 100644 index f0df837d51..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPCountdownTimerView.m +++ /dev/null @@ -1,195 +0,0 @@ -// -// MPCountdownTimerView.m -// MoPubSDK -// -// Copyright © 2016 MoPub. All rights reserved. -// - -#import "MPCountdownTimerView.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "NSBundle+MPAdditions.h" - -// The frequency at which the internal timer is fired in seconds. -// This value matches the step size of the jQuery knob in MPCountdownTimer.html. -static const NSTimeInterval kCountdownTimerInterval = 0.05; - -@interface MPCountdownTimerView() -@property (nonatomic, assign, readwrite) BOOL isPaused; - -@property (nonatomic, copy) void(^completionBlock)(BOOL); -@property (nonatomic, assign) NSTimeInterval currentSeconds; -@property (nonatomic, strong) MPTimer * timer; -@property (nonatomic, strong) UIWebView * timerView; -@end - -@implementation MPCountdownTimerView - -#pragma mark - Initialization - -- (instancetype)initWithFrame:(CGRect)frame duration:(NSTimeInterval)seconds { - if (self = [super initWithFrame:frame]) { - // Duration should be non-negative. - if (seconds < 0) { - MPLogDebug(@"Attempted to initialize MPCountdownTimerView with a negative duration. No timer will be created."); - return nil; - } - - _completionBlock = nil; - _currentSeconds = seconds; - _isPaused = NO; - _timer = nil; - _timerView = ({ - UIWebView * view = [[UIWebView alloc] initWithFrame:self.bounds]; - view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - view.backgroundColor = [UIColor clearColor]; - view.delegate = self; - view.opaque = NO; - view.userInteractionEnabled = NO; - view; - }); - self.userInteractionEnabled = NO; - - [self addSubview:_timerView]; - [_timerView loadHTMLString:self.timerHtml baseURL:self.timerBaseUrl]; - } - - 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 - Timer - -- (BOOL)isActive { - return (self.timer != nil); -} - -- (void)startWithTimerCompletion:(void(^)(BOOL hasElapsed))completion { - if (self.isActive) { - return; - } - - // Reset any internal state that may be dirty from a previous timer run. - self.isPaused = NO; - - // Copy the completion block and set up the initial state of the timer. - self.completionBlock = completion; - - // Start the timer now. - self.timer = [MPTimer timerWithTimeInterval:kCountdownTimerInterval - target:self - selector:@selector(onTimerUpdate:) - repeats:YES]; - [self.timer scheduleNow]; - - MPLogInfo(@"MPCountdownTimerView started"); -} - -- (void)stopAndSignalCompletion:(BOOL)shouldSignalCompletion { - if (!self.isActive) { - return; - } - - // Invalidate and clear the timer to stop it completely. - [self.timer invalidate]; - self.timer = nil; - - 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.currentSeconds <= 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.isActive) { - return; - } - - self.isPaused = [self.timer pause]; - if (self.isPaused) { - MPLogInfo(@"MPCountdownTimerView paused"); - } -} - -- (void)resume { - if (!self.isActive) { - return; - } - - if ([self.timer resume]) { - self.isPaused = NO; - MPLogInfo(@"MPCountdownTimerView resumed"); - } -} - -#pragma mark - Resources - -- (NSString *)timerHtml { - // Save the contents of the HTML into a static string since it will not change - // across instances. - static NSString * html = nil; - - if (html == nil) { - NSBundle * parentBundle = [NSBundle resourceBundleForClass:self.class]; - NSString * filepath = [parentBundle pathForResource:@"MPCountdownTimer" ofType:@"html"]; - html = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:nil]; - - if (html == nil) { - MPLogError(@"Could not find MPCountdownTimer.html in bundle %@", parentBundle.bundlePath); - } - } - - return html; -} - -- (NSURL *)timerBaseUrl { - // Save the base URL into a static string since it will not change - // across instances. - static NSURL * baseUrl = nil; - - if (baseUrl == nil) { - NSBundle * parentBundle = [NSBundle resourceBundleForClass:self.class]; - baseUrl = [NSURL fileURLWithPath:parentBundle.bundlePath]; - } - - return baseUrl; -} - -#pragma mark - MPTimer - -- (void)onTimerUpdate:(MPTimer *)sender { - // Update the count. - self.currentSeconds -= kCountdownTimerInterval; - - NSString * jsToEvaluate = [NSString stringWithFormat:@"setCounterValue(%f);", self.currentSeconds]; - [self.timerView stringByEvaluatingJavaScriptFromString:jsToEvaluate]; - - // Stop the timer and notify the completion block. - if (self.currentSeconds <= 0) { - [self stopAndSignalCompletion:YES]; - } -} - -#pragma mark - UIWebViewDelegate - -- (void)webViewDidFinishLoad:(UIWebView *)webView { - NSString * jsToEvaluate = [NSString stringWithFormat:@"setMaxCounterValue(%f); setCounterValue(%f);", self.currentSeconds, self.currentSeconds]; - [self.timerView stringByEvaluatingJavaScriptFromString:jsToEvaluate]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPProgressOverlayView.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPProgressOverlayView.h deleted file mode 100644 index 3d3692f5a1..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPProgressOverlayView.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPProgressOverlayView.h -// MoPub -// -// Created by Andrew He on 7/18/12. -// Copyright 2012 MoPub, Inc. All rights reserved. -// - -#import - -@protocol MPProgressOverlayViewDelegate; - -@interface MPProgressOverlayView : UIView { - id __weak _delegate; - UIView *_outerContainer; - UIView *_innerContainer; - UIActivityIndicatorView *_activityIndicator; - UIButton *_closeButton; - CGPoint _closeButtonPortraitCenter; -} - -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) UIButton *closeButton; - -- (id)initWithDelegate:(id)delegate; -- (void)show; -- (void)hide; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPProgressOverlayViewDelegate - -@optional -- (void)overlayCancelButtonPressed; -- (void)overlayDidAppear; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPProgressOverlayView.m b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPProgressOverlayView.m deleted file mode 100644 index 803996c267..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPProgressOverlayView.m +++ /dev/null @@ -1,325 +0,0 @@ -// -// MPProgressOverlayView.m -// MoPub -// -// Created by Andrew He on 7/18/12. -// Copyright 2012 MoPub, Inc. All rights reserved. -// - -#import "MPProgressOverlayView.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import - -static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - -@interface MPProgressOverlayView () - -- (void)updateCloseButtonPosition; -- (void)registerForDeviceOrientationNotifications; -- (void)unregisterForDeviceOrientationNotifications; -- (void)deviceOrientationDidChange:(NSNotification *)notification; -- (void)setTransformForCurrentOrientationAnimated:(BOOL)animated; -- (void)setTransformForAllSubviews:(CGAffineTransform)transform; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#define kProgressOverlaySide 60.0 -#define kProgressOverlayBorderWidth 1.0 -#define kProgressOverlayCornerRadius 8.0 -#define kProgressOverlayShadowOpacity 0.8 -#define kProgressOverlayShadowRadius 8.0 -#define kProgressOverlayCloseButtonDelay 4.0 - -static void exponentialDecayInterpolation(void *info, const CGFloat *input, CGFloat *output); - -@implementation MPProgressOverlayView - -@synthesize delegate = _delegate; -@synthesize closeButton = _closeButton; - -- (id)initWithDelegate:(id)delegate -{ - self = [self initWithFrame:MPKeyWindow().bounds]; - if (self) { - self.delegate = delegate; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - self.alpha = 0.0; - self.opaque = NO; - - // Close button. - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _closeButton.alpha = 0.0; - _closeButton.hidden = YES; - [_closeButton addTarget:self - action:@selector(closeButtonPressed) - forControlEvents:UIControlEventTouchUpInside]; - UIImage *image = [UIImage imageNamed:MPResourcePathForResource(kCloseButtonXImageName)]; - [_closeButton setImage:image forState:UIControlStateNormal]; - [_closeButton sizeToFit]; - - _closeButtonPortraitCenter = - CGPointMake(self.bounds.size.width - 6.0 - CGRectGetMidX(_closeButton.bounds), - 6.0 + CGRectGetMidY(_closeButton.bounds)); - - _closeButton.center = _closeButtonPortraitCenter; - [self addSubview:_closeButton]; - - // Progress indicator container. - CGRect outerFrame = CGRectMake(0, 0, kProgressOverlaySide, kProgressOverlaySide); - _outerContainer = [[UIView alloc] initWithFrame:outerFrame]; - _outerContainer.alpha = 0.6; - _outerContainer.backgroundColor = [UIColor whiteColor]; - _outerContainer.center = self.center; - _outerContainer.frame = CGRectIntegral(_outerContainer.frame); - _outerContainer.opaque = NO; - _outerContainer.layer.cornerRadius = kProgressOverlayCornerRadius; - if ([_outerContainer.layer respondsToSelector:@selector(setShadowColor:)]) { - _outerContainer.layer.shadowColor = [UIColor blackColor].CGColor; - _outerContainer.layer.shadowOffset = CGSizeMake(0.0f, kProgressOverlayShadowRadius - 2.0f); - _outerContainer.layer.shadowOpacity = kProgressOverlayShadowOpacity; - _outerContainer.layer.shadowRadius = kProgressOverlayShadowRadius; - } - [self addSubview:_outerContainer]; - - CGFloat innerSide = kProgressOverlaySide - 2 * kProgressOverlayBorderWidth; - CGRect innerFrame = CGRectMake(0, 0, innerSide, innerSide); - _innerContainer = [[UIView alloc] initWithFrame:innerFrame]; - _innerContainer.backgroundColor = [UIColor blackColor]; - _innerContainer.center = CGPointMake(CGRectGetMidX(_outerContainer.bounds), - CGRectGetMidY(_outerContainer.bounds)); - _innerContainer.frame = CGRectIntegral(_innerContainer.frame); - _innerContainer.layer.cornerRadius = - kProgressOverlayCornerRadius - kProgressOverlayBorderWidth; - _innerContainer.opaque = NO; - [_outerContainer addSubview:_innerContainer]; - - // Progress indicator. - - _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: - UIActivityIndicatorViewStyleWhiteLarge]; - [_activityIndicator sizeToFit]; - [_activityIndicator startAnimating]; - _activityIndicator.center = self.center; - _activityIndicator.frame = CGRectIntegral(_activityIndicator.frame); - [self addSubview:_activityIndicator]; - - [self registerForDeviceOrientationNotifications]; - } - return self; -} - -- (void)dealloc -{ - [self unregisterForDeviceOrientationNotifications]; -} - -#pragma mark - Public Methods - -- (void)show -{ - [MPKeyWindow() addSubview:self]; - - [self setTransformForCurrentOrientationAnimated:NO]; - - if (MP_ANIMATED) { - [UIView animateWithDuration:0.2 animations:^{ - self.alpha = 1.0; - } completion:^(BOOL finished) { - if ([self.delegate respondsToSelector:@selector(overlayDidAppear)]) { - [self.delegate overlayDidAppear]; - } - }]; - } else { - self.alpha = 1.0; - if ([self.delegate respondsToSelector:@selector(overlayDidAppear)]) { - [self.delegate overlayDidAppear]; - } - } - - [self performSelector:@selector(enableCloseButton) - withObject:nil - afterDelay:kProgressOverlayCloseButtonDelay]; -} - -- (void)hide -{ - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(enableCloseButton) object:nil]; - - self.closeButton.hidden = YES; - self.closeButton.alpha = 0.0f; - - if (MP_ANIMATED) { - [UIView animateWithDuration:0.2 animations:^{ - self.alpha = 0.0; - } completion:^(BOOL finished) { - [self removeFromSuperview]; - }]; - } else { - self.alpha = 0.0; - [self removeFromSuperview]; - } -} - -#pragma mark - Drawing and Layout - -- (void)drawRect:(CGRect)rect -{ - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - - static const CGFloat input_value_range[2] = {0, 1}; - static const CGFloat output_value_range[8] = {0, 1, 0, 1, 0, 1, 0, 1}; - CGFunctionCallbacks callbacks = {0, exponentialDecayInterpolation, NULL}; - - CGFunctionRef shadingFunction = CGFunctionCreate((__bridge void *)(self), 1, input_value_range, 4, - output_value_range, &callbacks); - - CGPoint startPoint = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); - CGFloat startRadius = 0.0; - CGPoint endPoint = startPoint; - CGFloat endRadius = MAX(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)) / 2; - - CGShadingRef shading = CGShadingCreateRadial(colorSpace, startPoint, startRadius, endPoint, - endRadius, shadingFunction, - YES, // extend shading beyond starting circle - YES); // extend shading beyond ending circle - CGContextDrawShading(context, shading); - - CGShadingRelease(shading); - CGFunctionRelease(shadingFunction); - CGColorSpaceRelease(colorSpace); -} - -#define kGradientMaximumAlphaValue 0.90 -#define kGradientAlphaDecayFactor 1.1263 - -static void exponentialDecayInterpolation(void *info, const CGFloat *input, CGFloat *output) -{ - // output is an RGBA array corresponding to the color black with an alpha value somewhere on - // our exponential decay curve. - CGFloat progress = *input; - output[0] = 0.0; - output[1] = 0.0; - output[2] = 0.0; - output[3] = kGradientMaximumAlphaValue - exp(-progress / kGradientAlphaDecayFactor); -} - -- (void)layoutSubviews -{ - [self updateCloseButtonPosition]; -} - -- (void)updateCloseButtonPosition -{ - // Ensure that the close button is anchored to the top-right corner of the screen. - - CGPoint originalCenter = _closeButtonPortraitCenter; - CGPoint center = originalCenter; - BOOL statusBarHidden = [UIApplication sharedApplication].statusBarHidden; - CGFloat statusBarOffset = (statusBarHidden) ? 0.0 : 20.0; - - UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; - switch (orientation) { - case UIInterfaceOrientationLandscapeLeft: - center.x = CGRectGetMaxX(self.bounds) - originalCenter.x + statusBarOffset; - center.y = originalCenter.y; - break; - case UIInterfaceOrientationLandscapeRight: - center.x = originalCenter.x - statusBarOffset; - center.y = CGRectGetMaxY(self.bounds) - originalCenter.y; - break; - case UIInterfaceOrientationPortraitUpsideDown: - center.x = CGRectGetMaxX(self.bounds) - originalCenter.x; - center.y = CGRectGetMaxY(self.bounds) - originalCenter.y - statusBarOffset; - break; - default: - center.y = originalCenter.y + statusBarOffset; - break; - } - - _closeButton.center = center; -} - -#pragma mark - Internal - -- (void)registerForDeviceOrientationNotifications -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(deviceOrientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; -} - -- (void)unregisterForDeviceOrientationNotifications -{ - [[NSNotificationCenter defaultCenter] removeObserver:self - name:UIDeviceOrientationDidChangeNotification - object:nil]; -} - -- (void)deviceOrientationDidChange:(NSNotification *)notification -{ - [self setTransformForCurrentOrientationAnimated:YES]; - [self setNeedsLayout]; -} - -- (void)enableCloseButton -{ - _closeButton.hidden = NO; - - [UIView beginAnimations:nil context:nil]; - _closeButton.alpha = 1.0; - [UIView commitAnimations]; -} - -- (void)closeButtonPressed -{ - if ([_delegate respondsToSelector:@selector(overlayCancelButtonPressed)]) { - [_delegate overlayCancelButtonPressed]; - } -} - -- (void)setTransformForCurrentOrientationAnimated:(BOOL)animated -{ - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - float angle = 0; - if (UIInterfaceOrientationIsPortrait(orientation)) { - if (orientation == UIInterfaceOrientationPortraitUpsideDown) { - angle = M_PI; - } - } else { - if (orientation == UIInterfaceOrientationLandscapeLeft) { - angle = -M_PI_2; - } else { - angle = M_PI_2; - } - } - - if (animated) { - [UIView beginAnimations:nil context:nil]; - [self setTransformForAllSubviews:CGAffineTransformMakeRotation(angle)]; - [UIView commitAnimations]; - } else { - [self setTransformForAllSubviews:CGAffineTransformMakeRotation(angle)]; - } -} - -- (void)setTransformForAllSubviews:(CGAffineTransform)transform -{ - for (UIView *view in self.subviews) { - view.transform = transform; - } -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPVideoConfig.h b/iphone/Maps/3party/MoPubSDK/Internal/Common/MPVideoConfig.h deleted file mode 100644 index 7a2e23ef7a..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPVideoConfig.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// MPVideoConfig.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import "MPVASTResponse.h" - -@interface MPVideoConfig : NSObject - -@property (nonatomic, readonly) NSURL *mediaURL; -@property (nonatomic, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, readonly) NSArray *impressionURLs; - -/** @name Tracking Events */ - -@property (nonatomic, readonly) NSArray *creativeViewTrackers; -@property (nonatomic, readonly) NSArray *startTrackers; -@property (nonatomic, readonly) NSArray *firstQuartileTrackers; -@property (nonatomic, readonly) NSArray *midpointTrackers; -@property (nonatomic, readonly) NSArray *thirdQuartileTrackers; -@property (nonatomic, readonly) NSArray *completionTrackers; -@property (nonatomic, readonly) NSArray *muteTrackers; -@property (nonatomic, readonly) NSArray *unmuteTrackers; -@property (nonatomic, readonly) NSArray *pauseTrackers; -@property (nonatomic, readonly) NSArray *rewindTrackers; -@property (nonatomic, readonly) NSArray *resumeTrackers; -@property (nonatomic, readonly) NSArray *fullscreenTrackers; -@property (nonatomic, readonly) NSArray *exitFullscreenTrackers; -@property (nonatomic, readonly) NSArray *expandTrackers; -@property (nonatomic, readonly) NSArray *collapseTrackers; -@property (nonatomic, readonly) NSArray *acceptInvitationLinearTrackers; -@property (nonatomic, readonly) NSArray *closeLinearTrackers; -@property (nonatomic, readonly) NSArray *skipTrackers; -@property (nonatomic, readonly) NSArray *otherProgressTrackers; - -/** @name Viewability */ - -@property (nonatomic, readonly) NSTimeInterval minimumViewabilityTimeInterval; -@property (nonatomic, readonly) double minimumFractionOfVideoVisible; -@property (nonatomic, readonly) NSURL *viewabilityTrackingURL; - -- (instancetype)initWithVASTResponse:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m b/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m deleted file mode 100644 index bc39e41285..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// MPHTMLInterstitialCustomEvent.m -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MPInstanceProvider.h" - -@interface MPHTMLInterstitialCustomEvent () - -@property (nonatomic, strong) MPHTMLInterstitialViewController *interstitial; -@property (nonatomic, assign) BOOL trackedImpression; - -@end - -@implementation MPHTMLInterstitialCustomEvent - -@synthesize interstitial = _interstitial; - -- (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 -{ - MPLogInfo(@"Loading MoPub HTML interstitial"); - MPAdConfiguration *configuration = [self.delegate configuration]; - MPLogTrace(@"Loading HTML interstitial with source: %@", [configuration adResponseHTMLString]); - - self.interstitial = [[MPInstanceProvider sharedProvider] buildMPHTMLInterstitialViewControllerWithDelegate:self - orientationType:configuration.orientationType]; - [self.interstitial loadConfiguration:configuration]; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController -{ - [self.interstitial presentInterstitialFromViewController:rootViewController]; -} - -#pragma mark - MPInterstitialViewControllerDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did load"); - [self.delegate interstitialCustomEvent:self didLoadAd:self.interstitial]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did fail"); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial will appear"); - [self.delegate interstitialCustomEventWillAppear:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did appear"); - [self.delegate interstitialCustomEventDidAppear:self]; - - if (!self.trackedImpression) { - self.trackedImpression = YES; - [self.delegate trackImpression]; - } -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial will disappear"); - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did disappear"); - [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:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did receive tap event"); - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial will leave application"); - [self.delegate interstitialCustomEventWillLeaveApplication:self]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPWebView.m b/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPWebView.m deleted file mode 100644 index 7ed89ecc96..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPWebView.m +++ /dev/null @@ -1,642 +0,0 @@ -// -// MPWebView.m -// MoPubSDK -// -// Copyright © 2016 MoPub. All rights reserved. -// - -#import "MPWebView.h" - -#import - -static BOOL const kMoPubAllowsInlineMediaPlaybackDefault = YES; -static BOOL const kMoPubRequiresUserActionForMediaPlaybackDefault = NO; - -// Set defaults for this as its default differs between UIWebView and WKWebView -static BOOL const kMoPubAllowsLinkPreviewDefault = NO; - -static NSString *const kMoPubJavaScriptDisableDialogScript = @"window.alert = function() { }; window.prompt = function() { }; window.confirm = function() { };"; - -static NSString *const kMoPubFrameKeyPathString = @"frame"; - -static BOOL gForceWKWebView = NO; - -@interface MPWebView () - -@property (weak, nonatomic) WKWebView *wkWebView; -@property (weak, nonatomic) UIWebView *uiWebView; - -@property (strong, nonatomic) NSArray *wkWebViewLayoutConstraints; - -@property (nonatomic, assign) BOOL hasMovedToWindow; - -@end - -@implementation MPWebView - -- (instancetype)init { - if (self = [super init]) { - [self setUpStepsForceUIWebView:NO]; - } - - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]) { - [self setUpStepsForceUIWebView:NO]; - } - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - [self setUpStepsForceUIWebView:NO]; - } - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame forceUIWebView:(BOOL)forceUIWebView { - if (self = [super initWithFrame:frame]) { - [self setUpStepsForceUIWebView:forceUIWebView]; - } - - return self; -} - -- (void)setUpStepsForceUIWebView:(BOOL)forceUIWebView { - // set up web view - UIView *webView; - - if ((gForceWKWebView || !forceUIWebView) && [WKWebView class]) { - WKUserContentController *contentController = [[WKUserContentController alloc] init]; - WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; - config.allowsInlineMediaPlayback = kMoPubAllowsInlineMediaPlaybackDefault; - if (@available(iOS 9.0, *)) { - config.requiresUserActionForMediaPlayback = kMoPubRequiresUserActionForMediaPlaybackDefault; - } else { - config.mediaPlaybackRequiresUserAction = kMoPubRequiresUserActionForMediaPlaybackDefault; - } - config.userContentController = contentController; - - WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:self.bounds configuration:config]; - - wkWebView.UIDelegate = self; - wkWebView.navigationDelegate = self; - - webView = wkWebView; - - self.wkWebView = wkWebView; - - // Put WKWebView onto the offscreen view so any loading will complete correctly; see comment below. - [self retainWKWebViewOffscreen:wkWebView]; - } else { - UIWebView *uiWebView = [[UIWebView alloc] initWithFrame:self.bounds]; - - uiWebView.allowsInlineMediaPlayback = kMoPubAllowsInlineMediaPlaybackDefault; - uiWebView.mediaPlaybackRequiresUserAction = kMoPubRequiresUserActionForMediaPlaybackDefault; - - uiWebView.delegate = self; - - webView = uiWebView; - - self.uiWebView = uiWebView; - - [self addSubview:webView]; - } - - webView.backgroundColor = [UIColor clearColor]; - webView.opaque = NO; - - webView.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 WKWebView and UIWebView - 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 constrainWebViewShouldUseSafeArea: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.0, *)) { - // 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 constrainWebViewShouldUseSafeArea:shouldConformToSafeArea]; - } -} - -- (void)constrainWebViewShouldUseSafeArea:(BOOL)shouldUseSafeArea { - if (@available(iOS 11.0, *)) { - self.wkWebView.translatesAutoresizingMaskIntoConstraints = NO; - - if (self.wkWebViewLayoutConstraints) { - [NSLayoutConstraint deactivateConstraints:self.wkWebViewLayoutConstraints]; - } - - if (shouldUseSafeArea) { - self.wkWebViewLayoutConstraints = @[ - [self.wkWebView.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor], - [self.wkWebView.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor], - [self.wkWebView.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor], - [self.wkWebView.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor], - ]; - } else { - self.wkWebViewLayoutConstraints = @[ - [self.wkWebView.topAnchor constraintEqualToAnchor:self.topAnchor], - [self.wkWebView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [self.wkWebView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - [self.wkWebView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - ]; - } - - [NSLayoutConstraint activateConstraints:self.wkWebViewLayoutConstraints]; - } -} - -- (BOOL)isLoading { - return self.uiWebView ? self.uiWebView.isLoading : self.wkWebView.isLoading; -} - -- (void)loadData:(NSData *)data - MIMEType:(NSString *)MIMEType -textEncodingName:(NSString *)encodingName - baseURL:(NSURL *)baseURL { - if (self.uiWebView) { - [self.uiWebView loadData:data - MIMEType:MIMEType - textEncodingName:encodingName - baseURL:baseURL]; - } else if (@available(iOS 9.0, *)) { - [self.wkWebView loadData:data - MIMEType:MIMEType - characterEncodingName:encodingName - baseURL:baseURL]; - } -} - -+ (void)forceWKWebView:(BOOL)shouldForce -{ - gForceWKWebView = shouldForce; -} - -+ (BOOL)isForceWKWebView -{ - return gForceWKWebView; -} - -- (void)loadHTMLString:(NSString *)string - baseURL:(NSURL *)baseURL { - if (self.uiWebView) { - [self.uiWebView loadHTMLString:string - baseURL:baseURL]; - } else { - [self.wkWebView loadHTMLString:string - baseURL:baseURL]; - } -} - -- (void)loadRequest:(NSURLRequest *)request { - if (self.uiWebView) { - [self.uiWebView loadRequest:request]; - } else { - [self.wkWebView loadRequest:request]; - } -} - -- (void)stopLoading { - if (self.uiWebView) { - [self.uiWebView stopLoading]; - } else { - [self.wkWebView stopLoading]; - } -} - -- (void)reload { - if (self.uiWebView) { - [self.uiWebView reload]; - } else { - [self.wkWebView reload]; - } -} - -- (BOOL)canGoBack { - return self.uiWebView ? self.uiWebView.canGoBack : self.wkWebView.canGoBack; -} - -- (BOOL)canGoForward { - return self.uiWebView ? self.uiWebView.canGoForward : self.wkWebView.canGoForward; -} - -- (void)goBack { - if (self.uiWebView) { - [self.uiWebView goBack]; - } else { - [self.wkWebView goBack]; - } -} - -- (void)goForward { - if (self.uiWebView) { - [self.uiWebView goForward]; - } else { - [self.wkWebView goForward]; - } -} - -- (void)setAllowsLinkPreview:(BOOL)allowsLinkPreview { - if (@available(iOS 9.0, *)) { - if (self.uiWebView) { - self.uiWebView.allowsLinkPreview = allowsLinkPreview; - } else { - self.wkWebView.allowsLinkPreview = allowsLinkPreview; - } - } -} - -- (BOOL)allowsLinkPreview { - if (@available(iOS 9.0, *)) { - if (self.uiWebView) { - return self.uiWebView.allowsLinkPreview; - } else { - return self.wkWebView.allowsLinkPreview; - } - } - - return NO; -} - -- (void)setScalesPageToFit:(BOOL)scalesPageToFit { - if (self.uiWebView) { - self.uiWebView.scalesPageToFit = scalesPageToFit; - } else { - 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.uiWebView ? self.uiWebView.scalesPageToFit : self.scrollView.delegate == nil; -} - -- (UIScrollView *)scrollView { - return self.uiWebView ? self.uiWebView.scrollView : self.wkWebView.scrollView; -} - -- (void)evaluateJavaScript:(NSString *)javaScriptString - completionHandler:(MPWebViewJavascriptEvaluationCompletionHandler)completionHandler { - if (self.uiWebView) { - NSString *resultString = [self.uiWebView stringByEvaluatingJavaScriptFromString:javaScriptString]; - - if (completionHandler) { - completionHandler(resultString, nil); - } - } else { - [self.wkWebView evaluateJavaScript:javaScriptString - completionHandler:completionHandler]; - } -} - -- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString { - if (self.uiWebView) { - return [self.uiWebView stringByEvaluatingJavaScriptFromString:javaScriptString]; - } else { - // 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.uiWebView ? self.uiWebView.allowsInlineMediaPlayback : self.wkWebView.configuration.allowsInlineMediaPlayback; -} - -- (BOOL)mediaPlaybackRequiresUserAction { - if (self.uiWebView) { - return self.uiWebView.mediaPlaybackRequiresUserAction; - } else { - if (@available(iOS 9.0, *)) { - return self.wkWebView.configuration.requiresUserActionForMediaPlayback; - } else if (![self.wkWebView.configuration respondsToSelector:@selector(requiresUserActionForMediaPlayback)]) { - return self.wkWebView.configuration.mediaPlaybackRequiresUserAction; - } else { - return NO; - } - } -} - -- (BOOL)mediaPlaybackAllowsAirPlay { - if (self.uiWebView) { - return self.uiWebView.mediaPlaybackAllowsAirPlay; - } else { - if (@available(iOS 9.0, *)) { - return self.wkWebView.configuration.allowsAirPlayForMediaPlayback; - } else if (![self.wkWebView.configuration respondsToSelector:@selector(allowsAirPlayForMediaPlayback)]) { - return self.wkWebView.configuration.mediaPlaybackAllowsAirPlay; - } else { - return NO; - } - } -} - -- (BOOL)allowsPictureInPictureMediaPlayback { - if (@available(iOS 9.0, *)) { - if (self.uiWebView) { - return self.uiWebView.allowsPictureInPictureMediaPlayback; - } else { - return self.wkWebView.configuration.allowsPictureInPictureMediaPlayback; - } - } - - return NO; -} - -#pragma mark - UIWebViewDelegate - -- (BOOL)webView:(UIWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType { - if ([self.delegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) { - return [self.delegate webView:self - shouldStartLoadWithRequest:request - navigationType:navigationType]; - } - - return YES; -} - -- (void)webViewDidStartLoad:(UIWebView *)webView { - if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { - [self.delegate webViewDidStartLoad:self]; - } -} - -- (void)webViewDidFinishLoad:(UIWebView *)webView { - if ([self.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { - [self.delegate webViewDidFinishLoad:self]; - } -} - -- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - [self.delegate webView:self didFailLoadWithError:error]; - } -} - -#pragma mark - UIWebView+MPAdditions methods - -/// 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; -} - -/// Redefine alert, prompt, and confirm to do nothing -- (void)disableJavaScriptDialogs -{ - if (self.uiWebView) { // Only redefine on UIWebView, as the WKNavigationDelegate for WKWebView takes care of this. - [self stringByEvaluatingJavaScriptFromString:kMoPubJavaScriptDisableDialogScript]; - } -} - -#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:)]) { - NSURLRequest *request = navigationAction.request; - UIWebViewNavigationType navType; - switch (navigationAction.navigationType) { - case WKNavigationTypeLinkActivated: - navType = UIWebViewNavigationTypeLinkClicked; - break; - case WKNavigationTypeFormSubmitted: - navType = UIWebViewNavigationTypeFormSubmitted; - break; - case WKNavigationTypeBackForward: - navType = UIWebViewNavigationTypeBackForward; - break; - case WKNavigationTypeReload: - navType = UIWebViewNavigationTypeReload; - break; - case WKNavigationTypeFormResubmitted: - navType = UIWebViewNavigationTypeFormResubmitted; - break; - default: - navType = UIWebViewNavigationTypeOther; - break; - } - - policy = [self.delegate webView:self - shouldStartLoadWithRequest:request - navigationType:navType] ? 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 -#if __IPHONE_OS_VERSION_MAX_ALLOWED < MP_IOS_9_0 // This pre-processor code is to be sure we can compile under both iOS 8 and 9 SDKs -completionHandler:(void (^)())completionHandler { -#else -completionHandler:(void (^)(void))completionHandler { -#endif - 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/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m b/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m deleted file mode 100644 index 67c021f438..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m +++ /dev/null @@ -1,233 +0,0 @@ -// -// MPInterstitialAdManager.m -// MoPub -// -// Copyright (c) 2012 MoPub, Inc. All rights reserved. -// - -#import - -#import "MPInterstitialAdManager.h" - -#import "MPAdServerURLBuilder.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialCustomEventAdapter.h" -#import "MPInstanceProvider.h" -#import "MPCoreInstanceProvider.h" -#import "MPInterstitialAdManagerDelegate.h" -#import "MPLogging.h" -#import "MPError.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 *configuration; - -- (void)setUpAdapterWithConfiguration:(MPAdConfiguration *)configuration; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPInterstitialAdManager - -@synthesize loading = _loading; -@synthesize ready = _ready; -@synthesize delegate = _delegate; -@synthesize communicator = _communicator; -@synthesize adapter = _adapter; -@synthesize configuration = _configuration; - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - self.delegate = delegate; - } - 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) { - MPLogWarn(@"Interstitial controller is already loading an ad. " - @"Wait for previous load to finish."); - return; - } - - MPLogInfo(@"Interstitial controller is loading ad with MoPub server URL: %@", URL); - - self.loading = YES; - [self.communicator loadURL:URL]; -} - - -- (void)loadInterstitialWithAdUnitID:(NSString *)ID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location -{ - if (self.ready) { - [self.delegate managerDidLoadInterstitial:self]; - } else { - [self loadAdWithURL:[MPAdServerURLBuilder URLWithAdUnitID:ID - keywords:keywords - userDataKeywords:userDataKeywords - location:location]]; - } -} - -- (void)presentInterstitialFromViewController:(UIViewController *)controller -{ - // Don't allow the ad to be shown if it isn't ready. - if (!self.ready) { - // We don't want to remotely log this event -- it's simply for publisher troubleshooting -- so use NSLog - // rather than MPLog. - NSLog(@"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.configuration = configurations.firstObject; - - MPLogInfo(@"Interstitial ad view is fetching ad network type: %@", self.configuration.networkType); - - if (self.configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorAdUnitWarmingUp]]; - return; - } - - if ([self.configuration.networkType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - if (self.configuration.adType != MPAdTypeInterstitial) { - MPLogWarn(@"Could not load ad: interstitial object received a non-interstitial ad unit ID."); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorAdapterInvalid]]; - return; - } - - [self setUpAdapterWithConfiguration:self.configuration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - self.ready = NO; - self.loading = NO; - - [self.delegate manager:self didFailToLoadInterstitialWithError:error]; -} - -- (void)setUpAdapterWithConfiguration:(MPAdConfiguration *)configuration; -{ - MPBaseInterstitialAdapter *adapter = [[MPInstanceProvider sharedProvider] buildInterstitialAdapterForConfiguration:configuration - delegate:self]; - if (!adapter) { - [self adapter:nil didFailToLoadAdWithError:nil]; - return; - } - - self.adapter = adapter; - [self.adapter _getAdWithConfiguration:configuration]; -} - -#pragma mark - MPInterstitialAdapterDelegate - -- (void)adapterDidFinishLoadingAd:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = YES; - self.loading = NO; - [self.delegate managerDidLoadInterstitial:self]; -} - -- (void)adapter:(MPBaseInterstitialAdapter *)adapter didFailToLoadAdWithError:(NSError *)error -{ - self.ready = NO; - self.loading = NO; - [self loadAdWithURL:self.configuration.failoverURL]; -} - -- (void)interstitialWillAppearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerWillPresentInterstitial:self]; -} - -- (void)interstitialDidAppearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerDidPresentInterstitial:self]; -} - -- (void)interstitialWillDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerWillDismissInterstitial:self]; -} - -- (void)interstitialDidDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = NO; - [self.delegate managerDidDismissInterstitial:self]; -} - -- (void)interstitialDidExpireForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = NO; - [self.delegate managerDidExpireInterstitial:self]; -} - -- (void)interstitialDidReceiveTapEventForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerDidReceiveTapEventFromInterstitial:self]; -} - -- (void)interstitialWillLeaveApplicationForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - //noop -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h b/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h deleted file mode 100644 index c91e3b1ef2..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// MPInterstitialViewController.h -// MoPub -// -// Copyright (c) 2012 MoPub, Inc. All rights reserved. -// - -#import -#import "MPGlobal.h" - -@class CLLocation; - -@protocol MPInterstitialViewControllerDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPInterstitialViewController : UIViewController - -@property (nonatomic, assign) MPInterstitialCloseButtonStyle closeButtonStyle; -@property (nonatomic, assign) MPInterstitialOrientationType orientationType; -@property (nonatomic, strong) UIButton *closeButton; -@property (nonatomic, weak) id delegate; - -- (void)presentInterstitialFromViewController:(UIViewController *)controller; -- (void)dismissInterstitialAnimated:(BOOL)animated; -- (BOOL)shouldDisplayCloseButton; -- (void)willPresentInterstitial; -- (void)didPresentInterstitial; -- (void)willDismissInterstitial; -- (void)didDismissInterstitial; -- (void)layoutCloseButton; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPInterstitialViewControllerDelegate - -- (NSString *)adUnitId; -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial; -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial; -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidReceiveTapEvent:(MPInterstitialViewController *)interstitial; -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial; - -@optional -- (CLLocation *)location; -- (void)interstitialRewardedVideoEnded; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPAdvancedBiddingManager.h b/iphone/Maps/3party/MoPubSDK/Internal/MPAdvancedBiddingManager.h deleted file mode 100644 index 6117d0f5eb..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPAdvancedBiddingManager.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPAdvancedBiddingManager.h -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import -#import "MPAdvancedBidder.h" - -/** - * Internally manages all aspects related to advanced bidding. - */ -@interface MPAdvancedBiddingManager : NSObject -/** - * A boolean value indicating whether advanced bidding is enabled. This boolean defaults to `YES`. - * To disable advanced bidding, set this value to `NO`. - */ -@property (nonatomic, assign) BOOL advancedBiddingEnabled; - -/** - * A UTF-8 JSON string representation of the Advanced Bidding tokens. - * @remark If `advancedBiddingEnabled` is set to `NO`, this will always return `nil`. - */ -@property (nonatomic, copy, readonly) NSString * _Nullable bidderTokensJson; - -/** - * Singleton instance of the manager. - */ -+ (MPAdvancedBiddingManager * _Nonnull)sharedManager; - -/** - Initializes each Advanced Bidder and retains a reference. If an Advanced Bidder is - already initialized, nothing will be done. - @param bidders Array of bidders - @param complete Completion block - */ -- (void)initializeBidders:(NSArray> * _Nonnull)bidders complete:(void(^_Nullable)(void))complete; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPAdvancedBiddingManager.m b/iphone/Maps/3party/MoPubSDK/Internal/MPAdvancedBiddingManager.m deleted file mode 100644 index 5de6a512a8..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPAdvancedBiddingManager.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// MPAdvancedBiddingManager.m -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import -#import "MPAdvancedBiddingManager.h" -#import "MPLogging.h" - -// JSON constants -static NSString const * kTokenKey = @"token"; - -@interface MPAdvancedBiddingManager() - -// Dictionary of Advanced Bidding network name to instance of that Advanced Bidder. -@property (nonatomic, strong) NSMutableDictionary> * bidders; - -// Advanced Bidder initialization queue. -@property (nonatomic, strong) dispatch_queue_t queue; - -@end - -@implementation MPAdvancedBiddingManager - -#pragma mark - Initialization - -+ (MPAdvancedBiddingManager *)sharedManager { - static MPAdvancedBiddingManager * sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] init]; - }); - return sharedMyManager; -} - -- (instancetype)init { - if (self = [super init]) { - _advancedBiddingEnabled = YES; - _bidders = [NSMutableDictionary dictionary]; - _queue = dispatch_queue_create("Advanced Bidder Initialization Queue", NULL); - } - - return self; -} - -#pragma mark - Bidders - -- (NSString *)bidderTokensJson { - // No bidders. - if (self.bidders.count == 0) { - return nil; - } - - // Advanced Bidding is not enabled. - if (!self.advancedBiddingEnabled) { - return nil; - } - - // Generate the JSON dictionary for all participating bidders. - NSMutableDictionary * tokens = [NSMutableDictionary dictionary]; - [self.bidders enumerateKeysAndObjectsUsingBlock:^(NSString * network, id bidder, BOOL * stop) { - tokens[network] = @{ kTokenKey: bidder.token }; - }]; - - // Serialize the JSON dictionary into a JSON string. - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:tokens options:0 error:&error]; - if (jsonData == nil) { - MPLogError(@"Failed to generate a JSON string from\n%@\nReason: %@", tokens, error.localizedDescription); - return nil; - } - - return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; -} - -- (void)initializeBidders:(NSArray> * _Nonnull)bidders complete:(void(^_Nullable)(void))complete { - // No bidders to initialize, complete immediately - if (bidders.count == 0) { - if (complete) { - complete(); - } - return; - } - - // Asynchronous dispatch the initialization as it may take some time. - __weak __typeof__(self) weakSelf = self; - dispatch_async(self.queue, ^{ - __typeof__(self) strongSelf = weakSelf; - if (strongSelf != nil) { - for (Class advancedBidderClass in bidders) { - // Create an instance of the Advanced Bidder - id advancedBidder = (id)[[[advancedBidderClass class] alloc] init]; - NSString * network = advancedBidder.creativeNetworkName; - - // Verify that the Advanced Bidder has a creative network name and that it's - // not already created. - if (network != nil && strongSelf.bidders[network] == nil) { - strongSelf.bidders[network] = advancedBidder; - } - } - } - - // Notify completion block handler. - if (complete) { - complete(); - } - }); // End dispatch_async -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentAdServerKeys.h b/iphone/Maps/3party/MoPubSDK/Internal/MPConsentAdServerKeys.h deleted file mode 100644 index 831185bded..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentAdServerKeys.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPConsentAdServerKeys.h -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -#import - -#pragma mark - Synchronization Endpoint: Request Keys - -extern NSString * const kIdfaKey; -extern NSString * const kAdUnitIdKey; -extern NSString * const kBundleKey; -extern NSString * const kDoNotTrackIdKey; -extern NSString * const kLastChangedMsKey; -extern NSString * const kLastSynchronizedConsentStatusKey; -extern NSString * const kCurrentConsentStatusKey; -extern NSString * const kConsentedVendorListVersionKey; -extern NSString * const kConsentedPrivacyPolicyVersionKey; -extern NSString * const kCachedIabVendorListHashKey; -extern NSString * const kGDPRAppliesKey; - -#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; -extern NSString * const kSDKVersionKey; - -#pragma mark - Consent Dialog Endpoint: Response Keys - -extern NSString * const kDialogHTMLKey; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentAdServerKeys.m b/iphone/Maps/3party/MoPubSDK/Internal/MPConsentAdServerKeys.m deleted file mode 100644 index ef8caeae18..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentAdServerKeys.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPConsentAdServerKeys.m -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -#import "MPConsentAdServerKeys.h" - -#pragma mark - Synchronization Endpoint: Request Keys - -NSString * const kIdfaKey = @"udid"; -NSString * const kAdUnitIdKey = @"id"; -NSString * const kBundleKey = @"bundle"; -NSString * const kDoNotTrackIdKey = @"dnt"; -NSString * const kLastChangedMsKey = @"last_changed_ms"; -NSString * const kLastSynchronizedConsentStatusKey = @"last_consent_status"; -NSString * const kCurrentConsentStatusKey = @"current_consent_status"; -NSString * const kConsentedVendorListVersionKey = @"consented_vendor_list_version"; -NSString * const kConsentedPrivacyPolicyVersionKey = @"consented_privacy_policy_version"; -NSString * const kCachedIabVendorListHashKey = @"cached_vendor_list_iab_hash"; -NSString * const kGDPRAppliesKey = @"gdpr_applies"; - -#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"; -NSString * const kSDKVersionKey = @"nv"; - -#pragma mark - Consent Dialog Endpoint: Response Keys - -NSString * const kDialogHTMLKey = @"dialog_html"; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPInstanceProvider.h b/iphone/Maps/3party/MoPubSDK/Internal/MPInstanceProvider.h deleted file mode 100644 index 2ba600e0fb..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPInstanceProvider.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// MPInstanceProvider.h -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MPGlobal.h" -#import "MPCoreInstanceProvider.h" - -// MPWebView -@class MPWebView; -@protocol MPWebViewDelegate; - -// Banners -@class MPBannerAdManager; -@protocol MPBannerAdManagerDelegate; -@class MPBaseBannerAdapter; -@protocol MPBannerAdapterDelegate; -@class MPBannerCustomEvent; -@protocol MPBannerCustomEventDelegate; - -// Interstitials -@class MPInterstitialAdManager; -@protocol MPInterstitialAdManagerDelegate; -@class MPBaseInterstitialAdapter; -@protocol MPInterstitialAdapterDelegate; -@class MPInterstitialCustomEvent; -@protocol MPInterstitialCustomEventDelegate; -@class MPHTMLInterstitialViewController; -@class MPMRAIDInterstitialViewController; -@protocol MPInterstitialViewControllerDelegate; - -// Rewarded Video -@class MPRewardedVideoAdManager; -@class MPRewardedVideoAdapter; -@class MPRewardedVideoCustomEvent; -@protocol MPRewardedVideoAdapterDelegate; -@protocol MPRewardedVideoCustomEventDelegate; -@protocol MPRewardedVideoAdManagerDelegate; - -// HTML Ads -@class MPAdWebViewAgent; -@protocol MPAdWebViewAgentDelegate; - -// MRAID -@class MRController; -@protocol MRControllerDelegate; -@class MPClosableView; -@class MRBridge; -@protocol MRBridgeDelegate; -@protocol MPClosableViewDelegate; -@class MRBundleManager; -@class MRVideoPlayerManager; -@protocol MRVideoPlayerManagerDelegate; -@class MPMoviePlayerViewController; -@class MRNativeCommandHandler; -@protocol MRNativeCommandHandlerDelegate; - -//Native -@protocol MPNativeCustomEventDelegate; -@class MPNativeCustomEvent; -@class MPNativeAdSource; -@protocol MPNativeAdSourceDelegate; -@class MPNativePositionSource; -@class MPStreamAdPlacementData; -@class MPStreamAdPlacer; -@class MPAdPositioning; -@protocol MPNativeAdRenderer; - -@interface MPInstanceProvider : NSObject - -+(instancetype)sharedProvider; -- (id)singletonForClass:(Class)klass provider:(MPSingletonProviderBlock)provider; -- (id)singletonForClass:(Class)klass provider:(MPSingletonProviderBlock)provider context:(id)context; - -#pragma mark - Interstitials -- (MPInterstitialAdManager *)buildMPInterstitialAdManagerWithDelegate:(id)delegate; -- (MPBaseInterstitialAdapter *)buildInterstitialAdapterForConfiguration:(MPAdConfiguration *)configuration - delegate:(id)delegate; -- (MPInterstitialCustomEvent *)buildInterstitialCustomEventFromCustomClass:(Class)customClass - delegate:(id)delegate; -- (MPHTMLInterstitialViewController *)buildMPHTMLInterstitialViewControllerWithDelegate:(id)delegate - orientationType:(MPInterstitialOrientationType)type; -- (MPMRAIDInterstitialViewController *)buildMPMRAIDInterstitialViewControllerWithDelegate:(id)delegate - configuration:(MPAdConfiguration *)configuration; - -#pragma mark - Rewarded Video -- (MPRewardedVideoAdManager *)buildRewardedVideoAdManagerWithAdUnitID:(NSString *)adUnitID delegate:(id)delegate; -- (MPRewardedVideoAdapter *)buildRewardedVideoAdapterWithDelegate:(id)delegate; -- (MPRewardedVideoCustomEvent *)buildRewardedVideoCustomEventFromCustomClass:(Class)customClass delegate:(id)delegate; - - -#pragma mark - HTML Ads -- (MPAdWebViewAgent *)buildMPAdWebViewAgentWithAdWebViewFrame:(CGRect)frame - delegate:(id)delegate; - -#pragma mark - MRAID -- (MPClosableView *)buildMRAIDMPClosableViewWithFrame:(CGRect)frame webView:(MPWebView *)webView delegate:(id)delegate; -- (MRBundleManager *)buildMRBundleManager; -- (MRController *)buildBannerMRControllerWithFrame:(CGRect)frame delegate:(id)delegate; -- (MRController *)buildInterstitialMRControllerWithFrame:(CGRect)frame delegate:(id)delegate; -- (MRBridge *)buildMRBridgeWithWebView:(MPWebView *)webView delegate:(id)delegate; -- (MRVideoPlayerManager *)buildMRVideoPlayerManagerWithDelegate:(id)delegate; -- (MPMoviePlayerViewController *)buildMPMoviePlayerViewControllerWithURL:(NSURL *)URL; -- (MRNativeCommandHandler *)buildMRNativeCommandHandlerWithDelegate:(id)delegate; - -#pragma mark - Native - -- (MPNativeCustomEvent *)buildNativeCustomEventFromCustomClass:(Class)customClass - delegate:(id)delegate; -- (MPNativeAdSource *)buildNativeAdSourceWithDelegate:(id)delegate; -- (MPNativePositionSource *)buildNativePositioningSource; -- (MPStreamAdPlacementData *)buildStreamAdPlacementDataWithPositioning:(MPAdPositioning *)positioning; -- (MPStreamAdPlacer *)buildStreamAdPlacerWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPInstanceProvider.m b/iphone/Maps/3party/MoPubSDK/Internal/MPInstanceProvider.m deleted file mode 100644 index cea9c5aec1..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPInstanceProvider.m +++ /dev/null @@ -1,294 +0,0 @@ -// -// MPInstanceProvider.m -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MPInstanceProvider.h" -#import "MPWebView.h" -#import "MPAdWebViewAgent.h" -#import "MPInterstitialAdManager.h" -#import "MPInterstitialCustomEventAdapter.h" -#import "MPHTMLInterstitialViewController.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPInterstitialCustomEvent.h" -#import "MPBaseBannerAdapter.h" -#import "MPBannerCustomEventAdapter.h" -#import "MPBannerCustomEvent.h" -#import "MPBannerAdManager.h" -#import "MPLogging.h" -#import "MRBundleManager.h" -#import "MRVideoPlayerManager.h" -#import -#import "MRNativeCommandHandler.h" -#import "MRBridge.h" -#import "MRController.h" -#import "MPClosableView.h" -#import "MPRewardedVideoAdManager.h" -#import "MPRewardedVideoAdapter.h" -#import "MPRewardedVideoCustomEvent.h" - -#if MP_HAS_NATIVE_PACKAGE -#import "MPNativeCustomEvent.h" -#import "MPNativeAdSource.h" -#import "MPNativePositionSource.h" -#import "MPStreamAdPlacementData.h" -#import "MPStreamAdPlacer.h" -#endif - -@interface MPInstanceProvider () - -// A nested dictionary. The top-level dictionary maps Class objects to second-level dictionaries. -// The second level dictionaries map identifiers to singleton objects. -// -// An example: -// { -// SomeClass: -// { -// @"default": -// @"other_context": -// } -// } -// -@property (nonatomic, strong) NSMutableDictionary *singletons; - -@end - - -@implementation MPInstanceProvider - -static MPInstanceProvider *sharedAdProvider = nil; - -+ (instancetype)sharedProvider -{ - static dispatch_once_t once; - dispatch_once(&once, ^{ - sharedAdProvider = [[self alloc] init]; - }); - - return sharedAdProvider; -} - -- (id)init -{ - self = [super init]; - if (self) { - self.singletons = [NSMutableDictionary dictionary]; - } - return self; -} - -- (id)singletonForClass:(Class)klass provider:(MPSingletonProviderBlock)provider -{ - return [self singletonForClass:klass provider:provider context:@"default"]; -} - -- (id)singletonForClass:(Class)klass provider:(MPSingletonProviderBlock)provider context:(id)context -{ - id singleton = [[self.singletons objectForKey:klass] objectForKey:context]; - if (!singleton) { - singleton = provider(); - NSMutableDictionary *singletonsForClass = [self.singletons objectForKey:klass]; - if (!singletonsForClass) { - NSMutableDictionary *singletonsForContext = [NSMutableDictionary dictionaryWithObjectsAndKeys:singleton, context, nil]; - [self.singletons setObject:singletonsForContext forKey:(id)klass]; - } else { - [singletonsForClass setObject:singleton forKey:context]; - } - } - return singleton; -} - -#pragma mark - Interstitials - -- (MPInterstitialAdManager *)buildMPInterstitialAdManagerWithDelegate:(id)delegate -{ - return [(MPInterstitialAdManager *)[MPInterstitialAdManager alloc] initWithDelegate:delegate]; -} - - -- (MPBaseInterstitialAdapter *)buildInterstitialAdapterForConfiguration:(MPAdConfiguration *)configuration - delegate:(id)delegate -{ - if (configuration.customEventClass) { - return [(MPInterstitialCustomEventAdapter *)[MPInterstitialCustomEventAdapter alloc] initWithDelegate:delegate]; - } - - return nil; -} - -- (MPInterstitialCustomEvent *)buildInterstitialCustomEventFromCustomClass:(Class)customClass - delegate:(id)delegate -{ - MPInterstitialCustomEvent *customEvent = [[customClass alloc] init]; - if (![customEvent isKindOfClass:[MPInterstitialCustomEvent class]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPInterstitialCustomEvent ****", NSStringFromClass(customClass)); - return nil; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - if ([customEvent respondsToSelector:@selector(customEventDidUnload)]) { - MPLogWarn(@"**** Custom Event Class: %@ implements the deprecated -customEventDidUnload method. This is no longer called. Use -dealloc for cleanup instead ****", NSStringFromClass(customClass)); - } -#pragma clang diagnostic pop - customEvent.delegate = delegate; - return customEvent; -} - -- (MPHTMLInterstitialViewController *)buildMPHTMLInterstitialViewControllerWithDelegate:(id)delegate - orientationType:(MPInterstitialOrientationType)type -{ - MPHTMLInterstitialViewController *controller = [[MPHTMLInterstitialViewController alloc] init]; - controller.delegate = delegate; - controller.orientationType = type; - return controller; -} - -- (MPMRAIDInterstitialViewController *)buildMPMRAIDInterstitialViewControllerWithDelegate:(id)delegate - configuration:(MPAdConfiguration *)configuration -{ - MPMRAIDInterstitialViewController *controller = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:configuration]; - controller.delegate = delegate; - return controller; -} - -#pragma mark - Rewarded Video - -- (MPRewardedVideoAdManager *)buildRewardedVideoAdManagerWithAdUnitID:(NSString *)adUnitID delegate:(id)delegate -{ - return [[MPRewardedVideoAdManager alloc] initWithAdUnitID:adUnitID delegate:delegate]; -} - -- (MPRewardedVideoAdapter *)buildRewardedVideoAdapterWithDelegate:(id)delegate -{ - return [[MPRewardedVideoAdapter alloc] initWithDelegate:delegate]; -} - -- (MPRewardedVideoCustomEvent *)buildRewardedVideoCustomEventFromCustomClass:(Class)customClass delegate:(id)delegate -{ - MPRewardedVideoCustomEvent *customEvent = [[customClass alloc] init]; - - if (![customEvent isKindOfClass:[MPRewardedVideoCustomEvent class]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPRewardedVideoCustomEvent ****", NSStringFromClass(customClass)); - return nil; - } - - customEvent.delegate = delegate; - return customEvent; -} - -#pragma mark - HTML Ads - -- (MPAdWebViewAgent *)buildMPAdWebViewAgentWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate -{ - return [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:frame delegate:delegate]; -} - -#pragma mark - MRAID - -- (MPClosableView *)buildMRAIDMPClosableViewWithFrame:(CGRect)frame webView:(MPWebView *)webView delegate:(id)delegate -{ - MPClosableView *adView = [[MPClosableView alloc] initWithFrame:frame closeButtonType:MPClosableViewCloseButtonTypeTappableWithImage]; - adView.delegate = delegate; - adView.clipsToBounds = YES; - webView.frame = adView.bounds; - [adView addSubview:webView]; - return adView; -} - -- (MRBundleManager *)buildMRBundleManager -{ - return [MRBundleManager sharedManager]; -} - -- (MRController *)buildBannerMRControllerWithFrame:(CGRect)frame delegate:(id)delegate -{ - return [self buildMRControllerWithFrame:frame placementType:MRAdViewPlacementTypeInline delegate:delegate]; -} - -- (MRController *)buildInterstitialMRControllerWithFrame:(CGRect)frame delegate:(id)delegate -{ - return [self buildMRControllerWithFrame:frame placementType:MRAdViewPlacementTypeInterstitial delegate:delegate]; -} - -- (MRController *)buildMRControllerWithFrame:(CGRect)frame placementType:(MRAdViewPlacementType)placementType delegate:(id)delegate -{ - MRController *controller = [[MRController alloc] initWithAdViewFrame:frame adPlacementType:placementType]; - controller.delegate = delegate; - return controller; -} - -- (MRBridge *)buildMRBridgeWithWebView:(MPWebView *)webView delegate:(id)delegate -{ - MRBridge *bridge = [[MRBridge alloc] initWithWebView:webView]; - bridge.delegate = delegate; - bridge.shouldHandleRequests = YES; - return bridge; -} - -- (MRVideoPlayerManager *)buildMRVideoPlayerManagerWithDelegate:(id)delegate -{ - return [[MRVideoPlayerManager alloc] initWithDelegate:delegate]; -} - -- (MPMoviePlayerViewController *)buildMPMoviePlayerViewControllerWithURL:(NSURL *)URL -{ - // ImageContext used to avoid CGErrors - // http://stackoverflow.com/questions/13203336/iphone-mpmovieplayerviewcontroller-cgcontext-errors/14669166#14669166 - UIGraphicsBeginImageContext(CGSizeMake(1,1)); - MPMoviePlayerViewController *playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:URL]; - UIGraphicsEndImageContext(); - - return playerViewController; -} - -- (MRNativeCommandHandler *)buildMRNativeCommandHandlerWithDelegate:(id)delegate -{ - return [[MRNativeCommandHandler alloc] initWithDelegate:delegate]; -} - -#pragma mark - Native - -#if MP_HAS_NATIVE_PACKAGE - -- (MPNativeCustomEvent *)buildNativeCustomEventFromCustomClass:(Class)customClass - delegate:(id)delegate -{ - MPNativeCustomEvent *customEvent = [[customClass alloc] init]; - if (![customEvent isKindOfClass:[MPNativeCustomEvent class]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPNativeCustomEvent ****", NSStringFromClass(customClass)); - return nil; - } - customEvent.delegate = delegate; - return customEvent; -} - -- (MPNativeAdSource *)buildNativeAdSourceWithDelegate:(id)delegate -{ - MPNativeAdSource *source = [MPNativeAdSource source]; - source.delegate = delegate; - return source; -} - -- (MPNativePositionSource *)buildNativePositioningSource -{ - return [[MPNativePositionSource alloc] init]; -} - -- (MPStreamAdPlacementData *)buildStreamAdPlacementDataWithPositioning:(MPAdPositioning *)positioning -{ - MPStreamAdPlacementData *placementData = [[MPStreamAdPlacementData alloc] initWithPositioning:positioning]; - return placementData; -} - -- (MPStreamAdPlacer *)buildStreamAdPlacerWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [MPStreamAdPlacer placerWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; -} - -#endif - -@end - diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPMediationManager.h b/iphone/Maps/3party/MoPubSDK/Internal/MPMediationManager.h deleted file mode 100644 index 555699a261..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPMediationManager.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPMediationManager.h -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -#import -#import "MPMediationSdkInitializable.h" - -@interface MPMediationManager : NSObject - -/** - Singleton instance of the manager. - */ -+ (instancetype _Nonnull)sharedManager; - -/** - Initializes the inputted mediated network SDKs from the cache. - @param networks Networks to initialize. If @c nil, nothing will be done. - @param completion Optional completion block. - */ -- (void)initializeMediatedNetworks:(NSArray> * _Nullable)networks - completion:(void (^ _Nullable)(NSError * _Nullable error))completion; - -/** - 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 _Nonnull)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 _Nonnull)networkClass; - -/** - Retrieves all of the currently cached networks. - @return A list of all cached networks or @c nil. - */ -- (NSArray> * _Nullable)allCachedNetworks; - -/** - Clears the cache. - */ -- (void)clearCache; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPMediationManager.m b/iphone/Maps/3party/MoPubSDK/Internal/MPMediationManager.m deleted file mode 100644 index b38f0115ba..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPMediationManager.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// MPMediationManager.m -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -#import "MPMediationManager.h" -#import "MPLogging.h" - -/** - Key of the @c NSUserDefaults entry for the network initialization cache. - */ -static NSString * const kNetworkSDKInitializationParametersKey = @"com.mopub.mopub-ios-sdk.network-init-info"; - -@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; -} - -#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; - } - - NSDictionary * cachedParameters = [[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey]; - if (cachedParameters == nil) { - return nil; - } - - return [cachedParameters objectForKey:network]; -} - -- (NSArray> * _Nullable)allCachedNetworks { - NSDictionary * cachedParameters = [[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey]; - NSArray * cacheKeys = [cachedParameters allKeys]; - if (cacheKeys == nil) { - return nil; - } - - // Convert the strings of class names into class types. - NSMutableArray> * cachedNetworks = [NSMutableArray array]; - [cacheKeys enumerateObjectsUsingBlock:^(NSString * key, NSUInteger idx, BOOL * _Nonnull stop) { - Class c = NSClassFromString(key); - if ([c conformsToProtocol:@protocol(MPMediationSdkInitializable)]) { - [cachedNetworks addObject:c]; - } - }]; - - return cachedNetworks; -} - -- (void)clearCache { - @synchronized (self) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:kNetworkSDKInitializationParametersKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - MPLogInfo(@"Cleared cached SDK initialization parameters"); - } -} - -#pragma mark - Mediation - -- (void)initializeMediatedNetworks:(NSArray> *)networks - completion:(void (^ _Nullable)(NSError * _Nullable error))completion { - // Nothing to initialize - if (networks.count == 0) { - if (completion != nil) { - completion(nil); - } - - return; - } - - // Network SDK initializations should occur on the main thread since - // some of those SDKs require it. - dispatch_async(dispatch_get_main_queue(), ^{ - for (Class mediationClass in networks) { - id mediationNetwork = (id)[[mediationClass class] new]; - NSDictionary * cachedInitializationParams = [self cachedInitializationParametersForNetwork:mediationClass]; - - // Only attempt initialization if they exist. Otherwise, we should wait for the - // on-demand initialization to occur with the correct parameters. - if (cachedInitializationParams != nil) { - [mediationNetwork initializeSdkWithParameters:cachedInitializationParams]; - MPLogInfo(@"Loaded mediated network: %@", NSStringFromClass(mediationClass)); - } - } - - if (completion != nil) { - completion(nil); - } - }); -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPURLRequest.m b/iphone/Maps/3party/MoPubSDK/Internal/MPURLRequest.m deleted file mode 100644 index ec8f2285b7..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPURLRequest.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// MPURLRequest.m -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -#import "MPURLRequest.h" -#import "MPAPIEndpoints.h" -#import "MPLogging.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 { - // 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:MOPUB_BASE_HOSTNAME]; - NSURL * requestUrl = URL; - if (isMoPubRequest) { - // The incoming URL may contain query parameters; we will need to strip them out. - NSURLComponents * components = [[NSURLComponents alloc] init]; - components.scheme = URL.scheme; - components.host = URL.host; - components.path = URL.path; - requestUrl = components.URL; - } - - if (self = [super initWithURL:requestUrl]) { - // Generate the request - [self setHTTPShouldHandleCookies:NO]; - [self setValue:MPURLRequest.userAgent forHTTPHeaderField:@"User-Agent"]; - [self setCachePolicy:NSURLRequestReloadIgnoringCacheData]; - [self setTimeoutInterval:kRequestTimeoutInterval]; - - // Request is a MoPub specific request and should be sent as POST with a UTF8 JSON payload. - if (isMoPubRequest) { - [self setHTTPMethod:@"POST"]; - [self setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; - - // Generate the JSON body from the query parameters - NSURLComponents * components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:NO]; - NSDictionary * json = [MPURLRequest jsonFromURLComponents:components]; - - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:json 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 { - MPLogError(@"Could not generate JSON body for %@", json); - } - } - } - - return self; -} - -+ (MPURLRequest *)requestWithURL:(NSURL *)URL { - return [[MPURLRequest alloc] initWithURL:URL]; -} - -/** - Retrieves the current user agent as determined by @c UIWebView. - @returns The user agent. - */ -+ (NSString *)userAgent { - static NSString * ua = nil; - - if (ua == nil) { - ua = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; - } - - return ua; -} - -/** - Generates the POST body as a JSON dictionary. The keys to the dictionary - are the query parameter keys, and the values are the associated values. - In the event that there are multiple keys present, they will be combined into - a comma-seperated list string. - @remark The values will be URL-decoded before being set in the JSON dictionary - @param components URL components to generate the JSON - @returns A JSON dictionary - */ -+ (NSDictionary *)jsonFromURLComponents:(NSURLComponents *)components { - NSMutableDictionary * json = [NSMutableDictionary new]; - - // If there are no components, just give back an empty JSON - if (components == nil) { - return json; - } - - // Iterate over every query parameter and rationalize them into - // the JSON dictionary. - for (NSURLQueryItem * queryItem in components.queryItems) { - NSString * key = queryItem.name; - NSString * decodedValue = [queryItem.value stringByRemovingPercentEncoding]; - decodedValue = decodedValue != nil ? decodedValue : @""; - - if ([json objectForKey:key] != nil) { - json[key] = [@[json[key], decodedValue] componentsJoinedByString:@","]; - } - // Key doesn't exist; add it. - else { - json[key] = decodedValue; - } - } - - return json; -} - -@end -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPVASTTracking.h b/iphone/Maps/3party/MoPubSDK/Internal/MPVASTTracking.h deleted file mode 100644 index da50565489..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPVASTTracking.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// MPVASTTracking.h -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import - -@class MPVideoConfig; - -typedef NS_ENUM(NSUInteger, MPVideoEventType) { - MPVideoEventTypeTimeUpdate = 0, - MPVideoEventTypeMuted, - MPVideoEventTypeUnmuted, - MPVideoEventTypePause, - MPVideoEventTypeResume, - MPVideoEventTypeFullScreen, - MPVideoEventTypeExitFullScreen, - MPVideoEventTypeExpand, - MPVideoEventTypeCollapse, - MPVideoEventTypeCompleted, - MPVideoEventTypeImpression, - MPVideoEventTypeClick, - MPVideoEventTypeError -}; - -@interface MPVASTTracking : NSObject - -@property (nonatomic, readonly) MPVideoConfig *videoConfig; -@property (nonatomic) NSTimeInterval videoDuration; - -- (instancetype)initWithMPVideoConfig:(MPVideoConfig *)videoConfig videoView:(UIView *)videoView; -- (void)handleVideoEvent:(MPVideoEventType)videoEventType videoTimeOffset:(NSTimeInterval)timeOffset; -- (void)handleNewVideoView:(UIView *)videoView; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPVASTTracking.m b/iphone/Maps/3party/MoPubSDK/Internal/MPVASTTracking.m deleted file mode 100644 index e3fa043040..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPVASTTracking.m +++ /dev/null @@ -1,253 +0,0 @@ -// -// MPVASTTracking.m -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MOPUBNativeVideoImpressionAgent.h" -#import "MPAnalyticsTracker.h" -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" -#import "MPVASTMacroProcessor.h" -#import "MPVASTTracking.h" -#import "MPVideoConfig.h" - -// Do not fire the start tracker until this time has been reached in the video -static const NSInteger kStartTrackerTime = 0; - -@interface VASTTrackingURL : NSObject - -@property (nonatomic, copy) NSURL *url; -@property (nonatomic) MPVASTDurationOffset *progressOffset; - -@end - -@implementation VASTTrackingURL - -@end - -@interface VASTEventTracker : NSObject - -@property (nonatomic, assign) BOOL trackersFired; -@property (nonatomic) NSArray *trackingEvents; // NSArray - -@end - -@implementation VASTEventTracker - -+ (VASTEventTracker *)eventTrackerWithMPVastTrackingEvents:(NSArray *)events -{ - VASTEventTracker *result = [[VASTEventTracker alloc] init]; - NSMutableArray *trackingEvents = [NSMutableArray array]; - for (MPVASTTrackingEvent *event in events) { - VASTTrackingURL *tracker = [[VASTTrackingURL alloc] init]; - tracker.url = event.URL; - tracker.progressOffset = event.progressOffset; - [trackingEvents addObject:tracker]; - } - - result.trackingEvents = trackingEvents; - - return result; -} - -+ (VASTEventTracker *)eventTrackerWithURLs:(NSArray *)urls -{ - VASTEventTracker *result = [[VASTEventTracker alloc] init]; - NSMutableArray *trackingEvents = [NSMutableArray array]; - for (NSURL *url in urls) { - VASTTrackingURL *tracker = [[VASTTrackingURL alloc] init]; - tracker.url = url; - tracker.progressOffset = nil; - [trackingEvents addObject:tracker]; - } - - result.trackingEvents = trackingEvents; - - return result; -} - -@end - -@interface MPVASTTracking() - -@property (nonatomic) VASTEventTracker *errorTracker; -@property (nonatomic) VASTEventTracker *impressionTracker; -@property (nonatomic) VASTEventTracker *clickTracker; -@property (nonatomic) VASTEventTracker *customViewabilityTracker; - -@property (nonatomic) VASTEventTracker *startTracker; -@property (nonatomic) VASTEventTracker *firstQuartileTracker; -@property (nonatomic) VASTEventTracker *midPointTracker; -@property (nonatomic) VASTEventTracker *thirdQuartileTracker; -@property (nonatomic) VASTEventTracker *completionTracker; - -@property (nonatomic) NSMutableArray *variableProgressTrackers; //NSMutableArray - -@property (nonatomic) VASTEventTracker *muteTracker; -@property (nonatomic) VASTEventTracker *unmuteTracker; -@property (nonatomic) VASTEventTracker *pauseTracker; -@property (nonatomic) VASTEventTracker *rewindTracker; -@property (nonatomic) VASTEventTracker *resumeTracker; -@property (nonatomic) VASTEventTracker *fullscreenTracker; -@property (nonatomic) VASTEventTracker *exitFullscreenTracker; -@property (nonatomic) VASTEventTracker *expandTracker; -@property (nonatomic) VASTEventTracker *collapseTracker; - -@property (nonatomic) MOPUBNativeVideoImpressionAgent *customViewabilityTrackingAgent; - -@end - -@implementation MPVASTTracking - -- (instancetype)initWithMPVideoConfig:(MPVideoConfig *)videoConfig videoView:(UIView *)videoView; -{ - self = [super init]; - if (self) { - _videoConfig = videoConfig; - _videoDuration = -1; - - _errorTracker = [VASTEventTracker eventTrackerWithURLs:_videoConfig.errorURLs]; - _impressionTracker = [VASTEventTracker eventTrackerWithURLs:_videoConfig.impressionURLs]; - _clickTracker = [VASTEventTracker eventTrackerWithURLs:_videoConfig.clickTrackingURLs]; - - _startTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.startTrackers]; - _firstQuartileTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.firstQuartileTrackers]; - _midPointTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.midpointTrackers]; - _thirdQuartileTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.thirdQuartileTrackers]; - _completionTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.completionTrackers]; - - _variableProgressTrackers = [NSMutableArray array]; - for (MPVASTTrackingEvent *event in _videoConfig.otherProgressTrackers) { - [_variableProgressTrackers addObject:[VASTEventTracker eventTrackerWithMPVastTrackingEvents:[NSArray arrayWithObject:event]]]; - } - - _muteTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.muteTrackers]; - _unmuteTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.unmuteTrackers]; - _pauseTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.pauseTrackers]; - _rewindTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.rewindTrackers]; - _resumeTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.resumeTrackers]; - _fullscreenTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.fullscreenTrackers]; - _exitFullscreenTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.exitFullscreenTrackers]; - _expandTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.expandTrackers]; - _collapseTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.collapseTrackers]; - - if (_videoConfig.viewabilityTrackingURL) { - _customViewabilityTracker = [VASTEventTracker eventTrackerWithURLs:[NSArray arrayWithObject:_videoConfig.viewabilityTrackingURL]]; - _customViewabilityTrackingAgent = [[MOPUBNativeVideoImpressionAgent alloc] initWithVideoView:videoView requiredVisibilityPercentage:videoConfig.minimumFractionOfVideoVisible requiredPlaybackDuration:videoConfig.minimumViewabilityTimeInterval]; - } - } - return self; -} - -- (void)handleVideoEvent:(MPVideoEventType)videoEventType videoTimeOffset:(NSTimeInterval)timeOffset -{ - if (self.videoConfig && (self.videoDuration > 0 || videoEventType == MPVideoEventTypeError)) { - if (videoEventType == MPVideoEventTypeTimeUpdate) { - [self handleProgressTrackers:timeOffset]; - } else { - VASTEventTracker *eventTrackerToFire; - switch (videoEventType) { - case MPVideoEventTypeMuted: - eventTrackerToFire = self.muteTracker; - break; - case MPVideoEventTypeUnmuted: - eventTrackerToFire = self.unmuteTracker; - break; - case MPVideoEventTypePause: - eventTrackerToFire = self.pauseTracker; - break; - case MPVideoEventTypeResume: - eventTrackerToFire = self.resumeTracker; - break; - case MPVideoEventTypeFullScreen: - eventTrackerToFire = self.fullscreenTracker; - break; - case MPVideoEventTypeExitFullScreen: - eventTrackerToFire = self.exitFullscreenTracker; - break; - case MPVideoEventTypeExpand: - eventTrackerToFire = self.expandTracker; - break; - case MPVideoEventTypeCollapse: - eventTrackerToFire = self.collapseTracker; - break; - case MPVideoEventTypeError: - eventTrackerToFire = self.errorTracker; - break; - case MPVideoEventTypeImpression: - if (!self.impressionTracker.trackersFired) { - eventTrackerToFire = self.impressionTracker; - } - break; - case MPVideoEventTypeClick: - if (!self.clickTracker.trackersFired) { - eventTrackerToFire = self.clickTracker; - } - break; - case MPVideoEventTypeCompleted: - if (!self.completionTracker.trackersFired) { - eventTrackerToFire = self.completionTracker; - } - break; - default: - eventTrackerToFire = nil; - } - // Only fire event trackers after the video has started playing - if (eventTrackerToFire && (self.startTracker.trackersFired || videoEventType == MPVideoEventTypeError)) { - [self cleanAndSendTrackingEvents:eventTrackerToFire timeOffset:timeOffset]; - } - } - } -} - -- (void)handleProgressTrackers:(NSTimeInterval)timeOffset -{ - if (timeOffset >= kStartTrackerTime && !self.startTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.startTracker timeOffset:timeOffset]; - } - - if ((0.75 * self.videoDuration) <= timeOffset && !self.thirdQuartileTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.thirdQuartileTracker timeOffset:timeOffset]; - } - - if ((0.50 * self.videoDuration) <= timeOffset && !self.midPointTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.midPointTracker timeOffset:timeOffset]; - } - - if ((0.25 * self.videoDuration) <= timeOffset && !self.firstQuartileTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.firstQuartileTracker timeOffset:timeOffset]; - } - - for (VASTEventTracker *progressTracker in self.variableProgressTrackers) { - VASTTrackingURL *progressTrackingURL = progressTracker.trackingEvents[0]; // there's only one - if (!progressTracker.trackersFired && [progressTrackingURL.progressOffset timeIntervalForVideoWithDuration:self.videoDuration] <= timeOffset) { - [self cleanAndSendTrackingEvents:progressTracker timeOffset:timeOffset]; - } - } - - if (self.customViewabilityTracker && !self.customViewabilityTracker.trackersFired && - [self.customViewabilityTrackingAgent shouldTrackImpressionWithCurrentPlaybackTime:timeOffset]) { - [self cleanAndSendTrackingEvents:self.customViewabilityTracker timeOffset:timeOffset]; - } -} - -- (void)cleanAndSendTrackingEvents:(VASTEventTracker *)vastEventTracker timeOffset:(NSTimeInterval)timeOffset -{ - if (vastEventTracker && [vastEventTracker.trackingEvents count]) { - NSMutableArray *cleanedTrackingURLs = [NSMutableArray array]; - for (VASTTrackingURL *vastTrackingURL in vastEventTracker.trackingEvents) { - [cleanedTrackingURLs addObject:[MPVASTMacroProcessor macroExpandedURLForURL:vastTrackingURL.url errorCode:nil videoTimeOffset:timeOffset videoAssetURL:self.videoConfig.mediaURL]]; - } - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] sendTrackingRequestForURLs:cleanedTrackingURLs]; - } - vastEventTracker.trackersFired = YES; -} - -- (void)handleNewVideoView:(UIView *)videoView -{ - self.customViewabilityTrackingAgent = [[MOPUBNativeVideoImpressionAgent alloc] initWithVideoView:videoView requiredVisibilityPercentage:self.videoConfig.minimumFractionOfVideoVisible requiredPlaybackDuration:self.videoConfig.minimumViewabilityTimeInterval]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/LICENSE b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/LICENSE deleted file mode 100644 index b62d673bf8..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/LICENSE +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) 2011, The ORMMA.org project authors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -- Neither the name of the ORMMA.org nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS MR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER MR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, MR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS MR SERVICES; LOSS OF USE, DATA, MR PROFITS; MR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, MR TORT (INCLUDING NEGLIGENCE MR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m deleted file mode 100644 index d00b8b54e7..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// MPMRAIDBannerCustomEvent.m -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MPMRAIDBannerCustomEvent.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MPInstanceProvider.h" -#import "MRController.h" -#import "MPWebView.h" -#import "MPViewabilityTracker.h" - -@interface MPMRAIDBannerCustomEvent () - -@property (nonatomic, strong) MRController *mraidController; - -@end - -@implementation MPMRAIDBannerCustomEvent - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub MRAID banner"); - MPAdConfiguration *configuration = [self.delegate configuration]; - - CGRect adViewFrame = CGRectZero; - if ([configuration hasPreferredSize]) { - adViewFrame = CGRectMake(0, 0, configuration.preferredSize.width, - configuration.preferredSize.height); - } - - self.mraidController = [[MPInstanceProvider sharedProvider] buildBannerMRControllerWithFrame:adViewFrame delegate:self]; - [self.mraidController loadAdWithConfiguration:configuration]; -} - -#pragma mark - MRControllerDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)adConfiguration -{ - return [self.delegate configuration]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)adDidLoad:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner did load"); - [self.delegate bannerCustomEvent:self didLoadAd:adView]; -} - -- (void)adDidFailToLoad:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner did fail"); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)closeButtonPressed -{ - //don't care -} - -- (void)appShouldSuspendForAd:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner will begin action"); - [self.delegate bannerCustomEventWillBeginAction:self]; -} - -- (void)appShouldResumeFromAd:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner did end action"); - [self.delegate bannerCustomEventDidFinishAction:self]; -} - -- (void)trackMPXAndThirdPartyImpressions -{ - [self.mraidController.mraidWebView stringByEvaluatingJavaScriptFromString:@"webviewDidAppear();"]; -} - -- (void)startViewabilityTracker -{ - [self.mraidController.viewabilityTracker startTracking]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m deleted file mode 100644 index d415315603..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// MPMRAIDInterstitialCustomEvent.m -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPInstanceProvider.h" -#import "MPLogging.h" - -@interface MPMRAIDInterstitialCustomEvent () - -@property (nonatomic, strong) MPMRAIDInterstitialViewController *interstitial; - -@end - -@implementation MPMRAIDInterstitialCustomEvent - -@synthesize interstitial = _interstitial; - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub MRAID interstitial"); - self.interstitial = [[MPInstanceProvider sharedProvider] buildMPMRAIDInterstitialViewControllerWithDelegate:self - configuration:[self.delegate configuration]]; - - // 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 -{ - [self.interstitial presentInterstitialFromViewController:controller]; -} - -#pragma mark - MPMRAIDInterstitialViewControllerDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did load"); - [self.delegate interstitialCustomEvent:self didLoadAd:self.interstitial]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did fail"); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial will appear"); - [self.delegate interstitialCustomEventWillAppear:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did appear"); - [self.delegate interstitialCustomEventDidAppear:self]; -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial will disappear"); - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did disappear"); - [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:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did receive tap event"); - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial will leave application"); - [self.delegate interstitialCustomEventWillLeaveApplication:self]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRError.m b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRError.m deleted file mode 100644 index 6df5d883bd..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRError.m +++ /dev/null @@ -1,10 +0,0 @@ -// -// MRError.m -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MRError.h" - -NSString * const MoPubMRAIDAdsSDKDomain = @"com.mopub.iossdk.mraid"; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h deleted file mode 100644 index 63cc829a32..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// MRExpandModalViewController.h -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#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; - -/** - * Hides the status bar when called. Every call to hideStatusBar should be matched with a call to - * restoreStatusBarVisibility. That is, each time hideStatusBar is called, restoreStatusBarVisibility - * must be called before calling hideStatusBar again. If the methods aren't called in the correct order, - * consecutive calls to this method become no ops. - */ -- (void)hideStatusBar; - -/** - * This will set the visibility of the status bar based on whether or not the status bar was hidden when hideStatusBar was called. - * A call to this method should be matched with a call to hideStatusBar. That is, each call to restoreStatusBarVisibility should - * be preceded by a call to hideStatusBar. Calling this method consecutively will not affect the status bar beyond the first call. - */ -- (void)restoreStatusBarVisibility; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m deleted file mode 100644 index f13ccd7ff1..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// MRExpandModalViewController.m -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MRExpandModalViewController.h" -#import "MPGlobal.h" - -@interface MRExpandModalViewController () - -@property (nonatomic, assign) BOOL statusBarHidden; -@property (nonatomic, assign) BOOL applicationHidesStatusBar; -@property (nonatomic, assign) UIInterfaceOrientationMask supportedOrientationMask; - -@end - -@implementation MRExpandModalViewController - -- (instancetype)initWithOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - if (self = [super init]) { - _supportedOrientationMask = orientationMask; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; -} - -- (void)hideStatusBar -{ - if (!self.statusBarHidden) { - self.statusBarHidden = YES; - self.applicationHidesStatusBar = [UIApplication sharedApplication].statusBarHidden; - - // pre-ios 7 hiding status bar - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:YES]; - - // In the event we come back to this view controller from another modal, we need to update the status bar's - // visibility again in ios 7/8. - if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - [self setNeedsStatusBarAppearanceUpdate]; - } - } -} - -- (void)restoreStatusBarVisibility -{ - self.statusBarHidden = self.applicationHidesStatusBar; - - // pre-ios 7 restoring the status bar - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:self.applicationHidesStatusBar]; - - // ios 7/8 restoring status bar - if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - [self setNeedsStatusBarAppearanceUpdate]; - } -} - -- (BOOL)prefersStatusBarHidden -{ - // ios 7 hiding status bar - return self.statusBarHidden; -} - -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask -{ - _supportedOrientationMask = supportedOrientationMask; - - [UIViewController attemptRotationToDeviceOrientation]; -} - -// supportedInterfaceOrientations and shouldAutorotate are for ios 6, 7, and 8. -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif -{ - 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/3party/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m b/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m deleted file mode 100644 index 7f144ccd96..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MRVideoPlayerManager.h" -#import -#import "MPInstanceProvider.h" - -@implementation MRVideoPlayerManager - -@synthesize delegate = _delegate; - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self - name:MPMoviePlayerPlaybackDidFinishNotification - object:nil]; -} - -- (void)playVideo:(NSURL *)url -{ - if (!url) { - [self.delegate videoPlayerManager:self didFailToPlayVideoWithErrorMessage:@"URI was not valid."]; - return; - } - - MPMoviePlayerViewController *controller = [[MPInstanceProvider sharedProvider] buildMPMoviePlayerViewControllerWithURL:url]; - - [self.delegate videoPlayerManagerWillPresentVideo:self]; - [[self.delegate viewControllerForPresentingVideoPlayer] presentViewController:controller animated:MP_ANIMATED completion:nil]; - - // Avoid subscribing to the notification multiple times in the event the user plays the video more than once. - [[NSNotificationCenter defaultCenter] removeObserver:self - name:MPMoviePlayerPlaybackDidFinishNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(moviePlayerPlaybackDidFinish:) - name:MPMoviePlayerPlaybackDidFinishNotification - object:nil]; -} - -- (void)moviePlayerPlaybackDidFinish:(NSNotification *)notification -{ - [self.delegate videoPlayerManagerDidDismissVideo:self]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m deleted file mode 100644 index 2aaa25f7a5..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSString+MPAdditions.m -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "NSString+MPAdditions.h" - -@implementation NSString (MPAdditions) - -- (NSString *)mp_URLEncodedString { - NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, - (CFStringRef)self, - NULL, - (CFStringRef)@"!*'();:@&=+$,/?%#[]<>", - kCFStringEncodingUTF8)); - return result; -} - -- (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/3party/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h deleted file mode 100644 index 6dcf8411e9..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// UIButton+MPAdditions.h -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import - -@interface UIButton (MPAdditions) - -@property (nonatomic) UIEdgeInsets mp_TouchAreaInsets; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m deleted file mode 100644 index 9a49ecb3de..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// UIButton+MPAdditions.m -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "UIButton+MPAdditions.h" -#import - -@implementation UIButton (MPAdditions) - -- (UIEdgeInsets)mp_TouchAreaInsets -{ - return [objc_getAssociatedObject(self, @selector(mp_TouchAreaInsets)) UIEdgeInsetsValue]; -} - -- (void)setMp_TouchAreaInsets:(UIEdgeInsets)touchAreaInsets -{ - NSValue *value = [NSValue valueWithUIEdgeInsets:touchAreaInsets]; - objc_setAssociatedObject(self, @selector(mp_TouchAreaInsets), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event -{ - UIEdgeInsets touchAreaInsets = self.mp_TouchAreaInsets; - CGRect bounds = self.bounds; - 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/3party/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h deleted file mode 100644 index 6b4ea348b1..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// UIView+MPAdditions.h -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#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 diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h deleted file mode 100644 index 3ffde61345..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIWebView+MPAdditions.h -// MoPub -// -// Created by Andrew He on 11/6/11. -// Copyright (c) 2011 MoPub, Inc. All rights reserved. -// - -#import -#import - -extern NSString *const kJavaScriptDisableDialogSnippet; - -@interface UIWebView (MPAdditions) - -- (void)mp_setScrollable:(BOOL)scrollable; -- (void)disableJavaScriptDialogs; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m deleted file mode 100644 index 26cf930431..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// UIWebView+MPAdditions.m -// MoPub -// -// Created by Andrew He on 11/6/11. -// Copyright (c) 2011 MoPub, Inc. All rights reserved. -// - -#import "UIWebView+MPAdditions.h" - -NSString *const kJavaScriptDisableDialogSnippet = @"window.alert = function() { }; window.prompt = function() { }; window.confirm = function() { };"; - -@implementation UIWebView (MPAdditions) - -/* - * Find all subviews that are UIScrollViews or subclasses and set their scrolling and bounce. - */ -- (void)mp_setScrollable:(BOOL)scrollable { - if ([self respondsToSelector:@selector(scrollView)]) - { - UIScrollView *scrollView = self.scrollView; - scrollView.scrollEnabled = scrollable; - scrollView.bounces = scrollable; - } - else - { - UIScrollView *scrollView = nil; - for (UIView *v in self.subviews) - { - if ([v isKindOfClass:[UIScrollView class]]) - { - scrollView = (UIScrollView *)v; - break; - } - } - scrollView.scrollEnabled = scrollable; - scrollView.bounces = scrollable; - } -} - -/* - * Redefine alert, prompt, and confirm to do nothing - */ -- (void)disableJavaScriptDialogs -{ - [self stringByEvaluatingJavaScriptFromString:kJavaScriptDisableDialogSnippet]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h deleted file mode 100644 index 6f2dbb82f3..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MOPUBExperimentProvider.h -// MoPub -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "MPAdDestinationDisplayAgent.h" - -@interface MOPUBExperimentProvider : NSObject - -+ (void)setDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType; -+ (void)setDisplayAgentFromAdServer:(MOPUBDisplayAgentType)displayAgentType; -+ (MOPUBDisplayAgentType)displayAgentType; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m deleted file mode 100644 index 4d05b4013c..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// MOPUBExperimentProvider.m -// MoPubSampleApp -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "MOPUBExperimentProvider.h" - -@implementation MOPUBExperimentProvider - -static BOOL gIsDisplayAgentOverriddenByClient = NO; -static MOPUBDisplayAgentType gDisplayAgentType = MOPUBDisplayAgentTypeInApp; - -+ (void)setDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType -{ - gIsDisplayAgentOverriddenByClient = YES; - gDisplayAgentType = displayAgentType; -} - -+ (void)setDisplayAgentFromAdServer:(MOPUBDisplayAgentType)displayAgentType -{ - if (!gIsDisplayAgentOverriddenByClient) { - gDisplayAgentType = displayAgentType; - } -} - -+ (MOPUBDisplayAgentType)displayAgentType -{ - return gDisplayAgentType; -} - -// used in test only -+ (void)setDisplayAgentOverriddenByClientFlag:(BOOL)flag -{ - gIsDisplayAgentOverriddenByClient = flag; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h deleted file mode 100644 index 422c405acf..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPAnalyticsTracker.h -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import - -@class MPAdConfiguration; - -@interface MPAnalyticsTracker : NSObject - -+ (MPAnalyticsTracker *)tracker; - -- (void)trackImpressionForConfiguration:(MPAdConfiguration *)configuration; -- (void)trackClickForConfiguration:(MPAdConfiguration *)configuration; -- (void)sendTrackingRequestForURLs:(NSArray *)URLs; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPError.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPError.h deleted file mode 100644 index acf4cdcb78..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPError.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPError.h -// MoPub -// -// Copyright (c) 2012 MoPub. All rights reserved. -// - -#import - -extern NSString * const kMOPUBErrorDomain; - -typedef enum { - MOPUBErrorUnknown = -1, - MOPUBErrorNoInventory = 0, - MOPUBErrorAdUnitWarmingUp = 1, - MOPUBErrorNetworkTimedOut = 4, - MOPUBErrorServerError = 8, - MOPUBErrorAdapterNotFound = 16, - MOPUBErrorAdapterInvalid = 17, - MOPUBErrorAdapterHasNoInventory = 18, - MOPUBErrorUnableToParseJSONAdResponse, - MOPUBErrorUnexpectedNetworkResponse, - MOPUBErrorNoNetworkData, -} MOPUBErrorCode; - -@interface MOPUBError : NSError - -+ (MOPUBError *)errorWithCode:(MOPUBErrorCode)code; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPError.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPError.m deleted file mode 100644 index a41c284695..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPError.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPError.m -// MoPub -// -// Copyright (c) 2012 MoPub. All rights reserved. -// - -#import "MPError.h" - -NSString * const kMOPUBErrorDomain = @"com.mopub.iossdk"; - -@implementation MOPUBError - -+ (MOPUBError *)errorWithCode:(MOPUBErrorCode)code -{ - return [self errorWithDomain:kMOPUBErrorDomain code:code userInfo:nil]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPInternalUtils.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPInternalUtils.h deleted file mode 100644 index 3fd069cf8d..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPInternalUtils.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPInternalUtils.h -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import - -#define SUPPRESS_PERFORM_SELECTOR_LEAK_WARNING(code) \ - _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \ - code; \ - _Pragma("clang diagnostic pop") \ - -@interface MPInternalUtils : NSObject - -@end - -@interface NSMutableDictionary (MPInternalUtils) - -- (void)mp_safeSetObject:(id)obj forKey:(id)key; -- (void)mp_safeSetObject:(id)obj forKey:(id)key withDefault:(id)defaultObj; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPInternalUtils.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPInternalUtils.m deleted file mode 100644 index 5b7cc07ccc..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPInternalUtils.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPInternalUtils.m -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPInternalUtils.h" - -@implementation MPInternalUtils - -@end - -@implementation NSMutableDictionary (MPInternalUtils) - -- (void)mp_safeSetObject:(id)obj forKey:(id)key -{ - if (obj != nil) { - [self setObject:obj forKey:key]; - } -} - -- (void)mp_safeSetObject:(id)obj forKey:(id)key withDefault:(id)defaultObj -{ - if (obj != nil) { - [self setObject:obj forKey:key]; - } else { - [self setObject:defaultObj forKey:key]; - } -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogProvider.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogProvider.h deleted file mode 100644 index 96f9a6739f..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogProvider.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPLogProvider.h -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "MPLogging.h" - -@protocol MPLogger; - -@interface MPLogProvider : NSObject - -+ (MPLogProvider *)sharedLogProvider; -- (void)addLogger:(id)logger; -- (void)removeLogger:(id)logger; -- (void)logMessage:(NSString *)message atLogLevel:(MPLogLevel)logLevel; - -@end - -@protocol MPLogger - -- (MPLogLevel)logLevel; -- (void)logMessage:(NSString *)message; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogProvider.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogProvider.m deleted file mode 100644 index b9aa1d0a90..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogProvider.m +++ /dev/null @@ -1,83 +0,0 @@ -// -// MPLogProvider.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPLogProvider.h" - -@interface MPLogProvider () - -@property (nonatomic, strong) NSMutableArray *loggers; - -@end - -@interface MPSystemLogger : NSObject -@end - -@implementation MPLogProvider - -#pragma mark - Singleton instance - -+ (MPLogProvider *)sharedLogProvider -{ - static dispatch_once_t once; - static MPLogProvider *sharedLogProvider; - dispatch_once(&once, ^{ - sharedLogProvider = [[self alloc] init]; - }); - - return sharedLogProvider; -} - -#pragma mark - Object Lifecycle - -- (id)init -{ - self = [super init]; - if (self) { - _loggers = [NSMutableArray array]; - [self addLogger:[[MPSystemLogger alloc] init]]; - } - return self; -} - -#pragma mark - Loggers - -- (void)addLogger:(id)logger -{ - [self.loggers addObject:logger]; -} - -- (void)removeLogger:(id)logger -{ - [self.loggers removeObject:logger]; -} - -#pragma mark - Logging - -- (void)logMessage:(NSString *)message atLogLevel:(MPLogLevel)logLevel -{ - [self.loggers enumerateObjectsUsingBlock:^(id logger, NSUInteger idx, BOOL *stop) { - if ([logger logLevel] <= logLevel) { - [logger logMessage:message]; - } - }]; -} - -@end - -@implementation MPSystemLogger - -- (void)logMessage:(NSString *)message -{ - NSLog(@"%@", message); -} - -- (MPLogLevel)logLevel -{ - return MPLogGetLevel(); -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogging.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogging.h deleted file mode 100644 index 6f897044e7..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogging.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPLogging.h -// MoPub -// -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import -#import "MPConstants.h" -#import "MPLogLevel.h" - -extern NSString * const kMPClearErrorLogFormatWithAdUnitID; -extern NSString * const kMPWarmingUpErrorLogFormatWithAdUnitID; - -MPLogLevel MPLogGetLevel(void); -void MPLogSetLevel(MPLogLevel level); -void _MPLogTrace(NSString *format, ...); -void _MPLogDebug(NSString *format, ...); -void _MPLogInfo(NSString *format, ...); -void _MPLogWarn(NSString *format, ...); -void _MPLogError(NSString *format, ...); -void _MPLogFatal(NSString *format, ...); - -#if MP_DEBUG_MODE && !SPECS - -#define MPLogTrace(...) _MPLogTrace(__VA_ARGS__) -#define MPLogDebug(...) _MPLogDebug(__VA_ARGS__) -#define MPLogInfo(...) _MPLogInfo(__VA_ARGS__) -#define MPLogWarn(...) _MPLogWarn(__VA_ARGS__) -#define MPLogError(...) _MPLogError(__VA_ARGS__) -#define MPLogFatal(...) _MPLogFatal(__VA_ARGS__) - -#else - -#define MPLogTrace(...) {} -#define MPLogDebug(...) {} -#define MPLogInfo(...) {} -#define MPLogWarn(...) {} -#define MPLogError(...) {} -#define MPLogFatal(...) {} - -#endif diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogging.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogging.m deleted file mode 100644 index 5dee8463ca..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPLogging.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// MPLogging.m -// MoPub -// -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import "MPLogging.h" -#import "MPIdentityProvider.h" -#import "MPLogProvider.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."; -NSString * const kMPSystemLogPrefix = @"MOPUB: %@"; - -static MPLogLevel systemLogLevel = MPLogLevelInfo; - -MPLogLevel MPLogGetLevel() -{ - return systemLogLevel; -} - -void MPLogSetLevel(MPLogLevel level) -{ - systemLogLevel = level; -} - -void _MPLog(MPLogLevel level, NSString *format, va_list args) -{ - static NSString *sIdentifier; - static NSString *sObfuscatedIdentifier; - - if (!sIdentifier) { - sIdentifier = [[MPIdentityProvider identifier] copy]; - } - - if (!sObfuscatedIdentifier) { - sObfuscatedIdentifier = [[MPIdentityProvider obfuscatedIdentifier] copy]; - } - - NSString *logString = [[NSString alloc] initWithFormat:format arguments:args]; - - // Replace identifier with a obfuscated version when logging. - logString = [logString stringByReplacingOccurrencesOfString:sIdentifier withString:sObfuscatedIdentifier]; - - [[MPLogProvider sharedLogProvider] logMessage:logString atLogLevel:level]; -} - -void _MPLogTrace(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelTrace, format, args); - va_end(args); -} - -void _MPLogDebug(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelDebug, format, args); - va_end(args); -} - -void _MPLogWarn(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelWarn, format, args); - va_end(args); -} - -void _MPLogInfo(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelInfo, format, args); - va_end(args); -} - -void _MPLogError(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelError, format, args); - va_end(args); -} - -void _MPLogFatal(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelFatal, format, args); - va_end(args); -} diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPReachability.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPReachability.h deleted file mode 100644 index af93448911..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPReachability.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - File: Reachability.h - Abstract: Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - Version: 3.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2014 Apple Inc. All Rights Reserved. - - */ - -#import -#import -#import - - -typedef enum : NSInteger { - MPNotReachable = 0, - MPReachableViaWiFi, - MPReachableViaWWAN -} MPNetworkStatus; - - -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_in *)hostAddress; - -/*! - * Checks whether the default route is available. Should be used by applications that do not connect to a particular host. - */ -+ (instancetype)reachabilityForInternetConnection; - -/*! - * Checks whether a local WiFi connection is available. - */ -+ (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; -- (BOOL)hasWifi; -- (BOOL)hasCellular; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPSessionTracker.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPSessionTracker.h deleted file mode 100644 index 630cb06b1d..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPSessionTracker.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPSessionTracker.h -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import - -@interface MPSessionTracker : NSObject - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPStoreKitProvider.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPStoreKitProvider.h deleted file mode 100644 index 35821561c2..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPStoreKitProvider.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPFeatureDetector.h -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import -#import "MPGlobal.h" -#import - -@class SKStoreProductViewController; - -@interface MPStoreKitProvider : NSObject - -+ (BOOL)deviceHasStoreKit; -+ (SKStoreProductViewController *)buildController; - -@end - -@protocol MPSKStoreProductViewControllerDelegate -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPStoreKitProvider.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPStoreKitProvider.m deleted file mode 100644 index e196fc760a..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPStoreKitProvider.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// MPFeatureDetector.m -// MoPub -// -// Copyright (c) 2013 MoPub. All rights reserved. -// - -#import "MPStoreKitProvider.h" -#import "MPGlobal.h" - -#import - -/* - * On iOS 7 and above, SKStoreProductViewController can cause a crash if the application does not list Portrait as a supported - * interface orientation. Specifically, SKStoreProductViewController's shouldAutorotate returns YES, even though - * the SKStoreProductViewController's supported interface orientations does not intersect with the application's list. - * - * To fix, we disallow autorotation so the SKStoreProductViewController will use its supported orientation on iOS 7 devices. - */ -@interface MPiOS7SafeStoreProductViewController : SKStoreProductViewController - -@end - -@implementation MPiOS7SafeStoreProductViewController - -- (BOOL)shouldAutorotate -{ - return NO; -} - -@end - -@implementation MPStoreKitProvider - -+ (BOOL)deviceHasStoreKit -{ - return !!NSClassFromString(@"SKStoreProductViewController"); -} - -+ (SKStoreProductViewController *)buildController -{ - // use our safe subclass on iOS 7 and above - if ([[UIDevice currentDevice].systemVersion compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) { - return [[MPiOS7SafeStoreProductViewController alloc] init]; - } else { - return [[SKStoreProductViewController alloc] init]; - } -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPTimer.h b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPTimer.h deleted file mode 100644 index 4095414324..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPTimer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPTimer.h -// MoPub -// -// Created by Andrew He on 3/8/11. -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import - -/* - * MPTimer wraps an NSTimer and adds pause/resume functionality. - */ -@interface MPTimer : NSObject - -@property (nonatomic, copy) NSString *runLoopMode; - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats; - -- (BOOL)isValid; -- (void)invalidate; -- (BOOL)isScheduled; -- (BOOL)scheduleNow; -- (BOOL)pause; -- (BOOL)resume; -- (NSTimeInterval)initialTimeInterval; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPTimer.m b/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPTimer.m deleted file mode 100644 index 544501ec3e..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPTimer.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// MPTimer.m -// MoPub -// -// Created by Andrew He on 3/8/11. -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import "MPTimer.h" -#import "MPLogging.h" -#import "MPInternalUtils.h" - -@interface MPTimer () -@property (nonatomic, assign) NSTimeInterval timeInterval; -@property (nonatomic, strong) NSTimer *timer; -@property (nonatomic, copy) NSDate *pauseDate; -@property (nonatomic, assign) BOOL isPaused; -@end - -@interface MPTimer () - -@property (nonatomic, weak) id target; -@property (nonatomic, assign) SEL selector; - -@end - -@implementation MPTimer - -@synthesize timeInterval = _timeInterval; -@synthesize timer = _timer; -@synthesize pauseDate = _pauseDate; -@synthesize target = _target; -@synthesize selector = _selector; -@synthesize isPaused = _isPaused; - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats -{ - MPTimer *timer = [[MPTimer alloc] init]; - timer.target = target; - timer.selector = aSelector; - timer.timer = [NSTimer timerWithTimeInterval:seconds - target:timer - selector:@selector(timerDidFire) - userInfo:nil - repeats:repeats]; - timer.timeInterval = seconds; - timer.runLoopMode = NSDefaultRunLoopMode; - return timer; -} - -- (void)dealloc -{ - [self.timer invalidate]; -} - -- (void)timerDidFire -{ - SUPPRESS_PERFORM_SELECTOR_LEAK_WARNING( - [self.target performSelector:self.selector withObject:nil] - ); -} - -- (BOOL)isValid -{ - return [self.timer isValid]; -} - -- (void)invalidate -{ - self.target = nil; - self.selector = nil; - [self.timer invalidate]; - self.timer = nil; -} - -- (BOOL)isScheduled -{ - if (!self.timer) { - return NO; - } - CFRunLoopRef runLoopRef = [[NSRunLoop currentRunLoop] getCFRunLoop]; - CFArrayRef arrayRef = CFRunLoopCopyAllModes(runLoopRef); - CFIndex count = CFArrayGetCount(arrayRef); - - for (CFIndex i = 0; i < count; ++i) { - CFStringRef runLoopMode = CFArrayGetValueAtIndex(arrayRef, i); - if (CFRunLoopContainsTimer(runLoopRef, (__bridge CFRunLoopTimerRef)self.timer, runLoopMode)) { - CFRelease(arrayRef); - return YES; - } - } - - CFRelease(arrayRef); - return NO; -} - -- (BOOL)scheduleNow -{ - if (![self.timer isValid]) { - MPLogDebug(@"Could not schedule invalidated MPTimer (%p).", self); - return NO; - } - - [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:self.runLoopMode]; - return YES; -} - -- (BOOL)pause -{ - NSTimeInterval secondsLeft; - if (self.isPaused) { - MPLogDebug(@"No-op: tried to pause an MPTimer (%p) that was already paused.", self); - return NO; - } - - if (![self.timer isValid]) { - MPLogDebug(@"Cannot pause invalidated MPTimer (%p).", self); - return NO; - } - - if (![self isScheduled]) { - MPLogDebug(@"No-op: tried to pause an MPTimer (%p) that was never scheduled.", self); - return NO; - } - - NSDate *fireDate = [self.timer fireDate]; - self.pauseDate = [NSDate date]; - secondsLeft = [fireDate timeIntervalSinceDate:self.pauseDate]; - if (secondsLeft <= 0) { - MPLogWarn(@"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.isPaused = YES; - - return YES; -} - -- (BOOL)resume -{ - if (![self.timer isValid]) { - MPLogDebug(@"Cannot resume invalidated MPTimer (%p).", self); - return NO; - } - - if (!self.isPaused) { - MPLogDebug(@"No-op: tried to resume an MPTimer (%p) that was never paused.", self); - return NO; - } - - MPLogDebug(@"Resumed MPTimer (%p), should fire in %.1f seconds.", self.timeInterval); - - // Resume the timer. - NSDate *newFireDate = [NSDate dateWithTimeInterval:self.timeInterval sinceDate:[NSDate date]]; - [self.timer setFireDate:newFireDate]; - - if (![self isScheduled]) { - [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:self.runLoopMode]; - } - - self.isPaused = NO; - return YES; -} - -- (NSTimeInterval)initialTimeInterval -{ - return self.timeInterval; -} - -@end - diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h deleted file mode 100644 index 07416a90d8..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPVASTCompanionAd.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import -#import "MPVASTModel.h" - -@interface MPVASTCompanionAd : MPVASTModel - -@property (nonatomic, readonly) CGFloat assetHeight; -@property (nonatomic, readonly) CGFloat assetWidth; -@property (nonatomic, copy, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) CGFloat height; -@property (nonatomic, readonly) NSArray *HTMLResources; -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, readonly) NSArray *iframeResources; -@property (nonatomic, readonly) NSArray *staticResources; -@property (nonatomic, readonly) NSDictionary *trackingEvents; -@property (nonatomic, readonly) CGFloat width; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTLinearAd.h b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTLinearAd.h deleted file mode 100644 index 905c0e4db4..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTLinearAd.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPVASTLinearAd.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import "MPVASTModel.h" - -@class MPVASTDurationOffset; -@class MPVASTMediaFile; - -@interface MPVASTLinearAd : MPVASTModel - -@property (nonatomic, copy, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) NSArray *customClickURLs; -@property (nonatomic, readonly) NSTimeInterval duration; -@property (nonatomic, readonly) NSArray *industryIcons; -@property (nonatomic, readonly) NSArray *mediaFiles; -@property (nonatomic, readonly) MPVASTDurationOffset *skipOffset; -@property (nonatomic, readonly) NSDictionary *trackingEvents; - -@end - -@interface MPVASTLinearAd (Media) -@property (nonatomic, readonly) MPVASTMediaFile *highestBitrateMediaFile; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTManager.h b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTManager.h deleted file mode 100644 index 4a42b87d53..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTManager.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPVASTManager.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import "MPVASTResponse.h" - -typedef enum { - MPVASTErrorXMLParseFailure, - MPVASTErrorExceededMaximumWrapperDepth, - MPVASTErrorNoAdsFound -} MPVASTError; - -@interface MPVASTManager : NSObject - -+ (void)fetchVASTWithURL:(NSURL *)URL completion:(void (^)(MPVASTResponse *, NSError *))completion; -+ (void)fetchVASTWithData:(NSData *)data completion:(void (^)(MPVASTResponse *, NSError *))completion; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTMediaFile.h b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTMediaFile.h deleted file mode 100644 index 70bf6b9bdf..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTMediaFile.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPVASTMediaFile.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import -#import "MPVASTModel.h" - -@interface MPVASTMediaFile : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, copy, readonly) NSString *delivery; -@property (nonatomic, copy, readonly) NSString *mimeType; -@property (nonatomic, readonly) double bitrate; -@property (nonatomic, readonly) CGFloat width; -@property (nonatomic, readonly) CGFloat height; -@property (nonatomic, copy, readonly) NSURL *URL; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTMediaFile.m b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTMediaFile.m deleted file mode 100644 index 7e0377e6f5..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTMediaFile.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPVASTMediaFile.m -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPVASTMediaFile.h" -#import "MPVASTStringUtilities.h" - -@implementation MPVASTMediaFile - -+ (NSDictionary *)modelMap -{ - return @{@"bitrate": @[@"bitrate", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"height": @[@"height", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"width": @[@"width", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"identifier": @"id", - @"delivery": @"delivery", - @"mimeType": @"type", - @"URL": @[@"text", MPParseURLFromString()]}; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTResource.h b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTResource.h deleted file mode 100644 index 82b642b28c..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTResource.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPVASTResource.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import "MPVASTModel.h" - -@interface MPVASTResource : MPVASTModel - -@property (nonatomic, readonly) NSString *content; -@property (nonatomic, readonly) NSString *staticCreativeType; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTResource.m b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTResource.m deleted file mode 100644 index 7c0ce3779f..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTResource.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPVASTResource.m -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPVASTResource.h" - -@implementation MPVASTResource - -+ (NSDictionary *)modelMap -{ - return @{@"content": @"text", - @"staticCreativeType": @"creativeType"}; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h deleted file mode 100644 index a9c41044b3..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPVASTTrackingEvent.h -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import "MPVASTModel.h" - -@class MPVASTDurationOffset; - -extern NSString * const MPVASTTrackingEventTypeCreativeView; -extern NSString * const MPVASTTrackingEventTypeStart; -extern NSString * const MPVASTTrackingEventTypeFirstQuartile; -extern NSString * const MPVASTTrackingEventTypeMidpoint; -extern NSString * const MPVASTTrackingEventTypeThirdQuartile; -extern NSString * const MPVASTTrackingEventTypeComplete; -extern NSString * const MPVASTTrackingEventTypeMute; -extern NSString * const MPVASTTrackingEventTypeUnmute; -extern NSString * const MPVASTTrackingEventTypePause; -extern NSString * const MPVASTTrackingEventTypeRewind; -extern NSString * const MPVASTTrackingEventTypeResume; -extern NSString * const MPVASTTrackingEventTypeFullscreen; -extern NSString * const MPVASTTrackingEventTypeExitFullscreen; -extern NSString * const MPVASTTrackingEventTypeExpand; -extern NSString * const MPVASTTrackingEventTypeCollapse; -extern NSString * const MPVASTTrackingEventTypeAcceptInvitationLinear; -extern NSString * const MPVASTTrackingEventTypeCloseLinear; -extern NSString * const MPVASTTrackingEventTypeSkip; -extern NSString * const MPVASTTrackingEventTypeProgress; - -@interface MPVASTTrackingEvent : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *eventType; -@property (nonatomic, copy, readonly) NSURL *URL; -@property (nonatomic, readonly) MPVASTDurationOffset *progressOffset; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m b/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m deleted file mode 100644 index e3abdaddd5..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// MPVASTTrackingEvent.m -// MoPub -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPVASTTrackingEvent.h" -#import "MPVASTDurationOffset.h" - -NSString * const MPVASTTrackingEventTypeCreativeView = @"creativeView"; -NSString * const MPVASTTrackingEventTypeStart = @"start"; -NSString * const MPVASTTrackingEventTypeFirstQuartile = @"firstQuartile"; -NSString * const MPVASTTrackingEventTypeMidpoint = @"midpoint"; -NSString * const MPVASTTrackingEventTypeThirdQuartile = @"thirdQuartile"; -NSString * const MPVASTTrackingEventTypeComplete = @"complete"; -NSString * const MPVASTTrackingEventTypeMute = @"mute"; -NSString * const MPVASTTrackingEventTypeUnmute = @"unmute"; -NSString * const MPVASTTrackingEventTypePause = @"pause"; -NSString * const MPVASTTrackingEventTypeRewind = @"rewind"; -NSString * const MPVASTTrackingEventTypeResume = @"resume"; -NSString * const MPVASTTrackingEventTypeFullscreen = @"fullscreen"; -NSString * const MPVASTTrackingEventTypeExitFullscreen = @"exitFullscreen"; -NSString * const MPVASTTrackingEventTypeExpand = @"expand"; -NSString * const MPVASTTrackingEventTypeCollapse = @"collapse"; -NSString * const MPVASTTrackingEventTypeAcceptInvitationLinear = @"acceptInvitationLinear"; -NSString * const MPVASTTrackingEventTypeCloseLinear = @"closeLinear"; -NSString * const MPVASTTrackingEventTypeSkip = @"skip"; -NSString * const MPVASTTrackingEventTypeProgress = @"progress"; - -@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; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/MOPUBDisplayAgentType.h b/iphone/Maps/3party/MoPubSDK/MOPUBDisplayAgentType.h deleted file mode 100644 index 231107899e..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MOPUBDisplayAgentType.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MOPUBDisplayAgentType.h -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -typedef NS_ENUM(NSInteger, MOPUBDisplayAgentType) { - MOPUBDisplayAgentTypeInApp = 0, - MOPUBDisplayAgentTypeNativeSafari, - MOPUBDisplayAgentTypeSafariViewController -}; diff --git a/iphone/Maps/3party/MoPubSDK/MPAdView.m b/iphone/Maps/3party/MoPubSDK/MPAdView.m deleted file mode 100644 index 361f056a16..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPAdView.m +++ /dev/null @@ -1,186 +0,0 @@ -// -// MPAdView.m -// MoPub -// -// Created by Nafis Jamal on 1/19/11. -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import "MPAdView.h" -#import "MPClosableView.h" -#import "MPBannerAdManager.h" -#import "MPInstanceProvider.h" -#import "MPBannerAdManagerDelegate.h" -#import "MPLogging.h" - -@interface MPAdView () - -@property (nonatomic, strong) MPBannerAdManager *adManager; -@property (nonatomic, weak) UIView *adContentView; -@property (nonatomic, assign) CGSize originalSize; -@property (nonatomic, assign) MPNativeAdOrientation allowedNativeAdOrientation; - -@end - -@implementation MPAdView - -#pragma mark - -#pragma mark Lifecycle - -- (id)initWithAdUnitId:(NSString *)adUnitId size:(CGSize)size -{ - CGRect f = (CGRect){{0, 0}, size}; - if (self = [super initWithFrame:f]) - { - self.backgroundColor = [UIColor clearColor]; - self.clipsToBounds = YES; - self.originalSize = size; - self.allowedNativeAdOrientation = MPNativeAdOrientationAny; - self.adUnitId = (adUnitId) ? adUnitId : DEFAULT_PUB_ID; - self.adManager = [[MPBannerAdManager alloc] initWithDelegate:self]; - self.userInteractionEnabled = NO; - } - return self; -} - -- (void)dealloc -{ - self.adManager.delegate = nil; -} - -#pragma mark - - -- (void)setAdContentView:(UIView *)view -{ - [self.adContentView removeFromSuperview]; - _adContentView = view; - [self addSubview:view]; - - if (view != nil) { - self.userInteractionEnabled = YES; - } -} - -- (CGSize)adContentViewSize -{ - // MPClosableView represents an MRAID ad. - if (!self.adContentView || [self.adContentView isKindOfClass:[MPClosableView class]]) { - return self.originalSize; - } else { - return self.adContentView.bounds.size; - } -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.adManager rotateToOrientation:newOrientation]; -} - -- (void)loadAd -{ - [self.adManager loadAd]; -} - -- (void)refreshAd -{ - [self loadAd]; -} - -- (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 - - -- (MPAdView *)banner -{ - return self; -} - -- (id)bannerDelegate -{ - return self.delegate; -} - -- (CGSize)containerSize -{ - return self.originalSize; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)invalidateContentView -{ - [self setAdContentView:nil]; -} - -- (void)managerDidFailToLoadAd -{ - 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]; - - [self.delegate adViewDidFailToLoadAd:self]; - } -} - -- (void)managerDidLoadAd:(UIView *)ad -{ - [self setAdContentView:ad]; - if ([self.delegate respondsToSelector:@selector(adViewDidLoadAd:)]) { - [self.delegate adViewDidLoadAd:self]; - } -} - -- (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]; - } -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/MPAdvancedBidder.h b/iphone/Maps/3party/MoPubSDK/MPAdvancedBidder.h deleted file mode 100644 index bfbb58c533..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPAdvancedBidder.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPAdvancedBidder.h -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import - -@protocol MPAdvancedBidder -@required -/** - * The name of the network that generated the token. - * @remark This value should correspond to `creative_network_name` in the dashboard. - */ -@property (nonatomic, copy, readonly) NSString * _Nonnull creativeNetworkName; - -/** - * An identity token needed for ORTB requests to the bidder. - */ -@property (nonatomic, copy, readonly) NSString * _Nonnull token; -@end diff --git a/iphone/Maps/3party/MoPubSDK/MPConstants.h b/iphone/Maps/3party/MoPubSDK/MPConstants.h deleted file mode 100644 index a3df7c49e6..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPConstants.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPConstants.h -// MoPub -// -// Copyright 2011 MoPub, Inc. All rights reserved. -// - -#import - -#define MP_DEBUG_MODE 1 - -#define MP_HAS_NATIVE_PACKAGE 1 - -#define DEFAULT_PUB_ID @"agltb3B1Yi1pbmNyDAsSBFNpdGUYkaoMDA" -#define MP_SERVER_VERSION @"8" -#define MP_BUNDLE_IDENTIFIER @"com.mopub.mopub" -#define MP_SDK_VERSION @"5.0.0" - -// Sizing constants. -extern CGSize const MOPUB_BANNER_SIZE; -extern CGSize const MOPUB_MEDIUM_RECT_SIZE; -extern CGSize const MOPUB_LEADERBOARD_SIZE; -extern CGSize const MOPUB_WIDE_SKYSCRAPER_SIZE; - -// Miscellaneous constants. -#define MINIMUM_REFRESH_INTERVAL 10.0 -#define DEFAULT_BANNER_REFRESH_INTERVAL 60 -#define BANNER_TIMEOUT_INTERVAL 10 -#define INTERSTITIAL_TIMEOUT_INTERVAL 30 -#define REWARDED_VIDEO_TIMEOUT_INTERVAL 30 -#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/3party/MoPubSDK/MPConstants.m b/iphone/Maps/3party/MoPubSDK/MPConstants.m deleted file mode 100644 index 075d33cacb..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPConstants.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPConstants.m -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPConstants.h" - -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 }; - -@implementation MPConstants - -+ (NSTimeInterval)adsExpirationInterval { - return MOPUB_ADS_EXPIRATION_INTERVAL; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/MPLogLevel.h b/iphone/Maps/3party/MoPubSDK/MPLogLevel.h deleted file mode 100644 index 3c10d4769a..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPLogLevel.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPLogLevel.h -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import - -/** - * SDK logging level. - * @remark Lower values equate to more detailed logs. - */ -typedef enum { - MPLogLevelAll = 0, - MPLogLevelTrace = 10, - MPLogLevelDebug = 20, - MPLogLevelInfo = 30, - MPLogLevelWarn = 40, - MPLogLevelError = 50, - MPLogLevelFatal = 60, - MPLogLevelOff = 70 -} MPLogLevel; diff --git a/iphone/Maps/3party/MoPubSDK/MPMediationSdkInitializable.h b/iphone/Maps/3party/MoPubSDK/MPMediationSdkInitializable.h deleted file mode 100644 index e5a7fbc4bd..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPMediationSdkInitializable.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPMediationSdkInitializable.h -// MoPubSDK -// -// Copyright © 2018 MoPub. All rights reserved. -// - -#import - -/** - Indicates that the implementer is initializable by the MoPub SDK when - @c initializeSdkWithConfiguration:complete: is called, or whenever the - mediated network needs to be initialized. - */ -@protocol MPMediationSdkInitializable - -/** - Called when the MoPub SDK requires the underlying mediation SDK to be initialized. - - @param parameters A dictionary containing any mediation SDK-specific information - needed for initialization, such as app IDs and placement IDs. - */ -- (void)initializeSdkWithParameters:(NSDictionary * _Nullable)parameters; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/MPMoPubConfiguration.h b/iphone/Maps/3party/MoPubSDK/MPMoPubConfiguration.h deleted file mode 100644 index c44f03b2f8..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPMoPubConfiguration.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// MPMoPubConfiguration.h -// MoPubSampleApp -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import -#import "MPAdvancedBidder.h" -#import "MPMediationSdkInitializable.h" -#import "MPMediationSettingsProtocol.h" -#import "MPRewardedVideo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MPMoPubConfiguration : NSObject -/** - 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; - -/** - Optional list of advanced bidders to initialize. - */ -@property (nonatomic, strong, nullable) NSArray> * advancedBidders; - -/** - Optional global configurations for all ad networks your app supports. - */ -@property (nonatomic, strong, nullable) NSArray> * globalMediationSettings; - -/** - Optional list of mediated network SDKs to pre-initialize from the cache. If the mediated network - SDK has no cache entry, nothing will be done. If set to @c nil or empty array, no network - SDKs will be preinitialized. - - To initialize all existing cached networks use @c MoPub.sharedInstance.allCachedNetworks - */ -@property (nonatomic, strong, nullable) NSArray> * mediatedNetworks; - -/** - 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; - -/** - 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/3party/MoPubSDK/MPMoPubConfiguration.m b/iphone/Maps/3party/MoPubSDK/MPMoPubConfiguration.m deleted file mode 100644 index 3baed2b2dc..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MPMoPubConfiguration.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPMoPubConfiguration.m -// MoPubSampleApp -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "MPMoPubConfiguration.h" - -@implementation MPMoPubConfiguration - -- (instancetype)initWithAdUnitIdForAppInitialization:(NSString * _Nonnull)adUnitId { - if (self = [super init]) { - _adUnitIdForAppInitialization = adUnitId; - _advancedBidders = nil; - _globalMediationSettings = nil; - _mediatedNetworks = nil; - } - - return self; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/MoPub-Bridging-Header.h b/iphone/Maps/3party/MoPubSDK/MoPub-Bridging-Header.h deleted file mode 100644 index 474eec5363..0000000000 --- a/iphone/Maps/3party/MoPubSDK/MoPub-Bridging-Header.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MoPub-Bridging-Header.h -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MoPub.h" - -#import "MPAdConversionTracker.h" -#import "MPAdView.h" -#import "MPBannerCustomEvent.h" -#import "MPBannerCustomEventDelegate.h" -#import "MPConstants.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialCustomEventDelegate.h" - -#if MP_HAS_NATIVE_PACKAGE - -#import "MPNativeAd.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPNativeAdDelegate.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRequest.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" -#import "MPStaticNativeAdRenderer.h" -#import "MOPUBNativeVideoAdRendererSettings.h" -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" -#import "MPCollectionViewAdPlacer.h" -#import "MPTableViewAdPlacer.h" - -#endif - - -#import "MPMediationSettingsProtocol.h" -#import "MPRewardedVideo.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPRewardedVideoError.h" diff --git a/iphone/Maps/3party/MoPubSDK/Mopub.xcodeproj/project.pbxproj b/iphone/Maps/3party/MoPubSDK/Mopub.xcodeproj/project.pbxproj deleted file mode 100644 index 09da916428..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Mopub.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1705 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 45A37AAE20B3395D005FBDBB /* MPBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A378E220B33955005FBDBB /* MPBannerCustomEvent.m */; }; - 45A37AB320B3395D005FBDBB /* MPViewabilityTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A378FB20B33955005FBDBB /* MPViewabilityTracker.m */; }; - 45A37AB420B3395D005FBDBB /* MPWebView+Viewability.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A378FC20B33955005FBDBB /* MPWebView+Viewability.m */; }; - 45A37AB520B3395D005FBDBB /* MPAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A378FF20B33956005FBDBB /* MPAdView.m */; }; - 45A37AB620B3395D005FBDBB /* MPMoPubConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790220B33956005FBDBB /* MPMoPubConfiguration.m */; }; - 45A37AB720B3395D005FBDBB /* MOPUBNativeVideoAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790420B33956005FBDBB /* MOPUBNativeVideoAdRendererSettings.m */; }; - 45A37AB820B3395D005FBDBB /* MOPUBPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790620B33956005FBDBB /* MOPUBPlayerManager.m */; }; - 45A37AB920B3395D005FBDBB /* MOPUBNativeVideoAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790920B33956005FBDBB /* MOPUBNativeVideoAdAdapter.m */; }; - 45A37ABA20B3395D005FBDBB /* MOPUBNativeVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790A20B33956005FBDBB /* MOPUBNativeVideoCustomEvent.m */; }; - 45A37ABB20B3395D005FBDBB /* MOPUBPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790C20B33956005FBDBB /* MOPUBPlayerView.m */; }; - 45A37ABC20B3395D005FBDBB /* MOPUBFullscreenPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790D20B33956005FBDBB /* MOPUBFullscreenPlayerViewController.m */; }; - 45A37ABD20B3395D005FBDBB /* MOPUBNativeVideoImpressionAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790E20B33956005FBDBB /* MOPUBNativeVideoImpressionAgent.m */; }; - 45A37ABE20B3395D005FBDBB /* MOPUBActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3790F20B33956005FBDBB /* MOPUBActivityIndicatorView.m */; }; - 45A37ABF20B3395D005FBDBB /* MOPUBPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3791020B33956005FBDBB /* MOPUBPlayerViewController.m */; }; - 45A37AC020B3395D005FBDBB /* MOPUBReplayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3791320B33956005FBDBB /* MOPUBReplayView.m */; }; - 45A37AC120B3395D005FBDBB /* MOPUBNativeVideoAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3791520B33956005FBDBB /* MOPUBNativeVideoAdConfigValues.m */; }; - 45A37AC220B3395D005FBDBB /* MOPUBAVPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3791820B33956005FBDBB /* MOPUBAVPlayerView.m */; }; - 45A37AC320B3395D005FBDBB /* MOPUBAVPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3791A20B33956005FBDBB /* MOPUBAVPlayer.m */; }; - 45A37AC420B3395D005FBDBB /* MOPUBNativeVideoAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792020B33956005FBDBB /* MOPUBNativeVideoAdRenderer.m */; }; - 45A37AC520B3395D005FBDBB /* MPServerAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792320B33956005FBDBB /* MPServerAdPositioning.m */; }; - 45A37AC620B3395D005FBDBB /* MPNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792420B33956005FBDBB /* MPNativeCustomEvent.m */; }; - 45A37AC720B3395D005FBDBB /* MPNativeAdRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792520B33956005FBDBB /* MPNativeAdRequest.m */; }; - 45A37AC820B3395D005FBDBB /* MPStreamAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792620B33956005FBDBB /* MPStreamAdPlacer.m */; }; - 45A37AC920B3395D005FBDBB /* MPCollectionViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792820B33956005FBDBB /* MPCollectionViewAdPlacer.m */; }; - 45A37ACA20B3395D005FBDBB /* MPNativeAdData.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792B20B33956005FBDBB /* MPNativeAdData.m */; }; - 45A37ACB20B3395D005FBDBB /* MPStaticNativeAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792C20B33956005FBDBB /* MPStaticNativeAdRendererSettings.m */; }; - 45A37ACC20B3395D005FBDBB /* MPNativeAdSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792E20B33956005FBDBB /* MPNativeAdSource.m */; }; - 45A37ACD20B3395D005FBDBB /* MPNativeAdError.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3792F20B33956005FBDBB /* MPNativeAdError.m */; }; - 45A37ACE20B3395D005FBDBB /* MPStreamAdPlacementData.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3793120B33956005FBDBB /* MPStreamAdPlacementData.m */; }; - 45A37ACF20B3395D005FBDBB /* MPNativeAd+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3793520B33956005FBDBB /* MPNativeAd+Internal.m */; }; - 45A37AD020B3395D005FBDBB /* MPNativePositionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3793820B33957005FBDBB /* MPNativePositionSource.m */; }; - 45A37AD120B3395D005FBDBB /* MPMoPubNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3793920B33957005FBDBB /* MPMoPubNativeAdAdapter.m */; }; - 45A37AD220B3395D005FBDBB /* MPNativeAdUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3793F20B33957005FBDBB /* MPNativeAdUtils.m */; }; - 45A37AD320B3395D005FBDBB /* MPDiskLRUCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794220B33957005FBDBB /* MPDiskLRUCache.m */; }; - 45A37AD420B3395D005FBDBB /* MPNativePositionResponseDeserializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794420B33957005FBDBB /* MPNativePositionResponseDeserializer.m */; }; - 45A37AD520B3395D005FBDBB /* MPImageDownloadQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794520B33957005FBDBB /* MPImageDownloadQueue.m */; }; - 45A37AD620B3395D005FBDBB /* MPNativeAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794620B33957005FBDBB /* MPNativeAdConfigValues.m */; }; - 45A37AD720B3395D005FBDBB /* MPCollectionViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794920B33957005FBDBB /* MPCollectionViewAdPlacerCell.m */; }; - 45A37AD820B3395D005FBDBB /* MPTableViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794A20B33957005FBDBB /* MPTableViewAdPlacerCell.m */; }; - 45A37AD920B3395D005FBDBB /* MPNativeAdConfigValues+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794C20B33957005FBDBB /* MPNativeAdConfigValues+Internal.m */; }; - 45A37ADA20B3395D005FBDBB /* MPAdPlacerInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794D20B33957005FBDBB /* MPAdPlacerInvocation.m */; }; - 45A37ADB20B3395D005FBDBB /* MPNativeAdSourceQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794E20B33957005FBDBB /* MPNativeAdSourceQueue.m */; }; - 45A37ADC20B3395D005FBDBB /* MPNativeAdRendererImageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3794F20B33957005FBDBB /* MPNativeAdRendererImageHandler.m */; }; - 45A37ADD20B3395D005FBDBB /* MPNativeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3795020B33957005FBDBB /* MPNativeView.m */; }; - 45A37ADE20B3395D005FBDBB /* MPTableViewCellImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3795120B33957005FBDBB /* MPTableViewCellImpressionTracker.m */; }; - 45A37ADF20B3395D005FBDBB /* MPMoPubNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3795320B33957005FBDBB /* MPMoPubNativeCustomEvent.m */; }; - 45A37AE020B3395D005FBDBB /* MPNativeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3795520B33957005FBDBB /* MPNativeCache.m */; }; - 45A37AE120B3395D005FBDBB /* MPTableViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3795D20B33957005FBDBB /* MPTableViewAdPlacer.m */; }; - 45A37AE220B3395D005FBDBB /* MPNativeAdConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3796620B33957005FBDBB /* MPNativeAdConstants.m */; }; - 45A37AE320B3395D005FBDBB /* MPAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3796820B33957005FBDBB /* MPAdPositioning.m */; }; - 45A37AE420B3395D005FBDBB /* MPNativeAdRendererConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3796920B33957005FBDBB /* MPNativeAdRendererConfiguration.m */; }; - 45A37AE520B3395D005FBDBB /* MPNativeAdRenderingImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3796D20B33957005FBDBB /* MPNativeAdRenderingImageLoader.m */; }; - 45A37AE620B3395D005FBDBB /* MPStaticNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3796F20B33957005FBDBB /* MPStaticNativeAdRenderer.m */; }; - 45A37AE720B3395D005FBDBB /* MPNativeAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3797320B33957005FBDBB /* MPNativeAd.m */; }; - 45A37AE820B3395D005FBDBB /* MPNativeAdRequestTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3797420B33957005FBDBB /* MPNativeAdRequestTargeting.m */; }; - 45A37AE920B3395D005FBDBB /* MPClientAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3797720B33957005FBDBB /* MPClientAdPositioning.m */; }; - 45A37AEA20B3395D005FBDBB /* MPRewardedVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3799120B33957005FBDBB /* MPRewardedVideo.m */; }; - 45A37AEB20B3395D005FBDBB /* MPMoPubRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3799420B33957005FBDBB /* MPMoPubRewardedVideoCustomEvent.m */; }; - 45A37AEC20B3395D005FBDBB /* MPRewardedVideoAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3799520B33957005FBDBB /* MPRewardedVideoAdManager.m */; }; - 45A37AED20B3395D005FBDBB /* MPRewardedVideoAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3799620B33957005FBDBB /* MPRewardedVideoAdapter.m */; }; - 45A37AEE20B3395D005FBDBB /* MPMoPubRewardedPlayableCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3799820B33957005FBDBB /* MPMoPubRewardedPlayableCustomEvent.m */; }; - 45A37AEF20B3395D005FBDBB /* MPRewardedVideoConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A3799E20B33957005FBDBB /* MPRewardedVideoConnection.m */; }; - 45A37AF020B3395D005FBDBB /* MPRewardedVideoReward.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379A120B33957005FBDBB /* MPRewardedVideoReward.m */; }; - 45A37AF120B3395D005FBDBB /* MPRewardedVideoError.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379A220B33957005FBDBB /* MPRewardedVideoError.m */; }; - 45A37AF220B3395D005FBDBB /* MPRewardedVideoCustomEvent+Caching.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379A420B33957005FBDBB /* MPRewardedVideoCustomEvent+Caching.m */; }; - 45A37AF320B3395D005FBDBB /* MPRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379A520B33957005FBDBB /* MPRewardedVideoCustomEvent.m */; }; - 45A37AF420B3395D005FBDBB /* MPInterstitialAdController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379A820B33958005FBDBB /* MPInterstitialAdController.m */; }; - 45A37AF520B3395D005FBDBB /* MPConsentChangedNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379A920B33958005FBDBB /* MPConsentChangedNotification.m */; }; - 45A37AF620B3395D005FBDBB /* MPConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379AC20B33959005FBDBB /* MPConstants.m */; }; - 45A37AF720B3395D005FBDBB /* MPAdConversionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379B220B3395A005FBDBB /* MPAdConversionTracker.m */; }; - 45A37AF820B3395D005FBDBB /* MPInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379B320B3395A005FBDBB /* MPInterstitialCustomEvent.m */; }; - 45A37AF920B3395D005FBDBB /* MoPub.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379B620B3395B005FBDBB /* MoPub.m */; }; - 45A37AFA20B3395D005FBDBB /* MPURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379BB20B3395B005FBDBB /* MPURLRequest.m */; }; - 45A37AFB20B3395D005FBDBB /* MPHTTPNetworkTaskData.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379BC20B3395B005FBDBB /* MPHTTPNetworkTaskData.m */; }; - 45A37AFC20B3395D005FBDBB /* MPBaseInterstitialAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379C020B3395B005FBDBB /* MPBaseInterstitialAdapter.m */; }; - 45A37AFD20B3395D005FBDBB /* MPInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379C220B3395B005FBDBB /* MPInterstitialViewController.m */; }; - 45A37AFE20B3395D005FBDBB /* MPInterstitialAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379C820B3395B005FBDBB /* MPInterstitialAdManager.m */; }; - 45A37AFF20B3395D005FBDBB /* MPInterstitialCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379C920B3395B005FBDBB /* MPInterstitialCustomEventAdapter.m */; }; - 45A37B0020B3395D005FBDBB /* MPVASTTracking.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379CD20B3395B005FBDBB /* MPVASTTracking.m */; }; - 45A37B0120B3395D005FBDBB /* MPHTMLInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379D320B3395B005FBDBB /* MPHTMLInterstitialCustomEvent.m */; }; - 45A37B0220B3395D005FBDBB /* MPHTMLInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379D420B3395B005FBDBB /* MPHTMLInterstitialViewController.m */; }; - 45A37B0320B3395D005FBDBB /* MPAdWebViewAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379D520B3395B005FBDBB /* MPAdWebViewAgent.m */; }; - 45A37B0420B3395D005FBDBB /* MPWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379D620B3395B005FBDBB /* MPWebView.m */; }; - 45A37B0520B3395D005FBDBB /* MPHTMLBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379D720B3395B005FBDBB /* MPHTMLBannerCustomEvent.m */; }; - 45A37B0620B3395D005FBDBB /* MPCoreInstanceProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379D920B3395B005FBDBB /* MPCoreInstanceProvider.m */; }; - 45A37B0720B3395D005FBDBB /* MPBannerAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379DD20B3395B005FBDBB /* MPBannerAdManager.m */; }; - 45A37B0820B3395D005FBDBB /* MPBannerCustomEvent+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379E020B3395B005FBDBB /* MPBannerCustomEvent+Internal.m */; }; - 45A37B0920B3395D005FBDBB /* MPBaseBannerAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379E120B3395B005FBDBB /* MPBaseBannerAdapter.m */; }; - 45A37B0A20B3395D005FBDBB /* MPBannerCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379E220B3395B005FBDBB /* MPBannerCustomEventAdapter.m */; }; - 45A37B0B20B3395D005FBDBB /* MPAdDestinationDisplayAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379E720B3395B005FBDBB /* MPAdDestinationDisplayAgent.m */; }; - 45A37B0C20B3395D005FBDBB /* MPAPIEndpoints.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379E820B3395B005FBDBB /* MPAPIEndpoints.m */; }; - 45A37B0D20B3395D005FBDBB /* MPAdBrowserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379EC20B3395B005FBDBB /* MPAdBrowserController.m */; }; - 45A37B0E20B3395D005FBDBB /* MPAdServerCommunicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379ED20B3395B005FBDBB /* MPAdServerCommunicator.m */; }; - 45A37B0F20B3395D005FBDBB /* MPAdConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379EE20B3395B005FBDBB /* MPAdConfiguration.m */; }; - 45A37B1020B3395D005FBDBB /* MPActivityViewControllerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379F120B3395B005FBDBB /* MPActivityViewControllerHelper.m */; }; - 45A37B1120B3395D005FBDBB /* MPAdServerURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379F320B3395B005FBDBB /* MPAdServerURLBuilder.m */; }; - 45A37B1220B3395D005FBDBB /* MPLastResortDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379F520B3395B005FBDBB /* MPLastResortDelegate.m */; }; - 45A37B1320B3395D005FBDBB /* MPProgressOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379F620B3395B005FBDBB /* MPProgressOverlayView.m */; }; - 45A37B1420B3395D005FBDBB /* MPEnhancedDeeplinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379F820B3395B005FBDBB /* MPEnhancedDeeplinkRequest.m */; }; - 45A37B1520B3395D005FBDBB /* MPURLActionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379F920B3395B005FBDBB /* MPURLActionInfo.m */; }; - 45A37B1620B3395D005FBDBB /* MPClosableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379FD20B3395B005FBDBB /* MPClosableView.m */; }; - 45A37B1720B3395D005FBDBB /* MPCountdownTimerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379FE20B3395B005FBDBB /* MPCountdownTimerView.m */; }; - 45A37B1820B3395D005FBDBB /* MPRealTimeTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A379FF20B3395B005FBDBB /* MPRealTimeTimer.m */; }; - 45A37B1920B3395D005FBDBB /* MPAdAlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0220B3395B005FBDBB /* MPAdAlertManager.m */; }; - 45A37B1A20B3395D005FBDBB /* MPAdAlertGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0320B3395B005FBDBB /* MPAdAlertGestureRecognizer.m */; }; - 45A37B1B20B3395D005FBDBB /* MPURLResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0820B3395B005FBDBB /* MPURLResolver.m */; }; - 45A37B1C20B3395D005FBDBB /* MPVideoConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0A20B3395B005FBDBB /* MPVideoConfig.m */; }; - 45A37B1D20B3395D005FBDBB /* MPAdImpressionTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0B20B3395B005FBDBB /* MPAdImpressionTimer.m */; }; - 45A37B1E20B3395D005FBDBB /* MPActivityViewControllerHelper+TweetShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0D20B3395B005FBDBB /* MPActivityViewControllerHelper+TweetShare.m */; }; - 45A37B1F20B3395D005FBDBB /* MPXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A0E20B3395B005FBDBB /* MPXMLParser.m */; }; - 45A37B2020B3395D005FBDBB /* MPConsentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1420B3395B005FBDBB /* MPConsentManager.m */; }; - 45A37B2120B3395D005FBDBB /* MPInstanceProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1620B3395B005FBDBB /* MPInstanceProvider.m */; }; - 45A37B2220B3395D005FBDBB /* MPMediationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1720B3395B005FBDBB /* MPMediationManager.m */; }; - 45A37B2320B3395D005FBDBB /* MPConsentDialogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1820B3395B005FBDBB /* MPConsentDialogViewController.m */; }; - 45A37B2420B3395D005FBDBB /* MPMRAIDBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1A20B3395B005FBDBB /* MPMRAIDBannerCustomEvent.m */; }; - 45A37B2520B3395D005FBDBB /* MRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1B20B3395B005FBDBB /* MRConstants.m */; }; - 45A37B2620B3395D005FBDBB /* MRBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1D20B3395B005FBDBB /* MRBridge.m */; }; - 45A37B2720B3395D005FBDBB /* MRNativeCommandHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A1E20B3395B005FBDBB /* MRNativeCommandHandler.m */; }; - 45A37B2820B3395D005FBDBB /* MRVideoPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A2020B3395B005FBDBB /* MRVideoPlayerManager.m */; }; - 45A37B2920B3395D005FBDBB /* MPMRAIDInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A2220B3395B005FBDBB /* MPMRAIDInterstitialViewController.m */; }; - 45A37B2A20B3395D005FBDBB /* MRCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A2320B3395B005FBDBB /* MRCommand.m */; }; - 45A37B2B20B3395D005FBDBB /* MPMRAIDInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A2420B3395B005FBDBB /* MPMRAIDInterstitialCustomEvent.m */; }; - 45A37B2C20B3395D005FBDBB /* MRProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A2620B3395B005FBDBB /* MRProperty.m */; }; - 45A37B2D20B3395D005FBDBB /* MRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A2B20B3395B005FBDBB /* MRError.m */; }; - 45A37B2E20B3395D005FBDBB /* MRController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3320B3395C005FBDBB /* MRController.m */; }; - 45A37B2F20B3395D005FBDBB /* MRExpandModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3420B3395C005FBDBB /* MRExpandModalViewController.m */; }; - 45A37B3020B3395D005FBDBB /* MRBundleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3520B3395C005FBDBB /* MRBundleManager.m */; }; - 45A37B3120B3395D005FBDBB /* MPConsentAdServerKeys.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3620B3395C005FBDBB /* MPConsentAdServerKeys.m */; }; - 45A37B3220B3395D005FBDBB /* MPHTTPNetworkSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3720B3395C005FBDBB /* MPHTTPNetworkSession.m */; }; - 45A37B3320B3395D005FBDBB /* MPAdvancedBiddingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3820B3395C005FBDBB /* MPAdvancedBiddingManager.m */; }; - 45A37B3420B3395D005FBDBB /* MPSessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3C20B3395C005FBDBB /* MPSessionTracker.m */; }; - 45A37B3520B3395E005FBDBB /* MPLogProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3D20B3395C005FBDBB /* MPLogProvider.m */; }; - 45A37B3620B3395E005FBDBB /* MPGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A3E20B3395C005FBDBB /* MPGlobal.m */; }; - 45A37B3720B3395E005FBDBB /* MPTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4120B3395C005FBDBB /* MPTimer.m */; }; - 45A37B3820B3395E005FBDBB /* MPLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4220B3395C005FBDBB /* MPLogging.m */; }; - 45A37B3920B3395E005FBDBB /* MOPUBExperimentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4320B3395C005FBDBB /* MOPUBExperimentProvider.m */; }; - 45A37B3A20B3395E005FBDBB /* MPGeolocationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4620B3395C005FBDBB /* MPGeolocationProvider.m */; }; - 45A37B3B20B3395E005FBDBB /* MPReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4720B3395C005FBDBB /* MPReachability.m */; }; - 45A37B3C20B3395E005FBDBB /* MPUserInteractionGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4820B3395C005FBDBB /* MPUserInteractionGestureRecognizer.m */; }; - 45A37B3D20B3395E005FBDBB /* MPAnalyticsTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4920B3395C005FBDBB /* MPAnalyticsTracker.m */; }; - 45A37B3E20B3395E005FBDBB /* MPIdentityProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4A20B3395C005FBDBB /* MPIdentityProvider.m */; }; - 45A37B3F20B3395E005FBDBB /* MPInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4B20B3395C005FBDBB /* MPInternalUtils.m */; }; - 45A37B4020B3395E005FBDBB /* MPError.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A4F20B3395C005FBDBB /* MPError.m */; }; - 45A37B4120B3395E005FBDBB /* MPStoreKitProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A5020B3395C005FBDBB /* MPStoreKitProvider.m */; }; - 45A37B4220B3395E005FBDBB /* NSURL+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A5A20B3395C005FBDBB /* NSURL+MPAdditions.m */; }; - 45A37B4320B3395E005FBDBB /* UIColor+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A5B20B3395C005FBDBB /* UIColor+MPAdditions.m */; }; - 45A37B4420B3395E005FBDBB /* UIButton+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A5E20B3395C005FBDBB /* UIButton+MPAdditions.m */; }; - 45A37B4520B3395E005FBDBB /* NSBundle+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6120B3395C005FBDBB /* NSBundle+MPAdditions.m */; }; - 45A37B4620B3395E005FBDBB /* NSHTTPURLResponse+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6220B3395C005FBDBB /* NSHTTPURLResponse+MPAdditions.m */; }; - 45A37B4720B3395E005FBDBB /* NSString+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6320B3395C005FBDBB /* NSString+MPAdditions.m */; }; - 45A37B4820B3395E005FBDBB /* NSJSONSerialization+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6420B3395C005FBDBB /* NSJSONSerialization+MPAdditions.m */; }; - 45A37B4920B3395E005FBDBB /* UIWebView+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6520B3395C005FBDBB /* UIWebView+MPAdditions.m */; }; - 45A37B4A20B3395E005FBDBB /* UIView+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6820B3395C005FBDBB /* UIView+MPAdditions.m */; }; - 45A37B4B20B3395E005FBDBB /* NSString+MPConsentStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A6C20B3395C005FBDBB /* NSString+MPConsentStatus.m */; }; - 45A37B4C20B3395E005FBDBB /* MPVASTCreative.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A7420B3395C005FBDBB /* MPVASTCreative.m */; }; - 45A37B4D20B3395E005FBDBB /* MPVASTMediaFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A7820B3395C005FBDBB /* MPVASTMediaFile.m */; }; - 45A37B4E20B3395E005FBDBB /* MPVASTAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A7920B3395C005FBDBB /* MPVASTAd.m */; }; - 45A37B4F20B3395E005FBDBB /* MPVASTResource.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A7D20B3395C005FBDBB /* MPVASTResource.m */; }; - 45A37B5020B3395E005FBDBB /* MPVASTModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A7E20B3395C005FBDBB /* MPVASTModel.m */; }; - 45A37B5120B3395E005FBDBB /* MPVASTWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A7F20B3395C005FBDBB /* MPVASTWrapper.m */; }; - 45A37B5220B3395E005FBDBB /* MPVASTLinearAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8020B3395C005FBDBB /* MPVASTLinearAd.m */; }; - 45A37B5320B3395E005FBDBB /* MPVASTCompanionAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8120B3395C005FBDBB /* MPVASTCompanionAd.m */; }; - 45A37B5420B3395E005FBDBB /* MPVASTMacroProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8220B3395C005FBDBB /* MPVASTMacroProcessor.m */; }; - 45A37B5520B3395E005FBDBB /* MPVASTDurationOffset.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8320B3395C005FBDBB /* MPVASTDurationOffset.m */; }; - 45A37B5620B3395E005FBDBB /* MPVASTIndustryIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8520B3395C005FBDBB /* MPVASTIndustryIcon.m */; }; - 45A37B5720B3395E005FBDBB /* MPVASTInline.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8620B3395C005FBDBB /* MPVASTInline.m */; }; - 45A37B5820B3395E005FBDBB /* MPVASTTrackingEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8720B3395C005FBDBB /* MPVASTTrackingEvent.m */; }; - 45A37B5920B3395E005FBDBB /* MPVASTStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8A20B3395C005FBDBB /* MPVASTStringUtilities.m */; }; - 45A37B5A20B3395E005FBDBB /* MPVASTResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8B20B3395C005FBDBB /* MPVASTResponse.m */; }; - 45A37B5B20B3395E005FBDBB /* MPVASTManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8C20B3395C005FBDBB /* MPVASTManager.m */; }; - 45A37B5C20B3395E005FBDBB /* MPConsentChangedReason.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37A8E20B3395C005FBDBB /* MPConsentChangedReason.m */; }; - 45A37B9020B33D63005FBDBB /* FacebookNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37B6B20B33D63005FBDBB /* FacebookNativeCustomEvent.m */; }; - 45A37B9120B33D63005FBDBB /* FacebookInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37B6C20B33D63005FBDBB /* FacebookInterstitialCustomEvent.m */; }; - 45A37B9220B33D63005FBDBB /* FacebookAdvancedBidder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37B6E20B33D63005FBDBB /* FacebookAdvancedBidder.m */; }; - 45A37B9320B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37B7320B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.m */; }; - 45A37B9420B33D63005FBDBB /* FacebookNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37B7420B33D63005FBDBB /* FacebookNativeAdAdapter.m */; }; - 45A37B9520B33D63005FBDBB /* FacebookBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A37B7920B33D63005FBDBB /* FacebookBannerCustomEvent.m */; }; - EBDA7B7720B35B0E0054165B /* FBAudienceNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45A37BA320B33FC1005FBDBB /* FBAudienceNetwork.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 34F4074A1E9E1D3500E57AC0 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 34F4074C1E9E1D3500E57AC0 /* libMopub.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMopub.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F4098E1E9E27DB00E57AC0 /* common-debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-debug.xcconfig"; path = "../../../../xcode/common-debug.xcconfig"; sourceTree = ""; }; - 34F4098F1E9E27DB00E57AC0 /* common-release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-release.xcconfig"; path = "../../../../xcode/common-release.xcconfig"; sourceTree = ""; }; - 45A378E220B33955005FBDBB /* MPBannerCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPBannerCustomEvent.m; sourceTree = ""; }; - 45A378E320B33955005FBDBB /* MPMediationSdkInitializable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMediationSdkInitializable.h; sourceTree = ""; }; - 45A378F820B33955005FBDBB /* MPViewabilityTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPViewabilityTracker.h; sourceTree = ""; }; - 45A378F920B33955005FBDBB /* MPViewabilityOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPViewabilityOption.h; sourceTree = ""; }; - 45A378FA20B33955005FBDBB /* MPWebView+Viewability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPWebView+Viewability.h"; sourceTree = ""; }; - 45A378FB20B33955005FBDBB /* MPViewabilityTracker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPViewabilityTracker.m; sourceTree = ""; }; - 45A378FC20B33955005FBDBB /* MPWebView+Viewability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPWebView+Viewability.m"; sourceTree = ""; }; - 45A378FD20B33955005FBDBB /* MPViewabilityAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPViewabilityAdapter.h; sourceTree = ""; }; - 45A378FE20B33955005FBDBB /* MoPub.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoPub.h; sourceTree = ""; }; - 45A378FF20B33956005FBDBB /* MPAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdView.m; sourceTree = ""; }; - 45A3790020B33956005FBDBB /* MPConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConstants.h; sourceTree = ""; }; - 45A3790120B33956005FBDBB /* MPMediationSettingsProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMediationSettingsProtocol.h; sourceTree = ""; }; - 45A3790220B33956005FBDBB /* MPMoPubConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMoPubConfiguration.m; sourceTree = ""; }; - 45A3790420B33956005FBDBB /* MOPUBNativeVideoAdRendererSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBNativeVideoAdRendererSettings.m; sourceTree = ""; }; - 45A3790620B33956005FBDBB /* MOPUBPlayerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBPlayerManager.m; sourceTree = ""; }; - 45A3790720B33956005FBDBB /* MOPUBNativeVideoAdConfigValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBNativeVideoAdConfigValues.h; sourceTree = ""; }; - 45A3790820B33956005FBDBB /* MOPUBReplayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBReplayView.h; sourceTree = ""; }; - 45A3790920B33956005FBDBB /* MOPUBNativeVideoAdAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBNativeVideoAdAdapter.m; sourceTree = ""; }; - 45A3790A20B33956005FBDBB /* MOPUBNativeVideoCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBNativeVideoCustomEvent.m; sourceTree = ""; }; - 45A3790B20B33956005FBDBB /* MOPUBAVPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBAVPlayerView.h; sourceTree = ""; }; - 45A3790C20B33956005FBDBB /* MOPUBPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBPlayerView.m; sourceTree = ""; }; - 45A3790D20B33956005FBDBB /* MOPUBFullscreenPlayerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBFullscreenPlayerViewController.m; sourceTree = ""; }; - 45A3790E20B33956005FBDBB /* MOPUBNativeVideoImpressionAgent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBNativeVideoImpressionAgent.m; sourceTree = ""; }; - 45A3790F20B33956005FBDBB /* MOPUBActivityIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBActivityIndicatorView.m; sourceTree = ""; }; - 45A3791020B33956005FBDBB /* MOPUBPlayerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBPlayerViewController.m; sourceTree = ""; }; - 45A3791120B33956005FBDBB /* MOPUBAVPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBAVPlayer.h; sourceTree = ""; }; - 45A3791220B33956005FBDBB /* MOPUBPlayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBPlayerManager.h; sourceTree = ""; }; - 45A3791320B33956005FBDBB /* MOPUBReplayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBReplayView.m; sourceTree = ""; }; - 45A3791420B33956005FBDBB /* MOPUBNativeVideoAdAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBNativeVideoAdAdapter.h; sourceTree = ""; }; - 45A3791520B33956005FBDBB /* MOPUBNativeVideoAdConfigValues.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBNativeVideoAdConfigValues.m; sourceTree = ""; }; - 45A3791620B33956005FBDBB /* MOPUBFullscreenPlayerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBFullscreenPlayerViewController.h; sourceTree = ""; }; - 45A3791720B33956005FBDBB /* MOPUBPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBPlayerView.h; sourceTree = ""; }; - 45A3791820B33956005FBDBB /* MOPUBAVPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBAVPlayerView.m; sourceTree = ""; }; - 45A3791920B33956005FBDBB /* MOPUBNativeVideoCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBNativeVideoCustomEvent.h; sourceTree = ""; }; - 45A3791A20B33956005FBDBB /* MOPUBAVPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBAVPlayer.m; sourceTree = ""; }; - 45A3791B20B33956005FBDBB /* MOPUBPlayerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBPlayerViewController.h; sourceTree = ""; }; - 45A3791C20B33956005FBDBB /* MOPUBActivityIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBActivityIndicatorView.h; sourceTree = ""; }; - 45A3791D20B33956005FBDBB /* MOPUBNativeVideoImpressionAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBNativeVideoImpressionAgent.h; sourceTree = ""; }; - 45A3791E20B33956005FBDBB /* MOPUBNativeVideoAdRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBNativeVideoAdRenderer.h; sourceTree = ""; }; - 45A3791F20B33956005FBDBB /* MOPUBNativeVideoAdRendererSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBNativeVideoAdRendererSettings.h; sourceTree = ""; }; - 45A3792020B33956005FBDBB /* MOPUBNativeVideoAdRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBNativeVideoAdRenderer.m; sourceTree = ""; }; - 45A3792120B33956005FBDBB /* MPAdView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdView.h; sourceTree = ""; }; - 45A3792320B33956005FBDBB /* MPServerAdPositioning.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPServerAdPositioning.m; sourceTree = ""; }; - 45A3792420B33956005FBDBB /* MPNativeCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeCustomEvent.m; sourceTree = ""; }; - 45A3792520B33956005FBDBB /* MPNativeAdRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdRequest.m; sourceTree = ""; }; - 45A3792620B33956005FBDBB /* MPStreamAdPlacer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStreamAdPlacer.m; sourceTree = ""; }; - 45A3792720B33956005FBDBB /* MPNativeAdRendererConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRendererConfiguration.h; sourceTree = ""; }; - 45A3792820B33956005FBDBB /* MPCollectionViewAdPlacer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCollectionViewAdPlacer.m; sourceTree = ""; }; - 45A3792920B33956005FBDBB /* MPAdPositioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdPositioning.h; sourceTree = ""; }; - 45A3792A20B33956005FBDBB /* MPNativeAdConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdConstants.h; sourceTree = ""; }; - 45A3792B20B33956005FBDBB /* MPNativeAdData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdData.m; sourceTree = ""; }; - 45A3792C20B33956005FBDBB /* MPStaticNativeAdRendererSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStaticNativeAdRendererSettings.m; sourceTree = ""; }; - 45A3792D20B33956005FBDBB /* MPNativeAdAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdAdapter.h; sourceTree = ""; }; - 45A3792E20B33956005FBDBB /* MPNativeAdSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdSource.m; sourceTree = ""; }; - 45A3792F20B33956005FBDBB /* MPNativeAdError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdError.m; sourceTree = ""; }; - 45A3793020B33956005FBDBB /* MPStaticNativeAdRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStaticNativeAdRenderer.h; sourceTree = ""; }; - 45A3793120B33956005FBDBB /* MPStreamAdPlacementData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStreamAdPlacementData.m; sourceTree = ""; }; - 45A3793220B33956005FBDBB /* MPNativeCustomEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeCustomEventDelegate.h; sourceTree = ""; }; - 45A3793320B33956005FBDBB /* MPNativeAdRenderingImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRenderingImageLoader.h; sourceTree = ""; }; - 45A3793520B33956005FBDBB /* MPNativeAd+Internal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPNativeAd+Internal.m"; sourceTree = ""; }; - 45A3793620B33956005FBDBB /* MPTableViewAdPlacerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTableViewAdPlacerCell.h; sourceTree = ""; }; - 45A3793720B33957005FBDBB /* MPCollectionViewAdPlacerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCollectionViewAdPlacerCell.h; sourceTree = ""; }; - 45A3793820B33957005FBDBB /* MPNativePositionSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativePositionSource.m; sourceTree = ""; }; - 45A3793920B33957005FBDBB /* MPMoPubNativeAdAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMoPubNativeAdAdapter.m; sourceTree = ""; }; - 45A3793A20B33957005FBDBB /* MPNativeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeView.h; sourceTree = ""; }; - 45A3793B20B33957005FBDBB /* MPNativeAdRendererImageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRendererImageHandler.h; sourceTree = ""; }; - 45A3793C20B33957005FBDBB /* MPAdPlacerInvocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdPlacerInvocation.h; sourceTree = ""; }; - 45A3793D20B33957005FBDBB /* MPNativeAdSourceQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdSourceQueue.h; sourceTree = ""; }; - 45A3793E20B33957005FBDBB /* MPNativeAdConfigValues+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPNativeAdConfigValues+Internal.h"; sourceTree = ""; }; - 45A3793F20B33957005FBDBB /* MPNativeAdUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdUtils.m; sourceTree = ""; }; - 45A3794020B33957005FBDBB /* MPNativeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeCache.h; sourceTree = ""; }; - 45A3794120B33957005FBDBB /* MPMoPubNativeCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMoPubNativeCustomEvent.h; sourceTree = ""; }; - 45A3794220B33957005FBDBB /* MPDiskLRUCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDiskLRUCache.m; sourceTree = ""; }; - 45A3794320B33957005FBDBB /* MPTableViewCellImpressionTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTableViewCellImpressionTracker.h; sourceTree = ""; }; - 45A3794420B33957005FBDBB /* MPNativePositionResponseDeserializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativePositionResponseDeserializer.m; sourceTree = ""; }; - 45A3794520B33957005FBDBB /* MPImageDownloadQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPImageDownloadQueue.m; sourceTree = ""; }; - 45A3794620B33957005FBDBB /* MPNativeAdConfigValues.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdConfigValues.m; sourceTree = ""; }; - 45A3794720B33957005FBDBB /* MPMoPubNativeAdAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMoPubNativeAdAdapter.h; sourceTree = ""; }; - 45A3794820B33957005FBDBB /* MPNativePositionSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativePositionSource.h; sourceTree = ""; }; - 45A3794920B33957005FBDBB /* MPCollectionViewAdPlacerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCollectionViewAdPlacerCell.m; sourceTree = ""; }; - 45A3794A20B33957005FBDBB /* MPTableViewAdPlacerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableViewAdPlacerCell.m; sourceTree = ""; }; - 45A3794B20B33957005FBDBB /* MPNativeAd+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPNativeAd+Internal.h"; sourceTree = ""; }; - 45A3794C20B33957005FBDBB /* MPNativeAdConfigValues+Internal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPNativeAdConfigValues+Internal.m"; sourceTree = ""; }; - 45A3794D20B33957005FBDBB /* MPAdPlacerInvocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdPlacerInvocation.m; sourceTree = ""; }; - 45A3794E20B33957005FBDBB /* MPNativeAdSourceQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdSourceQueue.m; sourceTree = ""; }; - 45A3794F20B33957005FBDBB /* MPNativeAdRendererImageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdRendererImageHandler.m; sourceTree = ""; }; - 45A3795020B33957005FBDBB /* MPNativeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeView.m; sourceTree = ""; }; - 45A3795120B33957005FBDBB /* MPTableViewCellImpressionTracker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableViewCellImpressionTracker.m; sourceTree = ""; }; - 45A3795220B33957005FBDBB /* MPDiskLRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDiskLRUCache.h; sourceTree = ""; }; - 45A3795320B33957005FBDBB /* MPMoPubNativeCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMoPubNativeCustomEvent.m; sourceTree = ""; }; - 45A3795420B33957005FBDBB /* MPNativeAdRendererConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRendererConstants.h; sourceTree = ""; }; - 45A3795520B33957005FBDBB /* MPNativeCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeCache.m; sourceTree = ""; }; - 45A3795620B33957005FBDBB /* MPNativeAdUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdUtils.h; sourceTree = ""; }; - 45A3795720B33957005FBDBB /* MPNativeAdConfigValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdConfigValues.h; sourceTree = ""; }; - 45A3795920B33957005FBDBB /* MPNativeAdRequest+MPNativeAdSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPNativeAdRequest+MPNativeAdSource.h"; sourceTree = ""; }; - 45A3795A20B33957005FBDBB /* MPImageDownloadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPImageDownloadQueue.h; sourceTree = ""; }; - 45A3795B20B33957005FBDBB /* MPNativePositionResponseDeserializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativePositionResponseDeserializer.h; sourceTree = ""; }; - 45A3795C20B33957005FBDBB /* MPClientAdPositioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPClientAdPositioning.h; sourceTree = ""; }; - 45A3795D20B33957005FBDBB /* MPTableViewAdPlacer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTableViewAdPlacer.m; sourceTree = ""; }; - 45A3795E20B33957005FBDBB /* MPNativeAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAd.h; sourceTree = ""; }; - 45A3795F20B33957005FBDBB /* MPNativeAdRequestTargeting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRequestTargeting.h; sourceTree = ""; }; - 45A3796020B33957005FBDBB /* MPNativeCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeCustomEvent.h; sourceTree = ""; }; - 45A3796120B33957005FBDBB /* MPNativeAdSourceDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdSourceDelegate.h; sourceTree = ""; }; - 45A3796220B33957005FBDBB /* MPNativeAdRendererSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRendererSettings.h; sourceTree = ""; }; - 45A3796320B33957005FBDBB /* MPNativeAdRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRenderer.h; sourceTree = ""; }; - 45A3796420B33957005FBDBB /* MPServerAdPositioning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPServerAdPositioning.h; sourceTree = ""; }; - 45A3796520B33957005FBDBB /* MPNativeAdData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdData.h; sourceTree = ""; }; - 45A3796620B33957005FBDBB /* MPNativeAdConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdConstants.m; sourceTree = ""; }; - 45A3796720B33957005FBDBB /* MPCollectionViewAdPlacer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCollectionViewAdPlacer.h; sourceTree = ""; }; - 45A3796820B33957005FBDBB /* MPAdPositioning.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdPositioning.m; sourceTree = ""; }; - 45A3796920B33957005FBDBB /* MPNativeAdRendererConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdRendererConfiguration.m; sourceTree = ""; }; - 45A3796A20B33957005FBDBB /* MPStreamAdPlacer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStreamAdPlacer.h; sourceTree = ""; }; - 45A3796B20B33957005FBDBB /* MPNativeAdRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRequest.h; sourceTree = ""; }; - 45A3796C20B33957005FBDBB /* MPNativeAdDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdDelegate.h; sourceTree = ""; }; - 45A3796D20B33957005FBDBB /* MPNativeAdRenderingImageLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdRenderingImageLoader.m; sourceTree = ""; }; - 45A3796E20B33957005FBDBB /* MPStreamAdPlacementData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStreamAdPlacementData.h; sourceTree = ""; }; - 45A3796F20B33957005FBDBB /* MPStaticNativeAdRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStaticNativeAdRenderer.m; sourceTree = ""; }; - 45A3797020B33957005FBDBB /* MPNativeAdSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdSource.h; sourceTree = ""; }; - 45A3797120B33957005FBDBB /* MPNativeAdError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdError.h; sourceTree = ""; }; - 45A3797220B33957005FBDBB /* MPStaticNativeAdRendererSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStaticNativeAdRendererSettings.h; sourceTree = ""; }; - 45A3797320B33957005FBDBB /* MPNativeAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAd.m; sourceTree = ""; }; - 45A3797420B33957005FBDBB /* MPNativeAdRequestTargeting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNativeAdRequestTargeting.m; sourceTree = ""; }; - 45A3797520B33957005FBDBB /* MPNativeAdRendering.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNativeAdRendering.h; sourceTree = ""; }; - 45A3797620B33957005FBDBB /* MPTableViewAdPlacer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTableViewAdPlacer.h; sourceTree = ""; }; - 45A3797720B33957005FBDBB /* MPClientAdPositioning.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPClientAdPositioning.m; sourceTree = ""; }; - 45A3797820B33957005FBDBB /* MPAdConversionTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdConversionTracker.h; sourceTree = ""; }; - 45A3797A20B33957005FBDBB /* MPUnmutedBtn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MPUnmutedBtn.png; sourceTree = ""; }; - 45A3797B20B33957005FBDBB /* MRAID.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MRAID.bundle; sourceTree = ""; }; - 45A3797C20B33957005FBDBB /* MPDAAIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MPDAAIcon.png; sourceTree = ""; }; - 45A3797D20B33957005FBDBB /* MPUnmutedBtn@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPUnmutedBtn@3x.png"; sourceTree = ""; }; - 45A3797E20B33957005FBDBB /* MPPlayBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPPlayBtn@2x.png"; sourceTree = ""; }; - 45A3797F20B33957005FBDBB /* MPCloseBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPCloseBtn@2x.png"; sourceTree = ""; }; - 45A3798020B33957005FBDBB /* MPCloseBtn@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPCloseBtn@3x.png"; sourceTree = ""; }; - 45A3798120B33957005FBDBB /* MPCloseBtn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MPCloseBtn.png; sourceTree = ""; }; - 45A3798220B33957005FBDBB /* MPPlayBtn@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPPlayBtn@3x.png"; sourceTree = ""; }; - 45A3798320B33957005FBDBB /* MPUnmutedBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPUnmutedBtn@2x.png"; sourceTree = ""; }; - 45A3798420B33957005FBDBB /* MPCountdownTimer.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = MPCountdownTimer.html; sourceTree = ""; }; - 45A3798520B33957005FBDBB /* MPCloseButtonX@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPCloseButtonX@2x.png"; sourceTree = ""; }; - 45A3798620B33957005FBDBB /* MPCloseButtonX@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPCloseButtonX@3x.png"; sourceTree = ""; }; - 45A3798720B33957005FBDBB /* MPCloseButtonX.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MPCloseButtonX.png; sourceTree = ""; }; - 45A3798820B33957005FBDBB /* MPDAAIcon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPDAAIcon@3x.png"; sourceTree = ""; }; - 45A3798920B33957005FBDBB /* MPMutedBtn@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPMutedBtn@3x.png"; sourceTree = ""; }; - 45A3798A20B33957005FBDBB /* MPPlayBtn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MPPlayBtn.png; sourceTree = ""; }; - 45A3798B20B33957005FBDBB /* MPMutedBtn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MPMutedBtn.png; sourceTree = ""; }; - 45A3798C20B33957005FBDBB /* MPMutedBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPMutedBtn@2x.png"; sourceTree = ""; }; - 45A3798D20B33957005FBDBB /* MPDAAIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MPDAAIcon@2x.png"; sourceTree = ""; }; - 45A3798F20B33957005FBDBB /* MPRewardedVideoReward.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideoReward.h; sourceTree = ""; }; - 45A3799020B33957005FBDBB /* MPRewardedVideoError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideoError.h; sourceTree = ""; }; - 45A3799120B33957005FBDBB /* MPRewardedVideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideo.m; sourceTree = ""; }; - 45A3799220B33957005FBDBB /* MPRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideoCustomEvent.h; sourceTree = ""; }; - 45A3799420B33957005FBDBB /* MPMoPubRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMoPubRewardedVideoCustomEvent.m; sourceTree = ""; }; - 45A3799520B33957005FBDBB /* MPRewardedVideoAdManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideoAdManager.m; sourceTree = ""; }; - 45A3799620B33957005FBDBB /* MPRewardedVideoAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideoAdapter.m; sourceTree = ""; }; - 45A3799720B33957005FBDBB /* MPRewardedVideo+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPRewardedVideo+Internal.h"; sourceTree = ""; }; - 45A3799820B33957005FBDBB /* MPMoPubRewardedPlayableCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMoPubRewardedPlayableCustomEvent.m; sourceTree = ""; }; - 45A3799920B33957005FBDBB /* MPRewardedVideoConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideoConnection.h; sourceTree = ""; }; - 45A3799A20B33957005FBDBB /* MPRewardedVideoAdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideoAdManager.h; sourceTree = ""; }; - 45A3799B20B33957005FBDBB /* MPMoPubRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMoPubRewardedVideoCustomEvent.h; sourceTree = ""; }; - 45A3799C20B33957005FBDBB /* MPRewardedVideoAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideoAdapter.h; sourceTree = ""; }; - 45A3799D20B33957005FBDBB /* MPPrivateRewardedVideoCustomEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPrivateRewardedVideoCustomEventDelegate.h; sourceTree = ""; }; - 45A3799E20B33957005FBDBB /* MPRewardedVideoConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideoConnection.m; sourceTree = ""; }; - 45A3799F20B33957005FBDBB /* MPMoPubRewardedPlayableCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMoPubRewardedPlayableCustomEvent.h; sourceTree = ""; }; - 45A379A020B33957005FBDBB /* MPRewardedVideoCustomEvent+Caching.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPRewardedVideoCustomEvent+Caching.h"; sourceTree = ""; }; - 45A379A120B33957005FBDBB /* MPRewardedVideoReward.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideoReward.m; sourceTree = ""; }; - 45A379A220B33957005FBDBB /* MPRewardedVideoError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideoError.m; sourceTree = ""; }; - 45A379A320B33957005FBDBB /* MPRewardedVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRewardedVideo.h; sourceTree = ""; }; - 45A379A420B33957005FBDBB /* MPRewardedVideoCustomEvent+Caching.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPRewardedVideoCustomEvent+Caching.m"; sourceTree = ""; }; - 45A379A520B33957005FBDBB /* MPRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRewardedVideoCustomEvent.m; sourceTree = ""; }; - 45A379A620B33957005FBDBB /* MPInterstitialAdController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialAdController.h; sourceTree = ""; }; - 45A379A720B33958005FBDBB /* MPLogLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLogLevel.h; sourceTree = ""; }; - 45A379A820B33958005FBDBB /* MPInterstitialAdController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInterstitialAdController.m; sourceTree = ""; }; - 45A379A920B33958005FBDBB /* MPConsentChangedNotification.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConsentChangedNotification.m; sourceTree = ""; }; - 45A379AA20B33958005FBDBB /* MPBool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBool.h; sourceTree = ""; }; - 45A379AB20B33958005FBDBB /* MOPUBDisplayAgentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBDisplayAgentType.h; sourceTree = ""; }; - 45A379AC20B33959005FBDBB /* MPConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConstants.m; sourceTree = ""; }; - 45A379AD20B33959005FBDBB /* MPBannerCustomEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBannerCustomEventDelegate.h; sourceTree = ""; }; - 45A379AE20B33959005FBDBB /* MPConsentChangedReason.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentChangedReason.h; sourceTree = ""; }; - 45A379AF20B33959005FBDBB /* MPBannerCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBannerCustomEvent.h; sourceTree = ""; }; - 45A379B020B33959005FBDBB /* MPAdvancedBidder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdvancedBidder.h; sourceTree = ""; }; - 45A379B120B3395A005FBDBB /* MoPub-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MoPub-Bridging-Header.h"; sourceTree = ""; }; - 45A379B220B3395A005FBDBB /* MPAdConversionTracker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdConversionTracker.m; sourceTree = ""; }; - 45A379B320B3395A005FBDBB /* MPInterstitialCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInterstitialCustomEvent.m; sourceTree = ""; }; - 45A379B420B3395A005FBDBB /* MPInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialCustomEventDelegate.h; sourceTree = ""; }; - 45A379B520B3395A005FBDBB /* MPInterstitialCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialCustomEvent.h; sourceTree = ""; }; - 45A379B620B3395B005FBDBB /* MoPub.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MoPub.m; sourceTree = ""; }; - 45A379B720B3395B005FBDBB /* MPConsentChangedNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentChangedNotification.h; sourceTree = ""; }; - 45A379B820B3395B005FBDBB /* MPConsentStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentStatus.h; sourceTree = ""; }; - 45A379BA20B3395B005FBDBB /* MPConsentManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentManager.h; sourceTree = ""; }; - 45A379BB20B3395B005FBDBB /* MPURLRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPURLRequest.m; sourceTree = ""; }; - 45A379BC20B3395B005FBDBB /* MPHTTPNetworkTaskData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHTTPNetworkTaskData.m; sourceTree = ""; }; - 45A379BD20B3395B005FBDBB /* MPHTTPNetworkSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHTTPNetworkSession.h; sourceTree = ""; }; - 45A379BE20B3395B005FBDBB /* MPConsentAdServerKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentAdServerKeys.h; sourceTree = ""; }; - 45A379C020B3395B005FBDBB /* MPBaseInterstitialAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPBaseInterstitialAdapter.m; sourceTree = ""; }; - 45A379C120B3395B005FBDBB /* MPPrivateInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPrivateInterstitialCustomEventDelegate.h; sourceTree = ""; }; - 45A379C220B3395B005FBDBB /* MPInterstitialViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInterstitialViewController.m; sourceTree = ""; }; - 45A379C320B3395B005FBDBB /* MPInterstitialAdManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialAdManagerDelegate.h; sourceTree = ""; }; - 45A379C420B3395B005FBDBB /* MPInterstitialCustomEventAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialCustomEventAdapter.h; sourceTree = ""; }; - 45A379C520B3395B005FBDBB /* MPInterstitialAdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialAdManager.h; sourceTree = ""; }; - 45A379C620B3395B005FBDBB /* MPBaseInterstitialAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBaseInterstitialAdapter.h; sourceTree = ""; }; - 45A379C720B3395B005FBDBB /* MPInterstitialViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInterstitialViewController.h; sourceTree = ""; }; - 45A379C820B3395B005FBDBB /* MPInterstitialAdManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInterstitialAdManager.m; sourceTree = ""; }; - 45A379C920B3395B005FBDBB /* MPInterstitialCustomEventAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInterstitialCustomEventAdapter.m; sourceTree = ""; }; - 45A379CA20B3395B005FBDBB /* MPConsentDialogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentDialogViewController.h; sourceTree = ""; }; - 45A379CB20B3395B005FBDBB /* MPMediationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMediationManager.h; sourceTree = ""; }; - 45A379CC20B3395B005FBDBB /* MPInstanceProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInstanceProvider.h; sourceTree = ""; }; - 45A379CD20B3395B005FBDBB /* MPVASTTracking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTTracking.m; sourceTree = ""; }; - 45A379CF20B3395B005FBDBB /* MPAdWebViewAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdWebViewAgent.h; sourceTree = ""; }; - 45A379D020B3395B005FBDBB /* MPHTMLInterstitialViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHTMLInterstitialViewController.h; sourceTree = ""; }; - 45A379D120B3395B005FBDBB /* MPHTMLBannerCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHTMLBannerCustomEvent.h; sourceTree = ""; }; - 45A379D220B3395B005FBDBB /* MPWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPWebView.h; sourceTree = ""; }; - 45A379D320B3395B005FBDBB /* MPHTMLInterstitialCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHTMLInterstitialCustomEvent.m; sourceTree = ""; }; - 45A379D420B3395B005FBDBB /* MPHTMLInterstitialViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHTMLInterstitialViewController.m; sourceTree = ""; }; - 45A379D520B3395B005FBDBB /* MPAdWebViewAgent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdWebViewAgent.m; sourceTree = ""; }; - 45A379D620B3395B005FBDBB /* MPWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPWebView.m; sourceTree = ""; }; - 45A379D720B3395B005FBDBB /* MPHTMLBannerCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHTMLBannerCustomEvent.m; sourceTree = ""; }; - 45A379D820B3395B005FBDBB /* MPHTMLInterstitialCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHTMLInterstitialCustomEvent.h; sourceTree = ""; }; - 45A379D920B3395B005FBDBB /* MPCoreInstanceProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCoreInstanceProvider.m; sourceTree = ""; }; - 45A379DA20B3395B005FBDBB /* MPAdvancedBiddingManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdvancedBiddingManager.h; sourceTree = ""; }; - 45A379DC20B3395B005FBDBB /* MPPrivateBannerCustomEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPrivateBannerCustomEventDelegate.h; sourceTree = ""; }; - 45A379DD20B3395B005FBDBB /* MPBannerAdManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPBannerAdManager.m; sourceTree = ""; }; - 45A379DE20B3395B005FBDBB /* MPBannerCustomEventAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBannerCustomEventAdapter.h; sourceTree = ""; }; - 45A379DF20B3395B005FBDBB /* MPBannerAdManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBannerAdManagerDelegate.h; sourceTree = ""; }; - 45A379E020B3395B005FBDBB /* MPBannerCustomEvent+Internal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPBannerCustomEvent+Internal.m"; sourceTree = ""; }; - 45A379E120B3395B005FBDBB /* MPBaseBannerAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPBaseBannerAdapter.m; sourceTree = ""; }; - 45A379E220B3395B005FBDBB /* MPBannerCustomEventAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPBannerCustomEventAdapter.m; sourceTree = ""; }; - 45A379E320B3395B005FBDBB /* MPBannerAdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBannerAdManager.h; sourceTree = ""; }; - 45A379E420B3395B005FBDBB /* MPBaseBannerAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPBaseBannerAdapter.h; sourceTree = ""; }; - 45A379E520B3395B005FBDBB /* MPBannerCustomEvent+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPBannerCustomEvent+Internal.h"; sourceTree = ""; }; - 45A379E720B3395B005FBDBB /* MPAdDestinationDisplayAgent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdDestinationDisplayAgent.m; sourceTree = ""; }; - 45A379E820B3395B005FBDBB /* MPAPIEndpoints.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAPIEndpoints.m; sourceTree = ""; }; - 45A379E920B3395B005FBDBB /* MPRealTimeTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRealTimeTimer.h; sourceTree = ""; }; - 45A379EA20B3395B005FBDBB /* MPCountdownTimerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCountdownTimerView.h; sourceTree = ""; }; - 45A379EB20B3395B005FBDBB /* MPClosableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPClosableView.h; sourceTree = ""; }; - 45A379EC20B3395B005FBDBB /* MPAdBrowserController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdBrowserController.m; sourceTree = ""; }; - 45A379ED20B3395B005FBDBB /* MPAdServerCommunicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdServerCommunicator.m; sourceTree = ""; }; - 45A379EE20B3395B005FBDBB /* MPAdConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdConfiguration.m; sourceTree = ""; }; - 45A379EF20B3395B005FBDBB /* MPVideoConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVideoConfig.h; sourceTree = ""; }; - 45A379F020B3395B005FBDBB /* MPURLResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPURLResolver.h; sourceTree = ""; }; - 45A379F120B3395B005FBDBB /* MPActivityViewControllerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPActivityViewControllerHelper.m; sourceTree = ""; }; - 45A379F220B3395B005FBDBB /* MPActivityViewControllerHelper+TweetShare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPActivityViewControllerHelper+TweetShare.h"; sourceTree = ""; }; - 45A379F320B3395B005FBDBB /* MPAdServerURLBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdServerURLBuilder.m; sourceTree = ""; }; - 45A379F420B3395B005FBDBB /* MPAdImpressionTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdImpressionTimer.h; sourceTree = ""; }; - 45A379F520B3395B005FBDBB /* MPLastResortDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLastResortDelegate.m; sourceTree = ""; }; - 45A379F620B3395B005FBDBB /* MPProgressOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPProgressOverlayView.m; sourceTree = ""; }; - 45A379F720B3395B005FBDBB /* MPAdBrowserController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPAdBrowserController.xib; sourceTree = ""; }; - 45A379F820B3395B005FBDBB /* MPEnhancedDeeplinkRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEnhancedDeeplinkRequest.m; sourceTree = ""; }; - 45A379F920B3395B005FBDBB /* MPURLActionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPURLActionInfo.m; sourceTree = ""; }; - 45A379FA20B3395B005FBDBB /* MPXMLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPXMLParser.h; sourceTree = ""; }; - 45A379FB20B3395B005FBDBB /* MPAdServerCommunicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdServerCommunicator.h; sourceTree = ""; }; - 45A379FC20B3395B005FBDBB /* MPAdBrowserController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdBrowserController.h; sourceTree = ""; }; - 45A379FD20B3395B005FBDBB /* MPClosableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPClosableView.m; sourceTree = ""; }; - 45A379FE20B3395B005FBDBB /* MPCountdownTimerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPCountdownTimerView.m; sourceTree = ""; }; - 45A379FF20B3395B005FBDBB /* MPRealTimeTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRealTimeTimer.m; sourceTree = ""; }; - 45A37A0120B3395B005FBDBB /* MPAdAlertGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdAlertGestureRecognizer.h; sourceTree = ""; }; - 45A37A0220B3395B005FBDBB /* MPAdAlertManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdAlertManager.m; sourceTree = ""; }; - 45A37A0320B3395B005FBDBB /* MPAdAlertGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdAlertGestureRecognizer.m; sourceTree = ""; }; - 45A37A0420B3395B005FBDBB /* MPAdAlertManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdAlertManager.h; sourceTree = ""; }; - 45A37A0520B3395B005FBDBB /* MPAdDestinationDisplayAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdDestinationDisplayAgent.h; sourceTree = ""; }; - 45A37A0620B3395B005FBDBB /* MPAPIEndpoints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAPIEndpoints.h; sourceTree = ""; }; - 45A37A0720B3395B005FBDBB /* MPActivityViewControllerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPActivityViewControllerHelper.h; sourceTree = ""; }; - 45A37A0820B3395B005FBDBB /* MPURLResolver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPURLResolver.m; sourceTree = ""; }; - 45A37A0920B3395B005FBDBB /* MPAdConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdConfiguration.h; sourceTree = ""; }; - 45A37A0A20B3395B005FBDBB /* MPVideoConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVideoConfig.m; sourceTree = ""; }; - 45A37A0B20B3395B005FBDBB /* MPAdImpressionTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdImpressionTimer.m; sourceTree = ""; }; - 45A37A0C20B3395B005FBDBB /* MPAdServerURLBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAdServerURLBuilder.h; sourceTree = ""; }; - 45A37A0D20B3395B005FBDBB /* MPActivityViewControllerHelper+TweetShare.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPActivityViewControllerHelper+TweetShare.m"; sourceTree = ""; }; - 45A37A0E20B3395B005FBDBB /* MPXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPXMLParser.m; sourceTree = ""; }; - 45A37A0F20B3395B005FBDBB /* MPEnhancedDeeplinkRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEnhancedDeeplinkRequest.h; sourceTree = ""; }; - 45A37A1020B3395B005FBDBB /* MPURLActionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPURLActionInfo.h; sourceTree = ""; }; - 45A37A1120B3395B005FBDBB /* MPProgressOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPProgressOverlayView.h; sourceTree = ""; }; - 45A37A1220B3395B005FBDBB /* MPLastResortDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLastResortDelegate.h; sourceTree = ""; }; - 45A37A1320B3395B005FBDBB /* MPURLRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPURLRequest.h; sourceTree = ""; }; - 45A37A1420B3395B005FBDBB /* MPConsentManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConsentManager.m; sourceTree = ""; }; - 45A37A1520B3395B005FBDBB /* MPHTTPNetworkTaskData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHTTPNetworkTaskData.h; sourceTree = ""; }; - 45A37A1620B3395B005FBDBB /* MPInstanceProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInstanceProvider.m; sourceTree = ""; }; - 45A37A1720B3395B005FBDBB /* MPMediationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMediationManager.m; sourceTree = ""; }; - 45A37A1820B3395B005FBDBB /* MPConsentDialogViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConsentDialogViewController.m; sourceTree = ""; }; - 45A37A1A20B3395B005FBDBB /* MPMRAIDBannerCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMRAIDBannerCustomEvent.m; sourceTree = ""; }; - 45A37A1B20B3395B005FBDBB /* MRConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRConstants.m; sourceTree = ""; }; - 45A37A1C20B3395B005FBDBB /* MRError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRError.h; sourceTree = ""; }; - 45A37A1D20B3395B005FBDBB /* MRBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRBridge.m; sourceTree = ""; }; - 45A37A1E20B3395B005FBDBB /* MRNativeCommandHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRNativeCommandHandler.m; sourceTree = ""; }; - 45A37A1F20B3395B005FBDBB /* MPForceableOrientationProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPForceableOrientationProtocol.h; sourceTree = ""; }; - 45A37A2020B3395B005FBDBB /* MRVideoPlayerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRVideoPlayerManager.m; sourceTree = ""; }; - 45A37A2120B3395B005FBDBB /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 45A37A2220B3395B005FBDBB /* MPMRAIDInterstitialViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMRAIDInterstitialViewController.m; sourceTree = ""; }; - 45A37A2320B3395B005FBDBB /* MRCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRCommand.m; sourceTree = ""; }; - 45A37A2420B3395B005FBDBB /* MPMRAIDInterstitialCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMRAIDInterstitialCustomEvent.m; sourceTree = ""; }; - 45A37A2520B3395B005FBDBB /* MRController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRController.h; sourceTree = ""; }; - 45A37A2620B3395B005FBDBB /* MRProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRProperty.m; sourceTree = ""; }; - 45A37A2720B3395B005FBDBB /* MRBundleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRBundleManager.h; sourceTree = ""; }; - 45A37A2820B3395B005FBDBB /* MRExpandModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRExpandModalViewController.h; sourceTree = ""; }; - 45A37A2920B3395B005FBDBB /* MRNativeCommandHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRNativeCommandHandler.h; sourceTree = ""; }; - 45A37A2A20B3395B005FBDBB /* MRBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRBridge.h; sourceTree = ""; }; - 45A37A2B20B3395B005FBDBB /* MRError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRError.m; sourceTree = ""; }; - 45A37A2C20B3395B005FBDBB /* MRConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRConstants.h; sourceTree = ""; }; - 45A37A2D20B3395B005FBDBB /* MPMRAIDBannerCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMRAIDBannerCustomEvent.h; sourceTree = ""; }; - 45A37A2E20B3395C005FBDBB /* MRCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRCommand.h; sourceTree = ""; }; - 45A37A2F20B3395C005FBDBB /* MPMRAIDInterstitialCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMRAIDInterstitialCustomEvent.h; sourceTree = ""; }; - 45A37A3020B3395C005FBDBB /* MPMRAIDInterstitialViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMRAIDInterstitialViewController.h; sourceTree = ""; }; - 45A37A3120B3395C005FBDBB /* MRVideoPlayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRVideoPlayerManager.h; sourceTree = ""; }; - 45A37A3220B3395C005FBDBB /* MRProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MRProperty.h; sourceTree = ""; }; - 45A37A3320B3395C005FBDBB /* MRController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRController.m; sourceTree = ""; }; - 45A37A3420B3395C005FBDBB /* MRExpandModalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRExpandModalViewController.m; sourceTree = ""; }; - 45A37A3520B3395C005FBDBB /* MRBundleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRBundleManager.m; sourceTree = ""; }; - 45A37A3620B3395C005FBDBB /* MPConsentAdServerKeys.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConsentAdServerKeys.m; sourceTree = ""; }; - 45A37A3720B3395C005FBDBB /* MPHTTPNetworkSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHTTPNetworkSession.m; sourceTree = ""; }; - 45A37A3820B3395C005FBDBB /* MPAdvancedBiddingManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAdvancedBiddingManager.m; sourceTree = ""; }; - 45A37A3920B3395C005FBDBB /* MPCoreInstanceProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPCoreInstanceProvider.h; sourceTree = ""; }; - 45A37A3A20B3395C005FBDBB /* MPVASTTracking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTTracking.h; sourceTree = ""; }; - 45A37A3C20B3395C005FBDBB /* MPSessionTracker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPSessionTracker.m; sourceTree = ""; }; - 45A37A3D20B3395C005FBDBB /* MPLogProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLogProvider.m; sourceTree = ""; }; - 45A37A3E20B3395C005FBDBB /* MPGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGlobal.m; sourceTree = ""; }; - 45A37A3F20B3395C005FBDBB /* MPInternalUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPInternalUtils.h; sourceTree = ""; }; - 45A37A4020B3395C005FBDBB /* MPIdentityProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPIdentityProvider.h; sourceTree = ""; }; - 45A37A4120B3395C005FBDBB /* MPTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTimer.m; sourceTree = ""; }; - 45A37A4220B3395C005FBDBB /* MPLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPLogging.m; sourceTree = ""; }; - 45A37A4320B3395C005FBDBB /* MOPUBExperimentProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MOPUBExperimentProvider.m; sourceTree = ""; }; - 45A37A4420B3395C005FBDBB /* MPStoreKitProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPStoreKitProvider.h; sourceTree = ""; }; - 45A37A4520B3395C005FBDBB /* MPError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPError.h; sourceTree = ""; }; - 45A37A4620B3395C005FBDBB /* MPGeolocationProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGeolocationProvider.m; sourceTree = ""; }; - 45A37A4720B3395C005FBDBB /* MPReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPReachability.m; sourceTree = ""; }; - 45A37A4820B3395C005FBDBB /* MPUserInteractionGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUserInteractionGestureRecognizer.m; sourceTree = ""; }; - 45A37A4920B3395C005FBDBB /* MPAnalyticsTracker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAnalyticsTracker.m; sourceTree = ""; }; - 45A37A4A20B3395C005FBDBB /* MPIdentityProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPIdentityProvider.m; sourceTree = ""; }; - 45A37A4B20B3395C005FBDBB /* MPInternalUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPInternalUtils.m; sourceTree = ""; }; - 45A37A4C20B3395C005FBDBB /* MPSessionTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPSessionTracker.h; sourceTree = ""; }; - 45A37A4D20B3395C005FBDBB /* MPGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGlobal.h; sourceTree = ""; }; - 45A37A4E20B3395C005FBDBB /* MPLogProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLogProvider.h; sourceTree = ""; }; - 45A37A4F20B3395C005FBDBB /* MPError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPError.m; sourceTree = ""; }; - 45A37A5020B3395C005FBDBB /* MPStoreKitProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStoreKitProvider.m; sourceTree = ""; }; - 45A37A5120B3395C005FBDBB /* MOPUBExperimentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MOPUBExperimentProvider.h; sourceTree = ""; }; - 45A37A5220B3395C005FBDBB /* MPLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPLogging.h; sourceTree = ""; }; - 45A37A5320B3395C005FBDBB /* MPTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTimer.h; sourceTree = ""; }; - 45A37A5420B3395C005FBDBB /* MPAnalyticsTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAnalyticsTracker.h; sourceTree = ""; }; - 45A37A5520B3395C005FBDBB /* MPUserInteractionGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPUserInteractionGestureRecognizer.h; sourceTree = ""; }; - 45A37A5620B3395C005FBDBB /* MPReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPReachability.h; sourceTree = ""; }; - 45A37A5720B3395C005FBDBB /* MPGeolocationProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGeolocationProvider.h; sourceTree = ""; }; - 45A37A5920B3395C005FBDBB /* NSString+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MPAdditions.h"; sourceTree = ""; }; - 45A37A5A20B3395C005FBDBB /* NSURL+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+MPAdditions.m"; sourceTree = ""; }; - 45A37A5B20B3395C005FBDBB /* UIColor+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+MPAdditions.m"; sourceTree = ""; }; - 45A37A5C20B3395C005FBDBB /* UIWebView+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+MPAdditions.h"; sourceTree = ""; }; - 45A37A5D20B3395C005FBDBB /* NSJSONSerialization+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+MPAdditions.h"; sourceTree = ""; }; - 45A37A5E20B3395C005FBDBB /* UIButton+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+MPAdditions.m"; sourceTree = ""; }; - 45A37A5F20B3395C005FBDBB /* UIView+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MPAdditions.h"; sourceTree = ""; }; - 45A37A6020B3395C005FBDBB /* NSString+MPConsentStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MPConsentStatus.h"; sourceTree = ""; }; - 45A37A6120B3395C005FBDBB /* NSBundle+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MPAdditions.m"; sourceTree = ""; }; - 45A37A6220B3395C005FBDBB /* NSHTTPURLResponse+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSHTTPURLResponse+MPAdditions.m"; sourceTree = ""; }; - 45A37A6320B3395C005FBDBB /* NSString+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MPAdditions.m"; sourceTree = ""; }; - 45A37A6420B3395C005FBDBB /* NSJSONSerialization+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+MPAdditions.m"; sourceTree = ""; }; - 45A37A6520B3395C005FBDBB /* UIWebView+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+MPAdditions.m"; sourceTree = ""; }; - 45A37A6620B3395C005FBDBB /* UIColor+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+MPAdditions.h"; sourceTree = ""; }; - 45A37A6720B3395C005FBDBB /* NSURL+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+MPAdditions.h"; sourceTree = ""; }; - 45A37A6820B3395C005FBDBB /* UIView+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MPAdditions.m"; sourceTree = ""; }; - 45A37A6920B3395C005FBDBB /* UIButton+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+MPAdditions.h"; sourceTree = ""; }; - 45A37A6A20B3395C005FBDBB /* NSHTTPURLResponse+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSHTTPURLResponse+MPAdditions.h"; sourceTree = ""; }; - 45A37A6B20B3395C005FBDBB /* NSBundle+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MPAdditions.h"; sourceTree = ""; }; - 45A37A6C20B3395C005FBDBB /* NSString+MPConsentStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MPConsentStatus.m"; sourceTree = ""; }; - 45A37A6E20B3395C005FBDBB /* MPVASTDurationOffset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTDurationOffset.h; sourceTree = ""; }; - 45A37A6F20B3395C005FBDBB /* MPVASTCompanionAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTCompanionAd.h; sourceTree = ""; }; - 45A37A7020B3395C005FBDBB /* MPVASTMacroProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTMacroProcessor.h; sourceTree = ""; }; - 45A37A7120B3395C005FBDBB /* MPVASTLinearAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTLinearAd.h; sourceTree = ""; }; - 45A37A7220B3395C005FBDBB /* MPVASTWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTWrapper.h; sourceTree = ""; }; - 45A37A7320B3395C005FBDBB /* MPVASTModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTModel.h; sourceTree = ""; }; - 45A37A7420B3395C005FBDBB /* MPVASTCreative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTCreative.m; sourceTree = ""; }; - 45A37A7520B3395C005FBDBB /* MPVASTTrackingEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTTrackingEvent.h; sourceTree = ""; }; - 45A37A7620B3395C005FBDBB /* MPVASTIndustryIcon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTIndustryIcon.h; sourceTree = ""; }; - 45A37A7720B3395C005FBDBB /* MPVASTInline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTInline.h; sourceTree = ""; }; - 45A37A7820B3395C005FBDBB /* MPVASTMediaFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTMediaFile.m; sourceTree = ""; }; - 45A37A7920B3395C005FBDBB /* MPVASTAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTAd.m; sourceTree = ""; }; - 45A37A7A20B3395C005FBDBB /* MPVASTManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTManager.h; sourceTree = ""; }; - 45A37A7B20B3395C005FBDBB /* MPVASTResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTResponse.h; sourceTree = ""; }; - 45A37A7C20B3395C005FBDBB /* MPVASTStringUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTStringUtilities.h; sourceTree = ""; }; - 45A37A7D20B3395C005FBDBB /* MPVASTResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTResource.m; sourceTree = ""; }; - 45A37A7E20B3395C005FBDBB /* MPVASTModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTModel.m; sourceTree = ""; }; - 45A37A7F20B3395C005FBDBB /* MPVASTWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTWrapper.m; sourceTree = ""; }; - 45A37A8020B3395C005FBDBB /* MPVASTLinearAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTLinearAd.m; sourceTree = ""; }; - 45A37A8120B3395C005FBDBB /* MPVASTCompanionAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTCompanionAd.m; sourceTree = ""; }; - 45A37A8220B3395C005FBDBB /* MPVASTMacroProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTMacroProcessor.m; sourceTree = ""; }; - 45A37A8320B3395C005FBDBB /* MPVASTDurationOffset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTDurationOffset.m; sourceTree = ""; }; - 45A37A8420B3395C005FBDBB /* MPVASTMediaFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTMediaFile.h; sourceTree = ""; }; - 45A37A8520B3395C005FBDBB /* MPVASTIndustryIcon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTIndustryIcon.m; sourceTree = ""; }; - 45A37A8620B3395C005FBDBB /* MPVASTInline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTInline.m; sourceTree = ""; }; - 45A37A8720B3395C005FBDBB /* MPVASTTrackingEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTTrackingEvent.m; sourceTree = ""; }; - 45A37A8820B3395C005FBDBB /* MPVASTCreative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTCreative.h; sourceTree = ""; }; - 45A37A8920B3395C005FBDBB /* MPVASTResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTResource.h; sourceTree = ""; }; - 45A37A8A20B3395C005FBDBB /* MPVASTStringUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTStringUtilities.m; sourceTree = ""; }; - 45A37A8B20B3395C005FBDBB /* MPVASTResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTResponse.m; sourceTree = ""; }; - 45A37A8C20B3395C005FBDBB /* MPVASTManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPVASTManager.m; sourceTree = ""; }; - 45A37A8D20B3395C005FBDBB /* MPVASTAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPVASTAd.h; sourceTree = ""; }; - 45A37A8E20B3395C005FBDBB /* MPConsentChangedReason.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPConsentChangedReason.m; sourceTree = ""; }; - 45A37A8F20B3395C005FBDBB /* MPConsentError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPConsentError.h; sourceTree = ""; }; - 45A37A9020B3395C005FBDBB /* MPMoPubConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMoPubConfiguration.h; sourceTree = ""; }; - 45A37B6B20B33D63005FBDBB /* FacebookNativeCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacebookNativeCustomEvent.m; sourceTree = ""; }; - 45A37B6C20B33D63005FBDBB /* FacebookInterstitialCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacebookInterstitialCustomEvent.m; sourceTree = ""; }; - 45A37B6D20B33D63005FBDBB /* FacebookBannerCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookBannerCustomEvent.h; sourceTree = ""; }; - 45A37B6E20B33D63005FBDBB /* FacebookAdvancedBidder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacebookAdvancedBidder.m; sourceTree = ""; }; - 45A37B6F20B33D63005FBDBB /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; - 45A37B7120B33D63005FBDBB /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 45A37B7220B33D63005FBDBB /* MoPub-FacebookAudienceNetwork-Adapters.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "MoPub-FacebookAudienceNetwork-Adapters.podspec"; sourceTree = ""; }; - 45A37B7320B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacebookRewardedVideoCustomEvent.m; sourceTree = ""; }; - 45A37B7420B33D63005FBDBB /* FacebookNativeAdAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacebookNativeAdAdapter.m; sourceTree = ""; }; - 45A37B7520B33D63005FBDBB /* FacebookInterstitialCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookInterstitialCustomEvent.h; sourceTree = ""; }; - 45A37B7620B33D63005FBDBB /* FacebookNativeCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookNativeCustomEvent.h; sourceTree = ""; }; - 45A37B7720B33D63005FBDBB /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 45A37B7820B33D63005FBDBB /* FacebookAdvancedBidder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookAdvancedBidder.h; sourceTree = ""; }; - 45A37B7920B33D63005FBDBB /* FacebookBannerCustomEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FacebookBannerCustomEvent.m; sourceTree = ""; }; - 45A37B7A20B33D63005FBDBB /* FacebookNativeAdAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookNativeAdAdapter.h; sourceTree = ""; }; - 45A37B7B20B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookRewardedVideoCustomEvent.h; sourceTree = ""; }; - 45A37BA320B33FC1005FBDBB /* FBAudienceNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FBAudienceNetwork.framework; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 34F407491E9E1D3500E57AC0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - EBDA7B7720B35B0E0054165B /* FBAudienceNetwork.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 34F407431E9E1D3500E57AC0 = { - isa = PBXGroup; - children = ( - 34F4098E1E9E27DB00E57AC0 /* common-debug.xcconfig */, - 34F4098F1E9E27DB00E57AC0 /* common-release.xcconfig */, - 34F4075E1E9E1DA400E57AC0 /* AdNetworkSupport */, - 45A379B920B3395B005FBDBB /* Internal */, - 45A379B120B3395A005FBDBB /* MoPub-Bridging-Header.h */, - 45A378FE20B33955005FBDBB /* MoPub.h */, - 45A379B620B3395B005FBDBB /* MoPub.m */, - 45A379AB20B33958005FBDBB /* MOPUBDisplayAgentType.h */, - 45A3797820B33957005FBDBB /* MPAdConversionTracker.h */, - 45A379B220B3395A005FBDBB /* MPAdConversionTracker.m */, - 45A379B020B33959005FBDBB /* MPAdvancedBidder.h */, - 45A3792120B33956005FBDBB /* MPAdView.h */, - 45A378FF20B33956005FBDBB /* MPAdView.m */, - 45A379AF20B33959005FBDBB /* MPBannerCustomEvent.h */, - 45A378E220B33955005FBDBB /* MPBannerCustomEvent.m */, - 45A379AD20B33959005FBDBB /* MPBannerCustomEventDelegate.h */, - 45A379AA20B33958005FBDBB /* MPBool.h */, - 45A379B720B3395B005FBDBB /* MPConsentChangedNotification.h */, - 45A379A920B33958005FBDBB /* MPConsentChangedNotification.m */, - 45A379AE20B33959005FBDBB /* MPConsentChangedReason.h */, - 45A37A8E20B3395C005FBDBB /* MPConsentChangedReason.m */, - 45A37A8F20B3395C005FBDBB /* MPConsentError.h */, - 45A379B820B3395B005FBDBB /* MPConsentStatus.h */, - 45A3790020B33956005FBDBB /* MPConstants.h */, - 45A379AC20B33959005FBDBB /* MPConstants.m */, - 45A379A620B33957005FBDBB /* MPInterstitialAdController.h */, - 45A379A820B33958005FBDBB /* MPInterstitialAdController.m */, - 45A379B520B3395A005FBDBB /* MPInterstitialCustomEvent.h */, - 45A379B320B3395A005FBDBB /* MPInterstitialCustomEvent.m */, - 45A379B420B3395A005FBDBB /* MPInterstitialCustomEventDelegate.h */, - 45A379A720B33958005FBDBB /* MPLogLevel.h */, - 45A378E320B33955005FBDBB /* MPMediationSdkInitializable.h */, - 45A3790120B33956005FBDBB /* MPMediationSettingsProtocol.h */, - 45A37A9020B3395C005FBDBB /* MPMoPubConfiguration.h */, - 45A3790220B33956005FBDBB /* MPMoPubConfiguration.m */, - 45A3792220B33956005FBDBB /* NativeAds */, - 45A3790320B33956005FBDBB /* NativeVideo */, - 45A3797920B33957005FBDBB /* Resources */, - 45A3798E20B33957005FBDBB /* RewardedVideo */, - 45A378E420B33955005FBDBB /* Viewability */, - 34F4074D1E9E1D3500E57AC0 /* Products */, - EBDA7B7520B35AF30054165B /* Frameworks */, - ); - sourceTree = ""; - }; - 34F4074D1E9E1D3500E57AC0 /* Products */ = { - isa = PBXGroup; - children = ( - 34F4074C1E9E1D3500E57AC0 /* libMopub.a */, - ); - name = Products; - sourceTree = ""; - }; - 34F4075E1E9E1DA400E57AC0 /* AdNetworkSupport */ = { - isa = PBXGroup; - children = ( - 45A37B6A20B33D63005FBDBB /* FacebookAudienceNetwork */, - ); - path = AdNetworkSupport; - sourceTree = ""; - }; - 45A378E420B33955005FBDBB /* Viewability */ = { - isa = PBXGroup; - children = ( - 45A378F820B33955005FBDBB /* MPViewabilityTracker.h */, - 45A378F920B33955005FBDBB /* MPViewabilityOption.h */, - 45A378FA20B33955005FBDBB /* MPWebView+Viewability.h */, - 45A378FB20B33955005FBDBB /* MPViewabilityTracker.m */, - 45A378FC20B33955005FBDBB /* MPWebView+Viewability.m */, - 45A378FD20B33955005FBDBB /* MPViewabilityAdapter.h */, - ); - path = Viewability; - sourceTree = ""; - }; - 45A3790320B33956005FBDBB /* NativeVideo */ = { - isa = PBXGroup; - children = ( - 45A3790420B33956005FBDBB /* MOPUBNativeVideoAdRendererSettings.m */, - 45A3790520B33956005FBDBB /* Internal */, - 45A3791E20B33956005FBDBB /* MOPUBNativeVideoAdRenderer.h */, - 45A3791F20B33956005FBDBB /* MOPUBNativeVideoAdRendererSettings.h */, - 45A3792020B33956005FBDBB /* MOPUBNativeVideoAdRenderer.m */, - ); - path = NativeVideo; - sourceTree = ""; - }; - 45A3790520B33956005FBDBB /* Internal */ = { - isa = PBXGroup; - children = ( - 45A3790620B33956005FBDBB /* MOPUBPlayerManager.m */, - 45A3790720B33956005FBDBB /* MOPUBNativeVideoAdConfigValues.h */, - 45A3790820B33956005FBDBB /* MOPUBReplayView.h */, - 45A3790920B33956005FBDBB /* MOPUBNativeVideoAdAdapter.m */, - 45A3790A20B33956005FBDBB /* MOPUBNativeVideoCustomEvent.m */, - 45A3790B20B33956005FBDBB /* MOPUBAVPlayerView.h */, - 45A3790C20B33956005FBDBB /* MOPUBPlayerView.m */, - 45A3790D20B33956005FBDBB /* MOPUBFullscreenPlayerViewController.m */, - 45A3790E20B33956005FBDBB /* MOPUBNativeVideoImpressionAgent.m */, - 45A3790F20B33956005FBDBB /* MOPUBActivityIndicatorView.m */, - 45A3791020B33956005FBDBB /* MOPUBPlayerViewController.m */, - 45A3791120B33956005FBDBB /* MOPUBAVPlayer.h */, - 45A3791220B33956005FBDBB /* MOPUBPlayerManager.h */, - 45A3791320B33956005FBDBB /* MOPUBReplayView.m */, - 45A3791420B33956005FBDBB /* MOPUBNativeVideoAdAdapter.h */, - 45A3791520B33956005FBDBB /* MOPUBNativeVideoAdConfigValues.m */, - 45A3791620B33956005FBDBB /* MOPUBFullscreenPlayerViewController.h */, - 45A3791720B33956005FBDBB /* MOPUBPlayerView.h */, - 45A3791820B33956005FBDBB /* MOPUBAVPlayerView.m */, - 45A3791920B33956005FBDBB /* MOPUBNativeVideoCustomEvent.h */, - 45A3791A20B33956005FBDBB /* MOPUBAVPlayer.m */, - 45A3791B20B33956005FBDBB /* MOPUBPlayerViewController.h */, - 45A3791C20B33956005FBDBB /* MOPUBActivityIndicatorView.h */, - 45A3791D20B33956005FBDBB /* MOPUBNativeVideoImpressionAgent.h */, - ); - path = Internal; - sourceTree = ""; - }; - 45A3792220B33956005FBDBB /* NativeAds */ = { - isa = PBXGroup; - children = ( - 45A3792320B33956005FBDBB /* MPServerAdPositioning.m */, - 45A3792420B33956005FBDBB /* MPNativeCustomEvent.m */, - 45A3792520B33956005FBDBB /* MPNativeAdRequest.m */, - 45A3792620B33956005FBDBB /* MPStreamAdPlacer.m */, - 45A3792720B33956005FBDBB /* MPNativeAdRendererConfiguration.h */, - 45A3792820B33956005FBDBB /* MPCollectionViewAdPlacer.m */, - 45A3792920B33956005FBDBB /* MPAdPositioning.h */, - 45A3792A20B33956005FBDBB /* MPNativeAdConstants.h */, - 45A3792B20B33956005FBDBB /* MPNativeAdData.m */, - 45A3792C20B33956005FBDBB /* MPStaticNativeAdRendererSettings.m */, - 45A3792D20B33956005FBDBB /* MPNativeAdAdapter.h */, - 45A3792E20B33956005FBDBB /* MPNativeAdSource.m */, - 45A3792F20B33956005FBDBB /* MPNativeAdError.m */, - 45A3793020B33956005FBDBB /* MPStaticNativeAdRenderer.h */, - 45A3793120B33956005FBDBB /* MPStreamAdPlacementData.m */, - 45A3793220B33956005FBDBB /* MPNativeCustomEventDelegate.h */, - 45A3793320B33956005FBDBB /* MPNativeAdRenderingImageLoader.h */, - 45A3793420B33956005FBDBB /* Internal */, - 45A3795C20B33957005FBDBB /* MPClientAdPositioning.h */, - 45A3795D20B33957005FBDBB /* MPTableViewAdPlacer.m */, - 45A3795E20B33957005FBDBB /* MPNativeAd.h */, - 45A3795F20B33957005FBDBB /* MPNativeAdRequestTargeting.h */, - 45A3796020B33957005FBDBB /* MPNativeCustomEvent.h */, - 45A3796120B33957005FBDBB /* MPNativeAdSourceDelegate.h */, - 45A3796220B33957005FBDBB /* MPNativeAdRendererSettings.h */, - 45A3796320B33957005FBDBB /* MPNativeAdRenderer.h */, - 45A3796420B33957005FBDBB /* MPServerAdPositioning.h */, - 45A3796520B33957005FBDBB /* MPNativeAdData.h */, - 45A3796620B33957005FBDBB /* MPNativeAdConstants.m */, - 45A3796720B33957005FBDBB /* MPCollectionViewAdPlacer.h */, - 45A3796820B33957005FBDBB /* MPAdPositioning.m */, - 45A3796920B33957005FBDBB /* MPNativeAdRendererConfiguration.m */, - 45A3796A20B33957005FBDBB /* MPStreamAdPlacer.h */, - 45A3796B20B33957005FBDBB /* MPNativeAdRequest.h */, - 45A3796C20B33957005FBDBB /* MPNativeAdDelegate.h */, - 45A3796D20B33957005FBDBB /* MPNativeAdRenderingImageLoader.m */, - 45A3796E20B33957005FBDBB /* MPStreamAdPlacementData.h */, - 45A3796F20B33957005FBDBB /* MPStaticNativeAdRenderer.m */, - 45A3797020B33957005FBDBB /* MPNativeAdSource.h */, - 45A3797120B33957005FBDBB /* MPNativeAdError.h */, - 45A3797220B33957005FBDBB /* MPStaticNativeAdRendererSettings.h */, - 45A3797320B33957005FBDBB /* MPNativeAd.m */, - 45A3797420B33957005FBDBB /* MPNativeAdRequestTargeting.m */, - 45A3797520B33957005FBDBB /* MPNativeAdRendering.h */, - 45A3797620B33957005FBDBB /* MPTableViewAdPlacer.h */, - 45A3797720B33957005FBDBB /* MPClientAdPositioning.m */, - ); - path = NativeAds; - sourceTree = ""; - }; - 45A3793420B33956005FBDBB /* Internal */ = { - isa = PBXGroup; - children = ( - 45A3793520B33956005FBDBB /* MPNativeAd+Internal.m */, - 45A3793620B33956005FBDBB /* MPTableViewAdPlacerCell.h */, - 45A3793720B33957005FBDBB /* MPCollectionViewAdPlacerCell.h */, - 45A3793820B33957005FBDBB /* MPNativePositionSource.m */, - 45A3793920B33957005FBDBB /* MPMoPubNativeAdAdapter.m */, - 45A3793A20B33957005FBDBB /* MPNativeView.h */, - 45A3793B20B33957005FBDBB /* MPNativeAdRendererImageHandler.h */, - 45A3793C20B33957005FBDBB /* MPAdPlacerInvocation.h */, - 45A3793D20B33957005FBDBB /* MPNativeAdSourceQueue.h */, - 45A3793E20B33957005FBDBB /* MPNativeAdConfigValues+Internal.h */, - 45A3793F20B33957005FBDBB /* MPNativeAdUtils.m */, - 45A3794020B33957005FBDBB /* MPNativeCache.h */, - 45A3794120B33957005FBDBB /* MPMoPubNativeCustomEvent.h */, - 45A3794220B33957005FBDBB /* MPDiskLRUCache.m */, - 45A3794320B33957005FBDBB /* MPTableViewCellImpressionTracker.h */, - 45A3794420B33957005FBDBB /* MPNativePositionResponseDeserializer.m */, - 45A3794520B33957005FBDBB /* MPImageDownloadQueue.m */, - 45A3794620B33957005FBDBB /* MPNativeAdConfigValues.m */, - 45A3794720B33957005FBDBB /* MPMoPubNativeAdAdapter.h */, - 45A3794820B33957005FBDBB /* MPNativePositionSource.h */, - 45A3794920B33957005FBDBB /* MPCollectionViewAdPlacerCell.m */, - 45A3794A20B33957005FBDBB /* MPTableViewAdPlacerCell.m */, - 45A3794B20B33957005FBDBB /* MPNativeAd+Internal.h */, - 45A3794C20B33957005FBDBB /* MPNativeAdConfigValues+Internal.m */, - 45A3794D20B33957005FBDBB /* MPAdPlacerInvocation.m */, - 45A3794E20B33957005FBDBB /* MPNativeAdSourceQueue.m */, - 45A3794F20B33957005FBDBB /* MPNativeAdRendererImageHandler.m */, - 45A3795020B33957005FBDBB /* MPNativeView.m */, - 45A3795120B33957005FBDBB /* MPTableViewCellImpressionTracker.m */, - 45A3795220B33957005FBDBB /* MPDiskLRUCache.h */, - 45A3795320B33957005FBDBB /* MPMoPubNativeCustomEvent.m */, - 45A3795420B33957005FBDBB /* MPNativeAdRendererConstants.h */, - 45A3795520B33957005FBDBB /* MPNativeCache.m */, - 45A3795620B33957005FBDBB /* MPNativeAdUtils.h */, - 45A3795720B33957005FBDBB /* MPNativeAdConfigValues.h */, - 45A3795820B33957005FBDBB /* Categories */, - 45A3795A20B33957005FBDBB /* MPImageDownloadQueue.h */, - 45A3795B20B33957005FBDBB /* MPNativePositionResponseDeserializer.h */, - ); - path = Internal; - sourceTree = ""; - }; - 45A3795820B33957005FBDBB /* Categories */ = { - isa = PBXGroup; - children = ( - 45A3795920B33957005FBDBB /* MPNativeAdRequest+MPNativeAdSource.h */, - ); - path = Categories; - sourceTree = ""; - }; - 45A3797920B33957005FBDBB /* Resources */ = { - isa = PBXGroup; - children = ( - 45A3797A20B33957005FBDBB /* MPUnmutedBtn.png */, - 45A3797B20B33957005FBDBB /* MRAID.bundle */, - 45A3797C20B33957005FBDBB /* MPDAAIcon.png */, - 45A3797D20B33957005FBDBB /* MPUnmutedBtn@3x.png */, - 45A3797E20B33957005FBDBB /* MPPlayBtn@2x.png */, - 45A3797F20B33957005FBDBB /* MPCloseBtn@2x.png */, - 45A3798020B33957005FBDBB /* MPCloseBtn@3x.png */, - 45A3798120B33957005FBDBB /* MPCloseBtn.png */, - 45A3798220B33957005FBDBB /* MPPlayBtn@3x.png */, - 45A3798320B33957005FBDBB /* MPUnmutedBtn@2x.png */, - 45A3798420B33957005FBDBB /* MPCountdownTimer.html */, - 45A3798520B33957005FBDBB /* MPCloseButtonX@2x.png */, - 45A3798620B33957005FBDBB /* MPCloseButtonX@3x.png */, - 45A3798720B33957005FBDBB /* MPCloseButtonX.png */, - 45A3798820B33957005FBDBB /* MPDAAIcon@3x.png */, - 45A3798920B33957005FBDBB /* MPMutedBtn@3x.png */, - 45A3798A20B33957005FBDBB /* MPPlayBtn.png */, - 45A3798B20B33957005FBDBB /* MPMutedBtn.png */, - 45A3798C20B33957005FBDBB /* MPMutedBtn@2x.png */, - 45A3798D20B33957005FBDBB /* MPDAAIcon@2x.png */, - ); - path = Resources; - sourceTree = ""; - }; - 45A3798E20B33957005FBDBB /* RewardedVideo */ = { - isa = PBXGroup; - children = ( - 45A3798F20B33957005FBDBB /* MPRewardedVideoReward.h */, - 45A3799020B33957005FBDBB /* MPRewardedVideoError.h */, - 45A3799120B33957005FBDBB /* MPRewardedVideo.m */, - 45A3799220B33957005FBDBB /* MPRewardedVideoCustomEvent.h */, - 45A3799320B33957005FBDBB /* Internal */, - 45A379A020B33957005FBDBB /* MPRewardedVideoCustomEvent+Caching.h */, - 45A379A120B33957005FBDBB /* MPRewardedVideoReward.m */, - 45A379A220B33957005FBDBB /* MPRewardedVideoError.m */, - 45A379A320B33957005FBDBB /* MPRewardedVideo.h */, - 45A379A420B33957005FBDBB /* MPRewardedVideoCustomEvent+Caching.m */, - 45A379A520B33957005FBDBB /* MPRewardedVideoCustomEvent.m */, - ); - path = RewardedVideo; - sourceTree = ""; - }; - 45A3799320B33957005FBDBB /* Internal */ = { - isa = PBXGroup; - children = ( - 45A3799420B33957005FBDBB /* MPMoPubRewardedVideoCustomEvent.m */, - 45A3799520B33957005FBDBB /* MPRewardedVideoAdManager.m */, - 45A3799620B33957005FBDBB /* MPRewardedVideoAdapter.m */, - 45A3799720B33957005FBDBB /* MPRewardedVideo+Internal.h */, - 45A3799820B33957005FBDBB /* MPMoPubRewardedPlayableCustomEvent.m */, - 45A3799920B33957005FBDBB /* MPRewardedVideoConnection.h */, - 45A3799A20B33957005FBDBB /* MPRewardedVideoAdManager.h */, - 45A3799B20B33957005FBDBB /* MPMoPubRewardedVideoCustomEvent.h */, - 45A3799C20B33957005FBDBB /* MPRewardedVideoAdapter.h */, - 45A3799D20B33957005FBDBB /* MPPrivateRewardedVideoCustomEventDelegate.h */, - 45A3799E20B33957005FBDBB /* MPRewardedVideoConnection.m */, - 45A3799F20B33957005FBDBB /* MPMoPubRewardedPlayableCustomEvent.h */, - ); - path = Internal; - sourceTree = ""; - }; - 45A379B920B3395B005FBDBB /* Internal */ = { - isa = PBXGroup; - children = ( - 45A379BA20B3395B005FBDBB /* MPConsentManager.h */, - 45A379BB20B3395B005FBDBB /* MPURLRequest.m */, - 45A379BC20B3395B005FBDBB /* MPHTTPNetworkTaskData.m */, - 45A379BD20B3395B005FBDBB /* MPHTTPNetworkSession.h */, - 45A379BE20B3395B005FBDBB /* MPConsentAdServerKeys.h */, - 45A379BF20B3395B005FBDBB /* Interstitials */, - 45A379CA20B3395B005FBDBB /* MPConsentDialogViewController.h */, - 45A379CB20B3395B005FBDBB /* MPMediationManager.h */, - 45A379CC20B3395B005FBDBB /* MPInstanceProvider.h */, - 45A379CD20B3395B005FBDBB /* MPVASTTracking.m */, - 45A379CE20B3395B005FBDBB /* HTML */, - 45A379D920B3395B005FBDBB /* MPCoreInstanceProvider.m */, - 45A379DA20B3395B005FBDBB /* MPAdvancedBiddingManager.h */, - 45A379DB20B3395B005FBDBB /* Banners */, - 45A379E620B3395B005FBDBB /* Common */, - 45A37A1320B3395B005FBDBB /* MPURLRequest.h */, - 45A37A1420B3395B005FBDBB /* MPConsentManager.m */, - 45A37A1520B3395B005FBDBB /* MPHTTPNetworkTaskData.h */, - 45A37A1620B3395B005FBDBB /* MPInstanceProvider.m */, - 45A37A1720B3395B005FBDBB /* MPMediationManager.m */, - 45A37A1820B3395B005FBDBB /* MPConsentDialogViewController.m */, - 45A37A1920B3395B005FBDBB /* MRAID */, - 45A37A3620B3395C005FBDBB /* MPConsentAdServerKeys.m */, - 45A37A3720B3395C005FBDBB /* MPHTTPNetworkSession.m */, - 45A37A3820B3395C005FBDBB /* MPAdvancedBiddingManager.m */, - 45A37A3920B3395C005FBDBB /* MPCoreInstanceProvider.h */, - 45A37A3A20B3395C005FBDBB /* MPVASTTracking.h */, - 45A37A3B20B3395C005FBDBB /* Utility */, - 45A37A6D20B3395C005FBDBB /* VAST */, - ); - path = Internal; - sourceTree = ""; - }; - 45A379BF20B3395B005FBDBB /* Interstitials */ = { - isa = PBXGroup; - children = ( - 45A379C020B3395B005FBDBB /* MPBaseInterstitialAdapter.m */, - 45A379C120B3395B005FBDBB /* MPPrivateInterstitialCustomEventDelegate.h */, - 45A379C220B3395B005FBDBB /* MPInterstitialViewController.m */, - 45A379C320B3395B005FBDBB /* MPInterstitialAdManagerDelegate.h */, - 45A379C420B3395B005FBDBB /* MPInterstitialCustomEventAdapter.h */, - 45A379C520B3395B005FBDBB /* MPInterstitialAdManager.h */, - 45A379C620B3395B005FBDBB /* MPBaseInterstitialAdapter.h */, - 45A379C720B3395B005FBDBB /* MPInterstitialViewController.h */, - 45A379C820B3395B005FBDBB /* MPInterstitialAdManager.m */, - 45A379C920B3395B005FBDBB /* MPInterstitialCustomEventAdapter.m */, - ); - path = Interstitials; - sourceTree = ""; - }; - 45A379CE20B3395B005FBDBB /* HTML */ = { - isa = PBXGroup; - children = ( - 45A379CF20B3395B005FBDBB /* MPAdWebViewAgent.h */, - 45A379D020B3395B005FBDBB /* MPHTMLInterstitialViewController.h */, - 45A379D120B3395B005FBDBB /* MPHTMLBannerCustomEvent.h */, - 45A379D220B3395B005FBDBB /* MPWebView.h */, - 45A379D320B3395B005FBDBB /* MPHTMLInterstitialCustomEvent.m */, - 45A379D420B3395B005FBDBB /* MPHTMLInterstitialViewController.m */, - 45A379D520B3395B005FBDBB /* MPAdWebViewAgent.m */, - 45A379D620B3395B005FBDBB /* MPWebView.m */, - 45A379D720B3395B005FBDBB /* MPHTMLBannerCustomEvent.m */, - 45A379D820B3395B005FBDBB /* MPHTMLInterstitialCustomEvent.h */, - ); - path = HTML; - sourceTree = ""; - }; - 45A379DB20B3395B005FBDBB /* Banners */ = { - isa = PBXGroup; - children = ( - 45A379DC20B3395B005FBDBB /* MPPrivateBannerCustomEventDelegate.h */, - 45A379DD20B3395B005FBDBB /* MPBannerAdManager.m */, - 45A379DE20B3395B005FBDBB /* MPBannerCustomEventAdapter.h */, - 45A379DF20B3395B005FBDBB /* MPBannerAdManagerDelegate.h */, - 45A379E020B3395B005FBDBB /* MPBannerCustomEvent+Internal.m */, - 45A379E120B3395B005FBDBB /* MPBaseBannerAdapter.m */, - 45A379E220B3395B005FBDBB /* MPBannerCustomEventAdapter.m */, - 45A379E320B3395B005FBDBB /* MPBannerAdManager.h */, - 45A379E420B3395B005FBDBB /* MPBaseBannerAdapter.h */, - 45A379E520B3395B005FBDBB /* MPBannerCustomEvent+Internal.h */, - ); - path = Banners; - sourceTree = ""; - }; - 45A379E620B3395B005FBDBB /* Common */ = { - isa = PBXGroup; - children = ( - 45A379E720B3395B005FBDBB /* MPAdDestinationDisplayAgent.m */, - 45A379E820B3395B005FBDBB /* MPAPIEndpoints.m */, - 45A379E920B3395B005FBDBB /* MPRealTimeTimer.h */, - 45A379EA20B3395B005FBDBB /* MPCountdownTimerView.h */, - 45A379EB20B3395B005FBDBB /* MPClosableView.h */, - 45A379EC20B3395B005FBDBB /* MPAdBrowserController.m */, - 45A379ED20B3395B005FBDBB /* MPAdServerCommunicator.m */, - 45A379EE20B3395B005FBDBB /* MPAdConfiguration.m */, - 45A379EF20B3395B005FBDBB /* MPVideoConfig.h */, - 45A379F020B3395B005FBDBB /* MPURLResolver.h */, - 45A379F120B3395B005FBDBB /* MPActivityViewControllerHelper.m */, - 45A379F220B3395B005FBDBB /* MPActivityViewControllerHelper+TweetShare.h */, - 45A379F320B3395B005FBDBB /* MPAdServerURLBuilder.m */, - 45A379F420B3395B005FBDBB /* MPAdImpressionTimer.h */, - 45A379F520B3395B005FBDBB /* MPLastResortDelegate.m */, - 45A379F620B3395B005FBDBB /* MPProgressOverlayView.m */, - 45A379F720B3395B005FBDBB /* MPAdBrowserController.xib */, - 45A379F820B3395B005FBDBB /* MPEnhancedDeeplinkRequest.m */, - 45A379F920B3395B005FBDBB /* MPURLActionInfo.m */, - 45A379FA20B3395B005FBDBB /* MPXMLParser.h */, - 45A379FB20B3395B005FBDBB /* MPAdServerCommunicator.h */, - 45A379FC20B3395B005FBDBB /* MPAdBrowserController.h */, - 45A379FD20B3395B005FBDBB /* MPClosableView.m */, - 45A379FE20B3395B005FBDBB /* MPCountdownTimerView.m */, - 45A379FF20B3395B005FBDBB /* MPRealTimeTimer.m */, - 45A37A0020B3395B005FBDBB /* AdAlerts */, - 45A37A0520B3395B005FBDBB /* MPAdDestinationDisplayAgent.h */, - 45A37A0620B3395B005FBDBB /* MPAPIEndpoints.h */, - 45A37A0720B3395B005FBDBB /* MPActivityViewControllerHelper.h */, - 45A37A0820B3395B005FBDBB /* MPURLResolver.m */, - 45A37A0920B3395B005FBDBB /* MPAdConfiguration.h */, - 45A37A0A20B3395B005FBDBB /* MPVideoConfig.m */, - 45A37A0B20B3395B005FBDBB /* MPAdImpressionTimer.m */, - 45A37A0C20B3395B005FBDBB /* MPAdServerURLBuilder.h */, - 45A37A0D20B3395B005FBDBB /* MPActivityViewControllerHelper+TweetShare.m */, - 45A37A0E20B3395B005FBDBB /* MPXMLParser.m */, - 45A37A0F20B3395B005FBDBB /* MPEnhancedDeeplinkRequest.h */, - 45A37A1020B3395B005FBDBB /* MPURLActionInfo.h */, - 45A37A1120B3395B005FBDBB /* MPProgressOverlayView.h */, - 45A37A1220B3395B005FBDBB /* MPLastResortDelegate.h */, - ); - path = Common; - sourceTree = ""; - }; - 45A37A0020B3395B005FBDBB /* AdAlerts */ = { - isa = PBXGroup; - children = ( - 45A37A0120B3395B005FBDBB /* MPAdAlertGestureRecognizer.h */, - 45A37A0220B3395B005FBDBB /* MPAdAlertManager.m */, - 45A37A0320B3395B005FBDBB /* MPAdAlertGestureRecognizer.m */, - 45A37A0420B3395B005FBDBB /* MPAdAlertManager.h */, - ); - path = AdAlerts; - sourceTree = ""; - }; - 45A37A1920B3395B005FBDBB /* MRAID */ = { - isa = PBXGroup; - children = ( - 45A37A1A20B3395B005FBDBB /* MPMRAIDBannerCustomEvent.m */, - 45A37A1B20B3395B005FBDBB /* MRConstants.m */, - 45A37A1C20B3395B005FBDBB /* MRError.h */, - 45A37A1D20B3395B005FBDBB /* MRBridge.m */, - 45A37A1E20B3395B005FBDBB /* MRNativeCommandHandler.m */, - 45A37A1F20B3395B005FBDBB /* MPForceableOrientationProtocol.h */, - 45A37A2020B3395B005FBDBB /* MRVideoPlayerManager.m */, - 45A37A2120B3395B005FBDBB /* LICENSE */, - 45A37A2220B3395B005FBDBB /* MPMRAIDInterstitialViewController.m */, - 45A37A2320B3395B005FBDBB /* MRCommand.m */, - 45A37A2420B3395B005FBDBB /* MPMRAIDInterstitialCustomEvent.m */, - 45A37A2520B3395B005FBDBB /* MRController.h */, - 45A37A2620B3395B005FBDBB /* MRProperty.m */, - 45A37A2720B3395B005FBDBB /* MRBundleManager.h */, - 45A37A2820B3395B005FBDBB /* MRExpandModalViewController.h */, - 45A37A2920B3395B005FBDBB /* MRNativeCommandHandler.h */, - 45A37A2A20B3395B005FBDBB /* MRBridge.h */, - 45A37A2B20B3395B005FBDBB /* MRError.m */, - 45A37A2C20B3395B005FBDBB /* MRConstants.h */, - 45A37A2D20B3395B005FBDBB /* MPMRAIDBannerCustomEvent.h */, - 45A37A2E20B3395C005FBDBB /* MRCommand.h */, - 45A37A2F20B3395C005FBDBB /* MPMRAIDInterstitialCustomEvent.h */, - 45A37A3020B3395C005FBDBB /* MPMRAIDInterstitialViewController.h */, - 45A37A3120B3395C005FBDBB /* MRVideoPlayerManager.h */, - 45A37A3220B3395C005FBDBB /* MRProperty.h */, - 45A37A3320B3395C005FBDBB /* MRController.m */, - 45A37A3420B3395C005FBDBB /* MRExpandModalViewController.m */, - 45A37A3520B3395C005FBDBB /* MRBundleManager.m */, - ); - path = MRAID; - sourceTree = ""; - }; - 45A37A3B20B3395C005FBDBB /* Utility */ = { - isa = PBXGroup; - children = ( - 45A37A3C20B3395C005FBDBB /* MPSessionTracker.m */, - 45A37A3D20B3395C005FBDBB /* MPLogProvider.m */, - 45A37A3E20B3395C005FBDBB /* MPGlobal.m */, - 45A37A3F20B3395C005FBDBB /* MPInternalUtils.h */, - 45A37A4020B3395C005FBDBB /* MPIdentityProvider.h */, - 45A37A4120B3395C005FBDBB /* MPTimer.m */, - 45A37A4220B3395C005FBDBB /* MPLogging.m */, - 45A37A4320B3395C005FBDBB /* MOPUBExperimentProvider.m */, - 45A37A4420B3395C005FBDBB /* MPStoreKitProvider.h */, - 45A37A4520B3395C005FBDBB /* MPError.h */, - 45A37A4620B3395C005FBDBB /* MPGeolocationProvider.m */, - 45A37A4720B3395C005FBDBB /* MPReachability.m */, - 45A37A4820B3395C005FBDBB /* MPUserInteractionGestureRecognizer.m */, - 45A37A4920B3395C005FBDBB /* MPAnalyticsTracker.m */, - 45A37A4A20B3395C005FBDBB /* MPIdentityProvider.m */, - 45A37A4B20B3395C005FBDBB /* MPInternalUtils.m */, - 45A37A4C20B3395C005FBDBB /* MPSessionTracker.h */, - 45A37A4D20B3395C005FBDBB /* MPGlobal.h */, - 45A37A4E20B3395C005FBDBB /* MPLogProvider.h */, - 45A37A4F20B3395C005FBDBB /* MPError.m */, - 45A37A5020B3395C005FBDBB /* MPStoreKitProvider.m */, - 45A37A5120B3395C005FBDBB /* MOPUBExperimentProvider.h */, - 45A37A5220B3395C005FBDBB /* MPLogging.h */, - 45A37A5320B3395C005FBDBB /* MPTimer.h */, - 45A37A5420B3395C005FBDBB /* MPAnalyticsTracker.h */, - 45A37A5520B3395C005FBDBB /* MPUserInteractionGestureRecognizer.h */, - 45A37A5620B3395C005FBDBB /* MPReachability.h */, - 45A37A5720B3395C005FBDBB /* MPGeolocationProvider.h */, - 45A37A5820B3395C005FBDBB /* Categories */, - ); - path = Utility; - sourceTree = ""; - }; - 45A37A5820B3395C005FBDBB /* Categories */ = { - isa = PBXGroup; - children = ( - 45A37A5920B3395C005FBDBB /* NSString+MPAdditions.h */, - 45A37A5A20B3395C005FBDBB /* NSURL+MPAdditions.m */, - 45A37A5B20B3395C005FBDBB /* UIColor+MPAdditions.m */, - 45A37A5C20B3395C005FBDBB /* UIWebView+MPAdditions.h */, - 45A37A5D20B3395C005FBDBB /* NSJSONSerialization+MPAdditions.h */, - 45A37A5E20B3395C005FBDBB /* UIButton+MPAdditions.m */, - 45A37A5F20B3395C005FBDBB /* UIView+MPAdditions.h */, - 45A37A6020B3395C005FBDBB /* NSString+MPConsentStatus.h */, - 45A37A6120B3395C005FBDBB /* NSBundle+MPAdditions.m */, - 45A37A6220B3395C005FBDBB /* NSHTTPURLResponse+MPAdditions.m */, - 45A37A6320B3395C005FBDBB /* NSString+MPAdditions.m */, - 45A37A6420B3395C005FBDBB /* NSJSONSerialization+MPAdditions.m */, - 45A37A6520B3395C005FBDBB /* UIWebView+MPAdditions.m */, - 45A37A6620B3395C005FBDBB /* UIColor+MPAdditions.h */, - 45A37A6720B3395C005FBDBB /* NSURL+MPAdditions.h */, - 45A37A6820B3395C005FBDBB /* UIView+MPAdditions.m */, - 45A37A6920B3395C005FBDBB /* UIButton+MPAdditions.h */, - 45A37A6A20B3395C005FBDBB /* NSHTTPURLResponse+MPAdditions.h */, - 45A37A6B20B3395C005FBDBB /* NSBundle+MPAdditions.h */, - 45A37A6C20B3395C005FBDBB /* NSString+MPConsentStatus.m */, - ); - path = Categories; - sourceTree = ""; - }; - 45A37A6D20B3395C005FBDBB /* VAST */ = { - isa = PBXGroup; - children = ( - 45A37A6E20B3395C005FBDBB /* MPVASTDurationOffset.h */, - 45A37A6F20B3395C005FBDBB /* MPVASTCompanionAd.h */, - 45A37A7020B3395C005FBDBB /* MPVASTMacroProcessor.h */, - 45A37A7120B3395C005FBDBB /* MPVASTLinearAd.h */, - 45A37A7220B3395C005FBDBB /* MPVASTWrapper.h */, - 45A37A7320B3395C005FBDBB /* MPVASTModel.h */, - 45A37A7420B3395C005FBDBB /* MPVASTCreative.m */, - 45A37A7520B3395C005FBDBB /* MPVASTTrackingEvent.h */, - 45A37A7620B3395C005FBDBB /* MPVASTIndustryIcon.h */, - 45A37A7720B3395C005FBDBB /* MPVASTInline.h */, - 45A37A7820B3395C005FBDBB /* MPVASTMediaFile.m */, - 45A37A7920B3395C005FBDBB /* MPVASTAd.m */, - 45A37A7A20B3395C005FBDBB /* MPVASTManager.h */, - 45A37A7B20B3395C005FBDBB /* MPVASTResponse.h */, - 45A37A7C20B3395C005FBDBB /* MPVASTStringUtilities.h */, - 45A37A7D20B3395C005FBDBB /* MPVASTResource.m */, - 45A37A7E20B3395C005FBDBB /* MPVASTModel.m */, - 45A37A7F20B3395C005FBDBB /* MPVASTWrapper.m */, - 45A37A8020B3395C005FBDBB /* MPVASTLinearAd.m */, - 45A37A8120B3395C005FBDBB /* MPVASTCompanionAd.m */, - 45A37A8220B3395C005FBDBB /* MPVASTMacroProcessor.m */, - 45A37A8320B3395C005FBDBB /* MPVASTDurationOffset.m */, - 45A37A8420B3395C005FBDBB /* MPVASTMediaFile.h */, - 45A37A8520B3395C005FBDBB /* MPVASTIndustryIcon.m */, - 45A37A8620B3395C005FBDBB /* MPVASTInline.m */, - 45A37A8720B3395C005FBDBB /* MPVASTTrackingEvent.m */, - 45A37A8820B3395C005FBDBB /* MPVASTCreative.h */, - 45A37A8920B3395C005FBDBB /* MPVASTResource.h */, - 45A37A8A20B3395C005FBDBB /* MPVASTStringUtilities.m */, - 45A37A8B20B3395C005FBDBB /* MPVASTResponse.m */, - 45A37A8C20B3395C005FBDBB /* MPVASTManager.m */, - 45A37A8D20B3395C005FBDBB /* MPVASTAd.h */, - ); - path = VAST; - sourceTree = ""; - }; - 45A37B6A20B33D63005FBDBB /* FacebookAudienceNetwork */ = { - isa = PBXGroup; - children = ( - 45A37BA220B33FC1005FBDBB /* SDK */, - 45A37B6B20B33D63005FBDBB /* FacebookNativeCustomEvent.m */, - 45A37B6C20B33D63005FBDBB /* FacebookInterstitialCustomEvent.m */, - 45A37B6D20B33D63005FBDBB /* FacebookBannerCustomEvent.h */, - 45A37B6E20B33D63005FBDBB /* FacebookAdvancedBidder.m */, - 45A37B6F20B33D63005FBDBB /* CHANGELOG.md */, - 45A37B7020B33D63005FBDBB /* MoPub-FacebookAudienceNetwork-Podspecs */, - 45A37B7320B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.m */, - 45A37B7420B33D63005FBDBB /* FacebookNativeAdAdapter.m */, - 45A37B7520B33D63005FBDBB /* FacebookInterstitialCustomEvent.h */, - 45A37B7620B33D63005FBDBB /* FacebookNativeCustomEvent.h */, - 45A37B7720B33D63005FBDBB /* README.md */, - 45A37B7820B33D63005FBDBB /* FacebookAdvancedBidder.h */, - 45A37B7920B33D63005FBDBB /* FacebookBannerCustomEvent.m */, - 45A37B7A20B33D63005FBDBB /* FacebookNativeAdAdapter.h */, - 45A37B7B20B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.h */, - ); - path = FacebookAudienceNetwork; - sourceTree = ""; - }; - 45A37B7020B33D63005FBDBB /* MoPub-FacebookAudienceNetwork-Podspecs */ = { - isa = PBXGroup; - children = ( - 45A37B7120B33D63005FBDBB /* LICENSE */, - 45A37B7220B33D63005FBDBB /* MoPub-FacebookAudienceNetwork-Adapters.podspec */, - ); - path = "MoPub-FacebookAudienceNetwork-Podspecs"; - sourceTree = ""; - }; - 45A37BA220B33FC1005FBDBB /* SDK */ = { - isa = PBXGroup; - children = ( - 45A37BA320B33FC1005FBDBB /* FBAudienceNetwork.framework */, - ); - path = SDK; - sourceTree = ""; - }; - EBDA7B7520B35AF30054165B /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 34F4074B1E9E1D3500E57AC0 /* Mopub */ = { - isa = PBXNativeTarget; - buildConfigurationList = 34F407551E9E1D3500E57AC0 /* Build configuration list for PBXNativeTarget "Mopub" */; - buildPhases = ( - 34F407481E9E1D3500E57AC0 /* Sources */, - 34F407491E9E1D3500E57AC0 /* Frameworks */, - 34F4074A1E9E1D3500E57AC0 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Mopub; - productName = Mopub; - productReference = 34F4074C1E9E1D3500E57AC0 /* libMopub.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 34F407441E9E1D3500E57AC0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0830; - ORGANIZATIONNAME = maps.me; - TargetAttributes = { - 34F4074B1E9E1D3500E57AC0 = { - CreatedOnToolsVersion = 8.3.1; - DevelopmentTeam = 3T6FSDE8C7; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = 34F407471E9E1D3500E57AC0 /* Build configuration list for PBXProject "Mopub" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = 34F407431E9E1D3500E57AC0; - productRefGroup = 34F4074D1E9E1D3500E57AC0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 34F4074B1E9E1D3500E57AC0 /* Mopub */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 34F407481E9E1D3500E57AC0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 45A37AC720B3395D005FBDBB /* MPNativeAdRequest.m in Sources */, - 45A37ABC20B3395D005FBDBB /* MOPUBFullscreenPlayerViewController.m in Sources */, - 45A37B0420B3395D005FBDBB /* MPWebView.m in Sources */, - 45A37B2020B3395D005FBDBB /* MPConsentManager.m in Sources */, - 45A37B3520B3395E005FBDBB /* MPLogProvider.m in Sources */, - 45A37AB520B3395D005FBDBB /* MPAdView.m in Sources */, - 45A37B0F20B3395D005FBDBB /* MPAdConfiguration.m in Sources */, - 45A37AD920B3395D005FBDBB /* MPNativeAdConfigValues+Internal.m in Sources */, - 45A37AB920B3395D005FBDBB /* MOPUBNativeVideoAdAdapter.m in Sources */, - 45A37ABE20B3395D005FBDBB /* MOPUBActivityIndicatorView.m in Sources */, - 45A37AEE20B3395D005FBDBB /* MPMoPubRewardedPlayableCustomEvent.m in Sources */, - 45A37B5C20B3395E005FBDBB /* MPConsentChangedReason.m in Sources */, - 45A37ACA20B3395D005FBDBB /* MPNativeAdData.m in Sources */, - 45A37B5A20B3395E005FBDBB /* MPVASTResponse.m in Sources */, - 45A37B4320B3395E005FBDBB /* UIColor+MPAdditions.m in Sources */, - 45A37B4220B3395E005FBDBB /* NSURL+MPAdditions.m in Sources */, - 45A37B3120B3395D005FBDBB /* MPConsentAdServerKeys.m in Sources */, - 45A37AD120B3395D005FBDBB /* MPMoPubNativeAdAdapter.m in Sources */, - 45A37B2420B3395D005FBDBB /* MPMRAIDBannerCustomEvent.m in Sources */, - 45A37AD220B3395D005FBDBB /* MPNativeAdUtils.m in Sources */, - 45A37B1D20B3395D005FBDBB /* MPAdImpressionTimer.m in Sources */, - 45A37AB720B3395D005FBDBB /* MOPUBNativeVideoAdRendererSettings.m in Sources */, - 45A37B4420B3395E005FBDBB /* UIButton+MPAdditions.m in Sources */, - 45A37AF620B3395D005FBDBB /* MPConstants.m in Sources */, - 45A37AC520B3395D005FBDBB /* MPServerAdPositioning.m in Sources */, - 45A37B2920B3395D005FBDBB /* MPMRAIDInterstitialViewController.m in Sources */, - 45A37B4C20B3395E005FBDBB /* MPVASTCreative.m in Sources */, - 45A37AED20B3395D005FBDBB /* MPRewardedVideoAdapter.m in Sources */, - 45A37B0A20B3395D005FBDBB /* MPBannerCustomEventAdapter.m in Sources */, - 45A37B3020B3395D005FBDBB /* MRBundleManager.m in Sources */, - 45A37B3920B3395E005FBDBB /* MOPUBExperimentProvider.m in Sources */, - 45A37AE120B3395D005FBDBB /* MPTableViewAdPlacer.m in Sources */, - 45A37B9020B33D63005FBDBB /* FacebookNativeCustomEvent.m in Sources */, - 45A37AF120B3395D005FBDBB /* MPRewardedVideoError.m in Sources */, - 45A37B3C20B3395E005FBDBB /* MPUserInteractionGestureRecognizer.m in Sources */, - 45A37ABD20B3395D005FBDBB /* MOPUBNativeVideoImpressionAgent.m in Sources */, - 45A37B3D20B3395E005FBDBB /* MPAnalyticsTracker.m in Sources */, - 45A37ACE20B3395D005FBDBB /* MPStreamAdPlacementData.m in Sources */, - 45A37ADE20B3395D005FBDBB /* MPTableViewCellImpressionTracker.m in Sources */, - 45A37AB420B3395D005FBDBB /* MPWebView+Viewability.m in Sources */, - 45A37B4520B3395E005FBDBB /* NSBundle+MPAdditions.m in Sources */, - 45A37AF920B3395D005FBDBB /* MoPub.m in Sources */, - 45A37B3F20B3395E005FBDBB /* MPInternalUtils.m in Sources */, - 45A37AFB20B3395D005FBDBB /* MPHTTPNetworkTaskData.m in Sources */, - 45A37B9520B33D63005FBDBB /* FacebookBannerCustomEvent.m in Sources */, - 45A37AE320B3395D005FBDBB /* MPAdPositioning.m in Sources */, - 45A37AAE20B3395D005FBDBB /* MPBannerCustomEvent.m in Sources */, - 45A37B1B20B3395D005FBDBB /* MPURLResolver.m in Sources */, - 45A37B4120B3395E005FBDBB /* MPStoreKitProvider.m in Sources */, - 45A37ABF20B3395D005FBDBB /* MOPUBPlayerViewController.m in Sources */, - 45A37B2220B3395D005FBDBB /* MPMediationManager.m in Sources */, - 45A37B2F20B3395D005FBDBB /* MRExpandModalViewController.m in Sources */, - 45A37AF020B3395D005FBDBB /* MPRewardedVideoReward.m in Sources */, - 45A37B0E20B3395D005FBDBB /* MPAdServerCommunicator.m in Sources */, - 45A37B1720B3395D005FBDBB /* MPCountdownTimerView.m in Sources */, - 45A37B3420B3395D005FBDBB /* MPSessionTracker.m in Sources */, - 45A37B0C20B3395D005FBDBB /* MPAPIEndpoints.m in Sources */, - 45A37B0620B3395D005FBDBB /* MPCoreInstanceProvider.m in Sources */, - 45A37B9220B33D63005FBDBB /* FacebookAdvancedBidder.m in Sources */, - 45A37B5720B3395E005FBDBB /* MPVASTInline.m in Sources */, - 45A37B9420B33D63005FBDBB /* FacebookNativeAdAdapter.m in Sources */, - 45A37ADB20B3395D005FBDBB /* MPNativeAdSourceQueue.m in Sources */, - 45A37B3320B3395D005FBDBB /* MPAdvancedBiddingManager.m in Sources */, - 45A37B0520B3395D005FBDBB /* MPHTMLBannerCustomEvent.m in Sources */, - 45A37ACD20B3395D005FBDBB /* MPNativeAdError.m in Sources */, - 45A37B0B20B3395D005FBDBB /* MPAdDestinationDisplayAgent.m in Sources */, - 45A37AFE20B3395D005FBDBB /* MPInterstitialAdManager.m in Sources */, - 45A37AC620B3395D005FBDBB /* MPNativeCustomEvent.m in Sources */, - 45A37ACB20B3395D005FBDBB /* MPStaticNativeAdRendererSettings.m in Sources */, - 45A37AE720B3395D005FBDBB /* MPNativeAd.m in Sources */, - 45A37B1220B3395D005FBDBB /* MPLastResortDelegate.m in Sources */, - 45A37AE420B3395D005FBDBB /* MPNativeAdRendererConfiguration.m in Sources */, - 45A37B3B20B3395E005FBDBB /* MPReachability.m in Sources */, - 45A37AF420B3395D005FBDBB /* MPInterstitialAdController.m in Sources */, - 45A37B4A20B3395E005FBDBB /* UIView+MPAdditions.m in Sources */, - 45A37B3220B3395D005FBDBB /* MPHTTPNetworkSession.m in Sources */, - 45A37AEB20B3395D005FBDBB /* MPMoPubRewardedVideoCustomEvent.m in Sources */, - 45A37AC220B3395D005FBDBB /* MOPUBAVPlayerView.m in Sources */, - 45A37AE620B3395D005FBDBB /* MPStaticNativeAdRenderer.m in Sources */, - 45A37B2820B3395D005FBDBB /* MRVideoPlayerManager.m in Sources */, - 45A37B5320B3395E005FBDBB /* MPVASTCompanionAd.m in Sources */, - 45A37B1620B3395D005FBDBB /* MPClosableView.m in Sources */, - 45A37B5420B3395E005FBDBB /* MPVASTMacroProcessor.m in Sources */, - 45A37B2E20B3395D005FBDBB /* MRController.m in Sources */, - 45A37B5B20B3395E005FBDBB /* MPVASTManager.m in Sources */, - 45A37B1C20B3395D005FBDBB /* MPVideoConfig.m in Sources */, - 45A37AD420B3395D005FBDBB /* MPNativePositionResponseDeserializer.m in Sources */, - 45A37B3E20B3395E005FBDBB /* MPIdentityProvider.m in Sources */, - 45A37AEF20B3395D005FBDBB /* MPRewardedVideoConnection.m in Sources */, - 45A37B0D20B3395D005FBDBB /* MPAdBrowserController.m in Sources */, - 45A37B1420B3395D005FBDBB /* MPEnhancedDeeplinkRequest.m in Sources */, - 45A37B5220B3395E005FBDBB /* MPVASTLinearAd.m in Sources */, - 45A37B4720B3395E005FBDBB /* NSString+MPAdditions.m in Sources */, - 45A37ADA20B3395D005FBDBB /* MPAdPlacerInvocation.m in Sources */, - 45A37B4B20B3395E005FBDBB /* NSString+MPConsentStatus.m in Sources */, - 45A37AE920B3395D005FBDBB /* MPClientAdPositioning.m in Sources */, - 45A37B0720B3395D005FBDBB /* MPBannerAdManager.m in Sources */, - 45A37B4E20B3395E005FBDBB /* MPVASTAd.m in Sources */, - 45A37ABB20B3395D005FBDBB /* MOPUBPlayerView.m in Sources */, - 45A37B2520B3395D005FBDBB /* MRConstants.m in Sources */, - 45A37B3620B3395E005FBDBB /* MPGlobal.m in Sources */, - 45A37AFF20B3395D005FBDBB /* MPInterstitialCustomEventAdapter.m in Sources */, - 45A37AC120B3395D005FBDBB /* MOPUBNativeVideoAdConfigValues.m in Sources */, - 45A37B9320B33D63005FBDBB /* FacebookRewardedVideoCustomEvent.m in Sources */, - 45A37AF720B3395D005FBDBB /* MPAdConversionTracker.m in Sources */, - 45A37B1820B3395D005FBDBB /* MPRealTimeTimer.m in Sources */, - 45A37ADC20B3395D005FBDBB /* MPNativeAdRendererImageHandler.m in Sources */, - 45A37ACF20B3395D005FBDBB /* MPNativeAd+Internal.m in Sources */, - 45A37AB320B3395D005FBDBB /* MPViewabilityTracker.m in Sources */, - 45A37AFA20B3395D005FBDBB /* MPURLRequest.m in Sources */, - 45A37B3820B3395E005FBDBB /* MPLogging.m in Sources */, - 45A37AE820B3395D005FBDBB /* MPNativeAdRequestTargeting.m in Sources */, - 45A37AE520B3395D005FBDBB /* MPNativeAdRenderingImageLoader.m in Sources */, - 45A37AD820B3395D005FBDBB /* MPTableViewAdPlacerCell.m in Sources */, - 45A37B1520B3395D005FBDBB /* MPURLActionInfo.m in Sources */, - 45A37B2C20B3395D005FBDBB /* MRProperty.m in Sources */, - 45A37B2D20B3395D005FBDBB /* MRError.m in Sources */, - 45A37AFC20B3395D005FBDBB /* MPBaseInterstitialAdapter.m in Sources */, - 45A37B4020B3395E005FBDBB /* MPError.m in Sources */, - 45A37B2120B3395D005FBDBB /* MPInstanceProvider.m in Sources */, - 45A37B1120B3395D005FBDBB /* MPAdServerURLBuilder.m in Sources */, - 45A37AD320B3395D005FBDBB /* MPDiskLRUCache.m in Sources */, - 45A37AC920B3395D005FBDBB /* MPCollectionViewAdPlacer.m in Sources */, - 45A37AC820B3395D005FBDBB /* MPStreamAdPlacer.m in Sources */, - 45A37B1F20B3395D005FBDBB /* MPXMLParser.m in Sources */, - 45A37B0820B3395D005FBDBB /* MPBannerCustomEvent+Internal.m in Sources */, - 45A37AF220B3395D005FBDBB /* MPRewardedVideoCustomEvent+Caching.m in Sources */, - 45A37B0020B3395D005FBDBB /* MPVASTTracking.m in Sources */, - 45A37AEA20B3395D005FBDBB /* MPRewardedVideo.m in Sources */, - 45A37B4620B3395E005FBDBB /* NSHTTPURLResponse+MPAdditions.m in Sources */, - 45A37AB820B3395D005FBDBB /* MOPUBPlayerManager.m in Sources */, - 45A37AC320B3395D005FBDBB /* MOPUBAVPlayer.m in Sources */, - 45A37B5020B3395E005FBDBB /* MPVASTModel.m in Sources */, - 45A37AD520B3395D005FBDBB /* MPImageDownloadQueue.m in Sources */, - 45A37ADD20B3395D005FBDBB /* MPNativeView.m in Sources */, - 45A37B3720B3395E005FBDBB /* MPTimer.m in Sources */, - 45A37B4F20B3395E005FBDBB /* MPVASTResource.m in Sources */, - 45A37AE220B3395D005FBDBB /* MPNativeAdConstants.m in Sources */, - 45A37B1E20B3395D005FBDBB /* MPActivityViewControllerHelper+TweetShare.m in Sources */, - 45A37B3A20B3395E005FBDBB /* MPGeolocationProvider.m in Sources */, - 45A37AC420B3395D005FBDBB /* MOPUBNativeVideoAdRenderer.m in Sources */, - 45A37B4D20B3395E005FBDBB /* MPVASTMediaFile.m in Sources */, - 45A37B1320B3395D005FBDBB /* MPProgressOverlayView.m in Sources */, - 45A37B2A20B3395D005FBDBB /* MRCommand.m in Sources */, - 45A37B2720B3395D005FBDBB /* MRNativeCommandHandler.m in Sources */, - 45A37B2320B3395D005FBDBB /* MPConsentDialogViewController.m in Sources */, - 45A37AD620B3395D005FBDBB /* MPNativeAdConfigValues.m in Sources */, - 45A37AEC20B3395D005FBDBB /* MPRewardedVideoAdManager.m in Sources */, - 45A37B5520B3395E005FBDBB /* MPVASTDurationOffset.m in Sources */, - 45A37B0320B3395D005FBDBB /* MPAdWebViewAgent.m in Sources */, - 45A37AB620B3395D005FBDBB /* MPMoPubConfiguration.m in Sources */, - 45A37B4820B3395E005FBDBB /* NSJSONSerialization+MPAdditions.m in Sources */, - 45A37B9120B33D63005FBDBB /* FacebookInterstitialCustomEvent.m in Sources */, - 45A37ACC20B3395D005FBDBB /* MPNativeAdSource.m in Sources */, - 45A37B0920B3395D005FBDBB /* MPBaseBannerAdapter.m in Sources */, - 45A37B1920B3395D005FBDBB /* MPAdAlertManager.m in Sources */, - 45A37ADF20B3395D005FBDBB /* MPMoPubNativeCustomEvent.m in Sources */, - 45A37B5920B3395E005FBDBB /* MPVASTStringUtilities.m in Sources */, - 45A37ABA20B3395D005FBDBB /* MOPUBNativeVideoCustomEvent.m in Sources */, - 45A37AC020B3395D005FBDBB /* MOPUBReplayView.m in Sources */, - 45A37AE020B3395D005FBDBB /* MPNativeCache.m in Sources */, - 45A37AD020B3395D005FBDBB /* MPNativePositionSource.m in Sources */, - 45A37B5820B3395E005FBDBB /* MPVASTTrackingEvent.m in Sources */, - 45A37B1020B3395D005FBDBB /* MPActivityViewControllerHelper.m in Sources */, - 45A37AD720B3395D005FBDBB /* MPCollectionViewAdPlacerCell.m in Sources */, - 45A37B1A20B3395D005FBDBB /* MPAdAlertGestureRecognizer.m in Sources */, - 45A37B5120B3395E005FBDBB /* MPVASTWrapper.m in Sources */, - 45A37B4920B3395E005FBDBB /* UIWebView+MPAdditions.m in Sources */, - 45A37AF320B3395D005FBDBB /* MPRewardedVideoCustomEvent.m in Sources */, - 45A37B0220B3395D005FBDBB /* MPHTMLInterstitialViewController.m in Sources */, - 45A37AFD20B3395D005FBDBB /* MPInterstitialViewController.m in Sources */, - 45A37AF520B3395D005FBDBB /* MPConsentChangedNotification.m in Sources */, - 45A37B2B20B3395D005FBDBB /* MPMRAIDInterstitialCustomEvent.m in Sources */, - 45A37B2620B3395D005FBDBB /* MRBridge.m in Sources */, - 45A37B5620B3395E005FBDBB /* MPVASTIndustryIcon.m in Sources */, - 45A37AF820B3395D005FBDBB /* MPInterstitialCustomEvent.m in Sources */, - 45A37B0120B3395D005FBDBB /* MPHTMLInterstitialCustomEvent.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 341EF4731EA0C459001FC0AA /* AdHoc */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34F4098F1E9E27DB00E57AC0 /* common-release.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = L2QFT5NA2Q; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = AdHoc; - }; - 341EF4741EA0C459001FC0AA /* AdHoc */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/MOAT", - "$(PROJECT_DIR)/AdNetworkSupport/AdMob/SDK", - "$(PROJECT_DIR)/AdNetworkSupport/FacebookAudienceNetwork/SDK", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/Avid", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = AdHoc; - }; - 341EF4751EA0C482001FC0AA /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34F4098F1E9E27DB00E57AC0 /* common-release.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = N9X2A789QT; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = "Production Full"; - }; - 341EF4761EA0C482001FC0AA /* Production Full */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/MOAT", - "$(PROJECT_DIR)/AdNetworkSupport/AdMob/SDK", - "$(PROJECT_DIR)/AdNetworkSupport/FacebookAudienceNetwork/SDK", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/Avid", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = "Production Full"; - }; - 341EF4771EA0C49B001FC0AA /* Simulator Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34F4098F1E9E27DB00E57AC0 /* common-release.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 3T6FSDE8C7; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - MACH_O_TYPE = staticlib; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = "Simulator Release"; - }; - 341EF4781EA0C49B001FC0AA /* Simulator Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/MOAT", - "$(PROJECT_DIR)/AdNetworkSupport/AdMob/SDK", - "$(PROJECT_DIR)/AdNetworkSupport/FacebookAudienceNetwork/SDK", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/Avid", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = "Simulator Release"; - }; - 341EF4791EA0C4A3001FC0AA /* Simulator */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34F4098E1E9E27DB00E57AC0 /* common-debug.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 3T6FSDE8C7; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - MACH_O_TYPE = staticlib; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = Simulator; - }; - 341EF47A1EA0C4A3001FC0AA /* Simulator */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/MOAT", - "$(PROJECT_DIR)/AdNetworkSupport/AdMob/SDK", - "$(PROJECT_DIR)/AdNetworkSupport/FacebookAudienceNetwork/SDK", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/Avid", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Simulator; - }; - 34F407531E9E1D3500E57AC0 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34F4098E1E9E27DB00E57AC0 /* common-debug.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 3T6FSDE8C7; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - MACH_O_TYPE = staticlib; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = Debug; - }; - 34F407541E9E1D3500E57AC0 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34F4098F1E9E27DB00E57AC0 /* common-release.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = 3T6FSDE8C7; - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - MACH_O_TYPE = staticlib; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - }; - name = Release; - }; - 34F407561E9E1D3500E57AC0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/MOAT", - "$(PROJECT_DIR)/AdNetworkSupport/AdMob/SDK", - "$(PROJECT_DIR)/AdNetworkSupport/FacebookAudienceNetwork/SDK", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/Avid", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 34F407571E9E1D3500E57AC0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/MOAT", - "$(PROJECT_DIR)/AdNetworkSupport/AdMob/SDK", - "$(PROJECT_DIR)/AdNetworkSupport/FacebookAudienceNetwork/SDK", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Viewability/Avid", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 34F407471E9E1D3500E57AC0 /* Build configuration list for PBXProject "Mopub" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 34F407531E9E1D3500E57AC0 /* Debug */, - 341EF4791EA0C4A3001FC0AA /* Simulator */, - 34F407541E9E1D3500E57AC0 /* Release */, - 341EF4771EA0C49B001FC0AA /* Simulator Release */, - 341EF4751EA0C482001FC0AA /* Production Full */, - 341EF4731EA0C459001FC0AA /* AdHoc */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = AdHoc; - }; - 34F407551E9E1D3500E57AC0 /* Build configuration list for PBXNativeTarget "Mopub" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 34F407561E9E1D3500E57AC0 /* Debug */, - 341EF47A1EA0C4A3001FC0AA /* Simulator */, - 34F407571E9E1D3500E57AC0 /* Release */, - 341EF4781EA0C49B001FC0AA /* Simulator Release */, - 341EF4761EA0C482001FC0AA /* Production Full */, - 341EF4741EA0C459001FC0AA /* AdHoc */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = AdHoc; - }; -/* End XCConfigurationList section */ - }; - rootObject = 34F407441E9E1D3500E57AC0 /* Project object */; -} diff --git a/iphone/Maps/3party/MoPubSDK/Mopub.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iphone/Maps/3party/MoPubSDK/Mopub.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index c332ab746f..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Mopub.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h deleted file mode 100644 index def7c32988..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPCollectionViewAdPlacerCell.h -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import - -@interface MPCollectionViewAdPlacerCell : UICollectionViewCell - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m deleted file mode 100644 index 60e9cfb8f0..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPCollectionViewAdPlacerCell.m -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPCollectionViewAdPlacerCell.h" - -@implementation MPCollectionViewAdPlacerCell - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h deleted file mode 100755 index d9c5793380..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPImageDownloadQueue.h -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import - -typedef void (^MPImageDownloadQueueCompletionBlock)(NSArray *errors); - -@interface MPImageDownloadQueue : NSObject - -// pass useCachedImage:NO to force download of images. default is YES, cached images will not be re-downloaded -- (void)addDownloadImageURLs:(NSArray *)imageURLs completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock; -- (void)addDownloadImageURLs:(NSArray *)imageURLs completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock useCachedImage:(BOOL)useCachedImage; - -- (void)cancelAllDownloads; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h deleted file mode 100644 index a62bf50e3f..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPMoPubNativeCustomEvent.h -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPNativeCustomEvent.h" - -@interface MPMoPubNativeCustomEvent : MPNativeCustomEvent - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m deleted file mode 100644 index ed5ef0c5f4..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// MPMoPubNativeCustomEvent.m -// MoPubSDK -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPMoPubNativeCustomEvent.h" -#import "MPMoPubNativeAdAdapter.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeAdUtils.h" - -@implementation MPMoPubNativeCustomEvent - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info -{ - 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]]) { - if (![MPNativeAdUtils addURLString:[info objectForKey:key] toURLArray:imageURLs]) { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidImageURL()]; - } - } - } - - [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { - if (errors) { - MPLogDebug(@"%@", errors); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForImageDownloadFailure()]; - } else { - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; - } - }]; - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(nil)]; - } - -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h deleted file mode 100644 index bebf859e49..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPTableViewAdPlacerCell.h -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import - -@interface MPTableViewAdPlacerCell : UITableViewCell - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m deleted file mode 100644 index 4f6489e0d7..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPTableViewAdPlacerCell.m -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPTableViewAdPlacerCell.h" - -@implementation MPTableViewAdPlacerCell - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h deleted file mode 100644 index b7baa85768..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPTableViewCellImpressionTracker.h -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import - -@protocol MPTableViewCellImpressionTrackerDelegate; - -@interface MPTableViewCellImpressionTracker : NSObject - -- (id)initWithTableView:(UITableView *)tableView delegate:(id)delegate; -- (void)startTracking; -- (void)stopTracking; - -@end - -@protocol MPTableViewCellImpressionTrackerDelegate - -- (void)tracker:(MPTableViewCellImpressionTracker *)tracker didDetectVisibleRowsAtIndexPaths:(NSArray *)indexPaths; - -@end \ No newline at end of file diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m b/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m deleted file mode 100644 index 37bc44b9dc..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m +++ /dev/null @@ -1,82 +0,0 @@ -// -// MPTableViewCellImpressionTracker.m -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPTableViewCellImpressionTracker.h" - -@interface MPTableViewCellImpressionTracker () - -@property (nonatomic, strong) UITableView *tableView; -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) NSTimer *timer; - -@end - -#define MPTableViewCellImpressionTrackerTimeInterval 0.25 - -@implementation MPTableViewCellImpressionTracker - -- (id)initWithTableView:(UITableView *)tableView delegate:(id)delegate -{ - self = [super init]; - if (self) { - _tableView = tableView; - _delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [_timer invalidate]; -} - -- (void)startTracking -{ - [self.timer invalidate]; - self.timer = [NSTimer timerWithTimeInterval:MPTableViewCellImpressionTrackerTimeInterval target:self selector:@selector(tick:) userInfo:nil repeats:YES]; - - [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; -} - -- (void)stopTracking -{ - [self.timer invalidate]; - self.timer = nil; -} - -#pragma mark - Internal - -- (void)tick:(NSTimer *)timer -{ - NSMutableArray *indexPathsForVisibleRows = [[self.tableView indexPathsForVisibleRows] mutableCopy]; - NSUInteger rowCount = [indexPathsForVisibleRows count]; - - // For our purposes, "visible" means that more than half of the cell is on-screen. - // Filter -indexPathsForVisibleRows to fit this definition. - if (rowCount > 1) { - NSIndexPath *firstVisibleRow = [indexPathsForVisibleRows objectAtIndex:0]; - if (![self isMajorityOfCellAtIndexPathVisible:firstVisibleRow]) { - [indexPathsForVisibleRows removeObjectAtIndex:0]; - } - - NSIndexPath *lastVisibleRow = [indexPathsForVisibleRows lastObject]; - if (![self isMajorityOfCellAtIndexPathVisible:lastVisibleRow]) { - [indexPathsForVisibleRows removeLastObject]; - } - } - - if ([indexPathsForVisibleRows count]) { - [self.delegate tracker:self didDetectVisibleRowsAtIndexPaths:[NSArray arrayWithArray:indexPathsForVisibleRows]]; - } -} - -- (BOOL)isMajorityOfCellAtIndexPathVisible:(NSIndexPath *)indexPath -{ - CGRect cellRect = [self.tableView rectForRowAtIndexPath:indexPath]; - CGPoint cellRectMidY = CGPointMake(0, CGRectGetMidY(cellRect)); - return CGRectContainsPoint(self.tableView.bounds, cellRectMidY); -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/MPNativeAdData.m b/iphone/Maps/3party/MoPubSDK/NativeAds/MPNativeAdData.m deleted file mode 100644 index 08cf9c8a09..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/MPNativeAdData.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPNativeAdData.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import "MPNativeAdData.h" - -@implementation MPNativeAdData - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h b/iphone/Maps/3party/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h deleted file mode 100644 index 808f7a0c91..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MPNativeAdRequestTargeting.h -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import - -@class CLLocation; - -/** - * The `MPNativeAdRequestTargeting` class is used to attach targeting information to - * `MPNativeAdRequest` objects. - */ - -@interface MPNativeAdRequestTargeting : NSObject - -/** @name Creating a Targeting Object */ - -/** - * Creates and returns an empty MPNativeAdRequestTargeting object. - * - * @return A newly initialized MPNativeAdRequestTargeting object. - */ -+ (MPNativeAdRequestTargeting *)targeting; - -/** @name Targeting Parameters */ - -/** - * 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. - */ -@property (nonatomic, copy) CLLocation *location; - -/** - * 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 desiredAssets. - */ -@property (nonatomic, strong) NSSet *desiredAssets; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h b/iphone/Maps/3party/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h deleted file mode 100644 index c8c9d59589..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MOPUBNativeVideoImpressionAgent.h -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import -#import - -@interface MOPUBNativeVideoImpressionAgent : NSObject - -- (instancetype)initWithVideoView:(UIView *)videoView requiredVisibilityPercentage:(CGFloat)visiblePercentage requiredPlaybackDuration:(NSTimeInterval)playbackDuration; - -- (BOOL)shouldTrackImpressionWithCurrentPlaybackTime:(NSTimeInterval)currentPlaybackTime; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m b/iphone/Maps/3party/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m deleted file mode 100644 index 67a0f1f73d..0000000000 --- a/iphone/Maps/3party/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// MOPUBNativeVideoImpressionAgent.m -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MOPUBNativeVideoImpressionAgent.h" -#import "MPGlobal.h" - -static const NSTimeInterval kInvalidTimestamp = -1; - -@interface MOPUBNativeVideoImpressionAgent () - -@property (nonatomic) CGFloat requiredVisiblePercentage; -@property (nonatomic) NSTimeInterval requiredPlaybackDuration; -@property (nonatomic) NSTimeInterval visibilitySatisfiedPlaybackTime; -@property (nonatomic, weak) UIView *measuredVideoView; -@property (nonatomic) BOOL requirementsSatisfied; - -@end - -@implementation MOPUBNativeVideoImpressionAgent - -- (instancetype)initWithVideoView:(UIView *)videoView requiredVisibilityPercentage:(CGFloat)visiblePercentage requiredPlaybackDuration:(NSTimeInterval)playbackDuration -{ - self = [super init]; - - if (self) { - _measuredVideoView = videoView; - _requiredVisiblePercentage = visiblePercentage; - _requiredPlaybackDuration = playbackDuration; - _visibilitySatisfiedPlaybackTime = kInvalidTimestamp; - _requirementsSatisfied = NO; - } - - return self; -} - -- (BOOL)shouldTrackImpressionWithCurrentPlaybackTime:(NSTimeInterval)currentPlaybackTime -{ - // this class's work is done once the requirements are met - if (!self.requirementsSatisfied) { - if (MPViewIntersectsParentWindowWithPercent(self.measuredVideoView, self.requiredVisiblePercentage)) { - // if this is the first time we satisfied the visibility requirement or - // if the user replays the video and we haven't satisfied the impression yet, set satisfied playback timestamp - if (self.visibilitySatisfiedPlaybackTime == kInvalidTimestamp || self.visibilitySatisfiedPlaybackTime > currentPlaybackTime) { - self.visibilitySatisfiedPlaybackTime = currentPlaybackTime; - } - - // we consider the requirements met if the visibility requirements are met for requiredPlaybackDuration seconds of actual continuous playback - if (currentPlaybackTime - self.visibilitySatisfiedPlaybackTime >= self.requiredPlaybackDuration) { - self.requirementsSatisfied = YES; - } - } else { - self.visibilitySatisfiedPlaybackTime = kInvalidTimestamp; - } - } - - return self.requirementsSatisfied; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Resources/MPCountdownTimer.html b/iphone/Maps/3party/MoPubSDK/Resources/MPCountdownTimer.html deleted file mode 100644 index 70a496a266..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Resources/MPCountdownTimer.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - -
-
- -
-
- - diff --git a/iphone/Maps/3party/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m b/iphone/Maps/3party/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m deleted file mode 100644 index 108799acbe..0000000000 --- a/iphone/Maps/3party/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m +++ /dev/null @@ -1,173 +0,0 @@ -// -// MPMoPubRewardedPlayableCustomEvent.m -// MoPubSDK -// -// Copyright © 2016 MoPub. All rights reserved. -// - -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MPInstanceProvider.h" -#import "MPLogging.h" -#import "MPRewardedVideoError.h" -#import "MPCountdownTimerView.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; -@end - -@implementation MPMoPubRewardedPlayableCustomEvent - -- (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 { - MPLogInfo(@"Loading MoPub rewarded playable"); - 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 { - if (self.hasAdAvailable) { - // Add the countdown timer to the interstitial and start the timer. - self.timerView = [[MPCountdownTimerView alloc] initWithFrame:viewController.view.bounds duration:self.countdownDuration]; - [self.interstitial.view addSubview:self.timerView]; - - __weak __typeof__(self) weakSelf = self; - [self.timerView startWithTimerCompletion:^(BOOL hasElapsed) { - [weakSelf rewardUserWithConfiguration:self.configuration timerHasElapsed:hasElapsed]; - [weakSelf showCloseButton]; - }]; - - [self.interstitial presentInterstitialFromViewController:viewController]; - } - else { - MPLogInfo(@"Failed to show MoPub rewarded playable"); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForCustomEvent:self error:error]; - [self showCloseButton]; - } -} - -#pragma mark - MPInterstitialViewControllerDelegate - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable did load"); - self.adAvailable = YES; - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable did appear"); - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable will appear"); - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable failed to load"); - self.adAvailable = NO; - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial { - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)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:(MPInterstitialViewController *)interstitial { - [self rewardUserWithConfiguration:self.configuration timerHasElapsed:NO]; - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial { - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; -} - -#pragma mark - MPPrivateRewardedVideoCustomEventDelegate - -- (NSString *)adUnitId { - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)configuration { - return [self.delegate configuration]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m b/iphone/Maps/3party/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m deleted file mode 100644 index 01fae42b6f..0000000000 --- a/iphone/Maps/3party/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m +++ /dev/null @@ -1,134 +0,0 @@ -// -// MPMoPubRewardedVideoCustomEvent.m -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPInstanceProvider.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 - -@implementation MPMoPubRewardedVideoCustomEvent - -@dynamic delegate; - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub rewarded video"); - self.interstitial = [[MPInstanceProvider sharedProvider] buildMPMRAIDInterstitialViewControllerWithDelegate:self - configuration:[self.delegate configuration]]; - - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (BOOL)hasAdAvailable -{ - return self.adAvailable; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // no-op -} - -- (void)handleCustomEventInvalidated -{ - // no-op -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController -{ - if ([self hasAdAvailable]) { - [self.interstitial presentInterstitialFromViewController:viewController]; - } else { - MPLogInfo(@"Failed to show MoPub rewarded video"); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForCustomEvent:self error:error]; - } -} - -#pragma mark - MPMRAIDInterstitialViewControllerDelegate - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video did load"); - self.adAvailable = YES; - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video did appear"); - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video will appear"); - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video failed to load"); - self.adAvailable = NO; - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial -{ - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)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:(MPInterstitialViewController *)interstitial -{ - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial -{ - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; -} - -- (void)interstitialRewardedVideoEnded -{ - MPLogInfo(@"MoPub rewarded video finished playing."); - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:[self configuration].selectedReward]; -} - -#pragma mark - MPPrivateRewardedVideoCustomEventDelegate -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)configuration -{ - return [self.delegate configuration]; -} - -@end diff --git a/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h b/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h deleted file mode 100644 index cb3a0577fc..0000000000 --- a/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPRewardedVideoCustomEvent+Caching.h -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "MPRewardedVideoCustomEvent.h" - -/** - * Provides caching support for network SDK initialization parameters. - */ -@interface MPRewardedVideoCustomEvent (Caching) - -/** - * Updates the initialization parameters for the current network. - * @param params New set of initialization parameters. Nothing will be done if `nil` is passed in. - */ -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params; - -/** - * Retrieves the initialization parameters for the current network (if any). - * @return The cached initialization parameters for the network. This may be `nil` if not parameters were found. - */ -- (NSDictionary * _Nullable)cachedInitializationParameters; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m b/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m deleted file mode 100644 index 678c99d2b9..0000000000 --- a/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPRewardedVideoCustomEvent+Caching.m -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "MPRewardedVideoCustomEvent+Caching.h" -#import "MPLogging.h" -#import "MPMediationManager.h" - -@implementation MPRewardedVideoCustomEvent (Caching) - -- (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/3party/MoPubSDK/RewardedVideo/MPRewardedVideoError.m b/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoError.m deleted file mode 100644 index b02d26cea9..0000000000 --- a/iphone/Maps/3party/MoPubSDK/RewardedVideo/MPRewardedVideoError.m +++ /dev/null @@ -1,10 +0,0 @@ -// -// MPRewardedVideoError.m -// MoPubSDK -// -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPRewardedVideoError.h" - -NSString * const MoPubRewardedVideoAdsSDKDomain = @"MoPubRewardedVideoAdsSDKDomain"; \ No newline at end of file diff --git a/iphone/Maps/3party/MoPubSDK/Viewability/MPWebView+Viewability.h b/iphone/Maps/3party/MoPubSDK/Viewability/MPWebView+Viewability.h deleted file mode 100644 index 59be501d71..0000000000 --- a/iphone/Maps/3party/MoPubSDK/Viewability/MPWebView+Viewability.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPWebView+Viewability.h -// MoPubSDK -// -// Copyright © 2016 MoPub. All rights reserved. -// - -#import "MPWebView.h" - -@interface MPWebView (Viewability) - -// Returns the UIWebView or WKWebView instance attached to this MPWebView. If using WKWebView, this property will return -// the WKWebView instance regardless of if it's currently in the view hierarchy of this 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/Bridging-Header.h b/iphone/Maps/Bridging-Header.h index 8ebd30915a..6355b4b1b5 100644 --- a/iphone/Maps/Bridging-Header.h +++ b/iphone/Maps/Bridging-Header.h @@ -14,8 +14,8 @@ #import "3party/Alohalytics/src/alohalytics_objc.h" #import "MPNativeAd+MWM.h" -#import "MPNativeAd.h" -#import "MoPub-Bridging-Header.h" +//#import "MPNativeAd.h" +//#import "MoPub-Bridging-Header.h" #import "UIKitCategories.h" #import "private.h" @@ -23,7 +23,8 @@ #import #import "BookmarksVC.h" -#import "FacebookNativeAdAdapter.h" +//#import "FacebookNativeAdAdapter.h" +#import "CatalogPromoItem.h" #import "CoreNotificationWrapper.h" #import "MapViewController.h" #import "MWMActionBarButton.h" diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index baa1b88559..732bfffd93 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -175,7 +175,6 @@ 3490D2E31CE9DD2500D0B838 /* MWMSideButtonsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3490D2DD1CE9DD2500D0B838 /* MWMSideButtonsView.xib */; }; 34926BE71EA4C2A700DCF14C /* SearchBanners.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34926BE51EA4C2A700DCF14C /* SearchBanners.swift */; }; 34943BBB1E2626B200B14F84 /* WelcomePageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34943BB91E2626B200B14F84 /* WelcomePageController.swift */; }; - 3495433D1EB22D9600F08F73 /* MPAdBrowserController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3495433C1EB22D9600F08F73 /* MPAdBrowserController.xib */; }; 349A13831DEC138C00C7DB60 /* MWMMobileInternetAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 349A13801DEC138C00C7DB60 /* MWMMobileInternetAlert.m */; }; 349A13851DEC138C00C7DB60 /* MWMMobileInternetAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A13811DEC138C00C7DB60 /* MWMMobileInternetAlert.xib */; }; 349D1ABC1E2D05EF004A2006 /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349D1ABA1E2D05EF004A2006 /* SearchBar.swift */; }; @@ -305,7 +304,6 @@ 34F4073B1E9E1AFF00E57AC0 /* MopubBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F407241E9E1AFF00E57AC0 /* MopubBanner.swift */; }; 34F4073E1E9E1AFF00E57AC0 /* MPNativeAd+MWM.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F407261E9E1AFF00E57AC0 /* MPNativeAd+MWM.m */; }; 34F407411E9E1AFF00E57AC0 /* RBBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F4072A1E9E1AFF00E57AC0 /* RBBanner.swift */; }; - 34F409891E9E1DD200E57AC0 /* libMopub.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F4075D1E9E1D7A00E57AC0 /* libMopub.a */; }; 34F5E0D41E3F254800B1C415 /* UIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F5E0D21E3F254800B1C415 /* UIView+Hierarchy.swift */; }; 34F73F9C1E082FF800AC1FD6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 34F73F5F1E082FF700AC1FD6 /* InfoPlist.strings */; }; 34F73F9F1E082FF800AC1FD6 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 34F73F611E082FF800AC1FD6 /* Localizable.strings */; }; @@ -332,7 +330,6 @@ 4586D0C41F48121A00DF9CE5 /* libbsdiff.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4586D0C31F48121A00DF9CE5 /* libbsdiff.a */; }; 4586D0E71F4813AB00DF9CE5 /* libmwm_diff.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4586D0E61F4813AB00DF9CE5 /* libmwm_diff.a */; }; 4598438621394CFD00F8CAB2 /* MetalPerformanceShaders.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4598438521394CFD00F8CAB2 /* MetalPerformanceShaders.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - 45A37B9E20B33F5E005FBDBB /* FBAudienceNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45A37B9D20B33F5D005FBDBB /* FBAudienceNetwork.framework */; }; 45CBCCBA20590AAB006B55C2 /* libkml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 45CBCCBB20590AAB006B55C2 /* libkml.a */; }; 45FFD65D1E965EBE00DB854E /* liblocal_ads.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 45FFD65C1E965EBE00DB854E /* liblocal_ads.a */; }; 4707E4B12372FE860017DF6E /* PlacePageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4707E4AF2372FE860017DF6E /* PlacePageViewController.swift */; }; @@ -820,23 +817,6 @@ F6FEA82E1C58F108007223CC /* MWMButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F6FEA82C1C58E89B007223CC /* MWMButton.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 3470403A1EA6628700038379 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 34F407581E9E1D7A00E57AC0 /* Mopub.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 34F4074B1E9E1D3500E57AC0; - remoteInfo = Mopub; - }; - 34F4075C1E9E1D7A00E57AC0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 34F407581E9E1D7A00E57AC0 /* Mopub.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 34F4074C1E9E1D3500E57AC0; - remoteInfo = Mopub; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ 0B07BBB5C2EFC6F60EF51BC8 /* Pods-MAPS.ME.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAPS.ME.debug.xcconfig"; path = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig"; sourceTree = ""; }; 166595280BE641CF8ADE2209 /* Pods-MAPS.ME.production full.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAPS.ME.production full.xcconfig"; path = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig"; sourceTree = ""; }; @@ -1278,7 +1258,6 @@ 34F407261E9E1AFF00E57AC0 /* MPNativeAd+MWM.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPNativeAd+MWM.m"; sourceTree = ""; }; 34F407281E9E1AFF00E57AC0 /* MWMBannerHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMBannerHelpers.h; sourceTree = ""; }; 34F4072A1E9E1AFF00E57AC0 /* RBBanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RBBanner.swift; sourceTree = ""; }; - 34F407581E9E1D7A00E57AC0 /* Mopub.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Mopub.xcodeproj; path = MoPubSDK/Mopub.xcodeproj; sourceTree = ""; }; 34F5E0D21E3F254800B1C415 /* UIView+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Hierarchy.swift"; sourceTree = ""; }; 34F5E0DA1E3F3ED300B1C415 /* MWMRoutePoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMRoutePoint.h; sourceTree = ""; }; 34F5E0DC1E3F51AF00B1C415 /* MWMCoreRouterType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCoreRouterType.h; sourceTree = ""; }; @@ -2061,7 +2040,6 @@ 4586D0C41F48121A00DF9CE5 /* libbsdiff.a in Frameworks */, 34E6F2DB1F459C05008E14F9 /* GLKit.framework in Frameworks */, F6F8E3C51EF8469700F2DE8F /* libugc.a in Frameworks */, - 34F409891E9E1DD200E57AC0 /* libMopub.a in Frameworks */, 3488B03B1E9D13EF0068AFD8 /* UserNotifications.framework in Frameworks */, 45FFD65D1E965EBE00DB854E /* liblocal_ads.a in Frameworks */, 34D1B6F11E95096B0057E9C7 /* libicu.a in Frameworks */, @@ -2075,7 +2053,6 @@ 67B78B3F1E422C110018E590 /* SafariServices.framework in Frameworks */, 67B78B3D1E422BF60018E590 /* CoreData.framework in Frameworks */, 344D63181E795A3C006F17CB /* SystemConfiguration.framework in Frameworks */, - 45A37B9E20B33F5E005FBDBB /* FBAudienceNetwork.framework in Frameworks */, 450B5C832355F50200E9019E /* libweb_api.a in Frameworks */, 3446C6771DDCA9A200146687 /* libtraffic.a in Frameworks */, 34201E0C1DC0E33100D24118 /* libtracking.a in Frameworks */, @@ -2344,7 +2321,6 @@ 340474DD1E08199D00C92850 /* Fabric.framework */, 347D15C71F82362900E86251 /* GoogleSignIn.framework */, 347D15C81F82362900E86251 /* GoogleSignInDependencies.framework */, - 34F407581E9E1D7A00E57AC0 /* Mopub.xcodeproj */, 340474E91E08199D00C92850 /* MyTarget */, 340474EE1E08199D00C92850 /* MyTrackerSDK.framework */, ); @@ -3265,14 +3241,6 @@ path = RB; sourceTree = ""; }; - 34F407591E9E1D7A00E57AC0 /* Products */ = { - isa = PBXGroup; - children = ( - 34F4075D1E9E1D7A00E57AC0 /* libMopub.a */, - ); - name = Products; - sourceTree = ""; - }; 34F4B0641F6AC6890035F4F3 /* UGCViewModel */ = { isa = PBXGroup; children = ( @@ -4657,7 +4625,6 @@ buildRules = ( ); dependencies = ( - 3470403B1EA6628700038379 /* PBXTargetDependency */, ); name = MAPS.ME; productName = Maps; @@ -4735,12 +4702,6 @@ mainGroup = 29B97314FDCFA39411CA2CEA /* Maps */; productRefGroup = 19C28FACFE9D520D11CA2CBB /* Products */; projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 34F407591E9E1D7A00E57AC0 /* Products */; - ProjectRef = 34F407581E9E1D7A00E57AC0 /* Mopub.xcodeproj */; - }, - ); projectRoot = ""; targets = ( 6741A93D1BF340DE002C974C /* MAPS.ME */, @@ -4748,16 +4709,6 @@ }; /* End PBXProject section */ -/* Begin PBXReferenceProxy section */ - 34F4075D1E9E1D7A00E57AC0 /* libMopub.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libMopub.a; - remoteRef = 34F4075C1E9E1D7A00E57AC0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - /* Begin PBXResourcesBuildPhase section */ 6741A9411BF340DE002C974C /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -4768,7 +4719,6 @@ 4560F585213D53C100CC736C /* shaders_metal.metallib in Resources */, F642D1231F0F9D1D005E3C25 /* ugc_types.csv in Resources */, 34E50DFB1F6FCC96008EED49 /* UGCReviewCell.xib in Resources */, - 3495433D1EB22D9600F08F73 /* MPAdBrowserController.xib in Resources */, 6741A9531BF340DE002C974C /* 01_dejavusans.ttf in Resources */, 6741A9541BF340DE002C974C /* 02_droidsans-fallback.ttf in Resources */, 479D305B22C62F4000D18278 /* MWMBookmarksBannerViewController.xib in Resources */, @@ -5019,18 +4969,18 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh", "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework", - "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework", "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework", "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework", "${BUILT_PRODUCTS_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework", + "${BUILT_PRODUCTS_DIR}/mopub-ios-sdk/MoPub.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ActionSheetPicker_3_0.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKLoginKit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flurry_iOS_SDK.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MoPub.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -5602,14 +5552,6 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 3470403B1EA6628700038379 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Mopub; - targetProxy = 3470403A1EA6628700038379 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 34F73F5F1E082FF700AC1FD6 /* InfoPlist.strings */ = { isa = PBXVariantGroup; diff --git a/iphone/Maps/Podfile b/iphone/Maps/Podfile index 2fbee894b6..e4a7e968aa 100644 --- a/iphone/Maps/Podfile +++ b/iphone/Maps/Podfile @@ -11,8 +11,10 @@ target 'MAPS.ME' do pod 'AppsFlyerFramework', '4.9.0' pod 'Pushwoosh', '5.16.0' pod 'ActionSheetPicker-3.0', '2.3.0' -pod 'FBSDKCoreKit', '4.42.0' -pod 'FBSDKLoginKit', '4.42.0' +pod 'FBSDKCoreKit', '5.15' +pod 'FBSDKLoginKit', '5.15' pod 'Flurry-iOS-SDK/FlurrySDK', '10.1' +pod 'mopub-ios-sdk', '~> 5.10' +pod 'MoPub-FacebookAudienceNetwork-Adapters', '5.6.0.0' end diff --git a/iphone/Maps/Podfile.lock b/iphone/Maps/Podfile.lock index d07689cc2b..8247a869e4 100644 --- a/iphone/Maps/Podfile.lock +++ b/iphone/Maps/Podfile.lock @@ -1,17 +1,38 @@ PODS: - ActionSheetPicker-3.0 (2.3.0) - AppsFlyerFramework (4.9.0) - - Bolts (1.9.0): - - Bolts/AppLinks (= 1.9.0) - - Bolts/Tasks (= 1.9.0) - - Bolts/AppLinks (1.9.0): - - Bolts/Tasks - - Bolts/Tasks (1.9.0) - - FBSDKCoreKit (4.42.0): - - Bolts (~> 1.9) - - FBSDKLoginKit (4.42.0): - - FBSDKCoreKit + - FBAudienceNetwork (5.6.0): + - FBSDKCoreKit/Basics (>= 5.6.0) + - FBSDKCoreKit (5.15.0): + - FBSDKCoreKit/Basics (= 5.15.0) + - FBSDKCoreKit/Core (= 5.15.0) + - FBSDKCoreKit/Basics (5.15.0) + - FBSDKCoreKit/Core (5.15.0): + - FBSDKCoreKit/Basics + - FBSDKLoginKit (5.15.0): + - FBSDKLoginKit/Login (= 5.15.0) + - FBSDKLoginKit/Login (5.15.0): + - FBSDKCoreKit (~> 5.0) - Flurry-iOS-SDK/FlurrySDK (10.1.0) + - MoPub-FacebookAudienceNetwork-Adapters (5.6.0.0): + - MoPub-FacebookAudienceNetwork-Adapters/MoPub (= 5.6.0.0) + - MoPub-FacebookAudienceNetwork-Adapters/Network (= 5.6.0.0) + - MoPub-FacebookAudienceNetwork-Adapters/MoPub (5.6.0.0): + - mopub-ios-sdk/Core (~> 5.6) + - MoPub-FacebookAudienceNetwork-Adapters/Network (5.6.0.0): + - FBAudienceNetwork (= 5.6.0) + - mopub-ios-sdk/Core (~> 5.6) + - mopub-ios-sdk (5.10.0): + - mopub-ios-sdk/MoPubSDK (= 5.10.0) + - mopub-ios-sdk/Avid (5.10.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/Core (5.10.0) + - mopub-ios-sdk/Moat (5.10.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/MoPubSDK (5.10.0): + - mopub-ios-sdk/Avid + - mopub-ios-sdk/Core + - mopub-ios-sdk/Moat - Pushwoosh (5.16.0): - Pushwoosh/Core (= 5.16.0) - Pushwoosh/Core (5.16.0) @@ -19,30 +40,36 @@ PODS: DEPENDENCIES: - ActionSheetPicker-3.0 (= 2.3.0) - AppsFlyerFramework (= 4.9.0) - - FBSDKCoreKit (= 4.42.0) - - FBSDKLoginKit (= 4.42.0) + - FBSDKCoreKit (= 5.15) + - FBSDKLoginKit (= 5.15) - Flurry-iOS-SDK/FlurrySDK (= 10.1) + - MoPub-FacebookAudienceNetwork-Adapters (= 5.6.0.0) + - mopub-ios-sdk (~> 5.10) - Pushwoosh (= 5.16.0) SPEC REPOS: trunk: - ActionSheetPicker-3.0 - AppsFlyerFramework - - Bolts + - FBAudienceNetwork - FBSDKCoreKit - FBSDKLoginKit - Flurry-iOS-SDK + - MoPub-FacebookAudienceNetwork-Adapters + - mopub-ios-sdk - Pushwoosh SPEC CHECKSUMS: ActionSheetPicker-3.0: eef157d75e151f255c5333d26656c7fbfe905a51 AppsFlyerFramework: f57e5d590ad3124d3e594a76032a181bc91ec6cd - Bolts: ac6567323eac61e203f6a9763667d0f711be34c8 - FBSDKCoreKit: aa42f1c384775f8b075f53a43080474278e9701d - FBSDKLoginKit: 373830c68aa48c9e8f0bfed93a3e32d2ca8963a0 + FBAudienceNetwork: 1ea63543665445a3a5b4a059e8210a343b6ab3c1 + FBSDKCoreKit: 083ba8c8e37939c0b4c84250654c9be0aef0c2f8 + FBSDKLoginKit: bd40354a96e4718765713ef225bc368f10dc395d Flurry-iOS-SDK: be6bfad47f3b3c15a38b5e396935ef74512f1c38 + MoPub-FacebookAudienceNetwork-Adapters: 3cec249235d12e3fec9a01bf559d608fa3ec05e1 + mopub-ios-sdk: 3d65133b95b6498aa871a66818a11a5ba307e565 Pushwoosh: 6cba171e52f3f7b8ccd280f492a5831deac2f594 -PODFILE CHECKSUM: 44680f7ff08ae6986147c4f7799f2c6971243c0b +PODFILE CHECKSUM: 68054a76d0d74219f643b4055fca97f6fcdcf5d1 COCOAPODS: 1.8.3 diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h deleted file mode 100644 index bda32ee800..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(void); - -/*! - The consumer view of a CancellationToken. - Propagates notification that operations should be canceled. - A BFCancellationToken has methods to inspect whether the token has been cancelled. - */ -@interface BFCancellationToken : NSObject - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Register a block to be notified when the token is cancelled. - If the token is already cancelled the delegate will be notified immediately. - */ -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m deleted file mode 100644 index 4acd58900c..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationToken.m +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationToken () - -@property (nullable, nonatomic, strong) NSMutableArray *registrations; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationTokenRegistration (BFCancellationToken) - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate; - -- (void)notifyDelegate; - -@end - -@implementation BFCancellationToken - -@synthesize cancellationRequested = _cancellationRequested; - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _registrations = [NSMutableArray array]; - _lock = [NSObject new]; - - return self; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - @synchronized(self.lock) { - [self throwIfDisposed]; - return _cancellationRequested; - } -} - -- (void)cancel { - NSArray *registrations; - @synchronized(self.lock) { - [self throwIfDisposed]; - if (_cancellationRequested) { - return; - } - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - _cancellationRequested = YES; - registrations = [self.registrations copy]; - } - - [self notifyCancellation:registrations]; -} - -- (void)notifyCancellation:(NSArray *)registrations { - for (BFCancellationTokenRegistration *registration in registrations) { - [registration notifyDelegate]; - } -} - -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block { - @synchronized(self.lock) { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration registrationWithToken:self delegate:[block copy]]; - [self.registrations addObject:registration]; - - return registration; - } -} - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration { - @synchronized(self.lock) { - [self throwIfDisposed]; - [self.registrations removeObject:registration]; - } -} - -// Delay on a non-public method to prevent interference with a user calling performSelector or -// cancelPreviousPerformRequestsWithTarget on the public method -- (void)cancelPrivate { - [self cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [self throwIfDisposed]; - if (millis < -1) { - [NSException raise:NSInvalidArgumentException format:@"Delay must be >= -1"]; - } - - if (millis == 0) { - [self cancel]; - return; - } - - @synchronized(self.lock) { - [self throwIfDisposed]; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - if (self.cancellationRequested) { - return; - } - - if (millis != -1) { - double delay = (double)millis / 1000; - [self performSelector:@selector(cancelPrivate) withObject:nil afterDelay:delay]; - } - } -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - [self.registrations makeObjectsPerformSelector:@selector(dispose)]; - self.registrations = nil; - self.disposed = YES; - } -} - -- (void)throwIfDisposed { - if (self.disposed) { - [NSException raise:NSInternalInconsistencyException format:@"Object already disposed"]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h deleted file mode 100644 index fa6090f667..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Represents the registration of a cancellation observer with a cancellation token. - Can be used to unregister the observer at a later time. - */ -@interface BFCancellationTokenRegistration : NSObject - -/*! - Removes the cancellation observer registered with the token - and releases all resources associated with this registration. - */ -- (void)dispose; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m deleted file mode 100644 index f396c1c934..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationTokenRegistration.h" - -#import "BFCancellationToken.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationTokenRegistration () - -@property (nonatomic, weak) BFCancellationToken *token; -@property (nullable, nonatomic, strong) BFCancellationBlock cancellationObserverBlock; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationToken (BFCancellationTokenRegistration) - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration; - -@end - -@implementation BFCancellationTokenRegistration - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration new]; - registration.token = token; - registration.cancellationObserverBlock = delegate; - return registration; -} - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _lock = [NSObject new]; - - return self; -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - self.disposed = YES; - } - - BFCancellationToken *token = self.token; - if (token != nil) { - [token unregisterRegistration:self]; - self.token = nil; - } - self.cancellationObserverBlock = nil; -} - -- (void)notifyDelegate { - @synchronized(self.lock) { - [self throwIfDisposed]; - self.cancellationObserverBlock(); - } -} - -- (void)throwIfDisposed { - NSAssert(!self.disposed, @"Object already disposed"); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h deleted file mode 100644 index 4627e9958f..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFCancellationToken; - -/*! - BFCancellationTokenSource represents the producer side of a CancellationToken. - Signals to a CancellationToken that it should be canceled. - It is a cancellation token that also has methods - for changing the state of a token by cancelling it. - */ -@interface BFCancellationTokenSource : NSObject - -/*! - Creates a new cancellation token source. - */ -+ (instancetype)cancellationTokenSource; - -/*! - The cancellation token associated with this CancellationTokenSource. - */ -@property (nonatomic, strong, readonly) BFCancellationToken *token; - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Cancels the token if it has not already been cancelled. - */ -- (void)cancel; - -/*! - Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds. - @param millis The number of milliseconds to wait before completing the returned task. - If delay is `0` the cancel is executed immediately. If delay is `-1` any scheduled cancellation is stopped. - */ -- (void)cancelAfterDelay:(int)millis; - -/*! - Releases all resources associated with this token source, - including disposing of all registrations. - */ -- (void)dispose; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m deleted file mode 100644 index ee05cf048e..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationTokenSource.h" - -#import "BFCancellationToken.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationToken (BFCancellationTokenSource) - -- (void)cancel; -- (void)cancelAfterDelay:(int)millis; - -- (void)dispose; -- (void)throwIfDisposed; - -@end - -@implementation BFCancellationTokenSource - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _token = [BFCancellationToken new]; - - return self; -} - -+ (instancetype)cancellationTokenSource { - return [BFCancellationTokenSource new]; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - return _token.isCancellationRequested; -} - -- (void)cancel { - [_token cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [_token cancelAfterDelay:millis]; -} - -- (void)dispose { - [_token dispose]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h deleted file mode 100644 index 694c8a5fc2..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - An object that can run a given block. - */ -@interface BFExecutor : NSObject - -/*! - Returns a default executor, which runs continuations immediately until the call stack gets too - deep, then dispatches to a new GCD queue. - */ -+ (instancetype)defaultExecutor; - -/*! - Returns an executor that runs continuations on the thread where the previous task was completed. - */ -+ (instancetype)immediateExecutor; - -/*! - Returns an executor that runs continuations on the main thread. - */ -+ (instancetype)mainThreadExecutor; - -/*! - Returns a new executor that uses the given block to execute continuations. - @param block The block to use. - */ -+ (instancetype)executorWithBlock:(void(^)(void(^block)(void)))block; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `dispatch_queue_t` to dispatch all continuations onto. - */ -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `NSOperationQueue` to run all continuations on. - */ -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue; - -/*! - Runs the given block using this executor's particular strategy. - @param block The block to execute. - */ -- (void)execute:(void(^)(void))block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m deleted file mode 100644 index 05d49f1879..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFExecutor.m +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFExecutor.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Get the remaining stack-size of the current thread. - - @param totalSize The total stack size of the current thread. - - @return The remaining size, in bytes, available to the current thread. - - @note This function cannot be inlined, as otherwise the internal implementation could fail to report the proper - remaining stack space. - */ -__attribute__((noinline)) static size_t remaining_stack_size(size_t *restrict totalSize) { - pthread_t currentThread = pthread_self(); - - // NOTE: We must store stack pointers as uint8_t so that the pointer math is well-defined - uint8_t *endStack = pthread_get_stackaddr_np(currentThread); - *totalSize = pthread_get_stacksize_np(currentThread); - - // NOTE: If the function is inlined, this value could be incorrect - uint8_t *frameAddr = __builtin_frame_address(0); - - return (*totalSize) - (size_t)(endStack - frameAddr); -} - -@interface BFExecutor () - -@property (nonatomic, copy) void(^block)(void(^block)(void)); - -@end - -@implementation BFExecutor - -#pragma mark - Executor methods - -+ (instancetype)defaultExecutor { - static BFExecutor *defaultExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - defaultExecutor = [self executorWithBlock:^void(void(^block)(void)) { - // We prefer to run everything possible immediately, so that there is callstack information - // when debugging. However, we don't want the stack to get too deep, so if the remaining stack space - // is less than 10% of the total space, we dispatch to another GCD queue. - size_t totalStackSize = 0; - size_t remainingStackSize = remaining_stack_size(&totalStackSize); - - if (remainingStackSize < (totalStackSize / 10)) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); - } else { - @autoreleasepool { - block(); - } - } - }]; - }); - return defaultExecutor; -} - -+ (instancetype)immediateExecutor { - static BFExecutor *immediateExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - immediateExecutor = [self executorWithBlock:^void(void(^block)(void)) { - block(); - }]; - }); - return immediateExecutor; -} - -+ (instancetype)mainThreadExecutor { - static BFExecutor *mainThreadExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - mainThreadExecutor = [self executorWithBlock:^void(void(^block)(void)) { - if (![NSThread isMainThread]) { - dispatch_async(dispatch_get_main_queue(), block); - } else { - @autoreleasepool { - block(); - } - } - }]; - }); - return mainThreadExecutor; -} - -+ (instancetype)executorWithBlock:(void(^)(void(^block)(void)))block { - return [[self alloc] initWithBlock:block]; -} - -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue { - return [self executorWithBlock:^void(void(^block)(void)) { - dispatch_async(queue, block); - }]; -} - -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue { - return [self executorWithBlock:^void(void(^block)(void)) { - [queue addOperation:[NSBlockOperation blockOperationWithBlock:block]]; - }]; -} - -#pragma mark - Initializer - -- (instancetype)initWithBlock:(void(^)(void(^block)(void)))block { - self = [super init]; - if (!self) return self; - - _block = block; - - return self; -} - -#pragma mark - Execution - -- (void)execute:(void(^)(void))block { - self.block(block); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h deleted file mode 100644 index 99b2cf7de7..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFGeneric.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#pragma once - -/** - This exists to use along with `BFTask` and `BFTaskCompletionSource`. - - Instead of returning a `BFTask` with no generic type, or a generic type of 'NSNull' - when there is no usable result from a task, we use the type 'BFVoid', which will always have a value of `nil`. - - This allows you to provide a more enforced API contract to the caller, - as sending any message to `BFVoid` will result in a compile time error. - */ -@class _BFVoid_Nonexistant; -typedef _BFVoid_Nonexistant *BFVoid; diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h deleted file mode 100644 index 074c182de7..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An error code used for , if there were multiple errors. - */ -extern NSInteger const kBFMultipleErrorsError; - -/*! - An error userInfo key used if there were multiple errors on . - Value type is `NSArray *`. - */ -extern NSString *const BFTaskMultipleErrorsUserInfoKey; - -@class BFExecutor; -@class BFTask; - -/*! - The consumer view of a Task. A BFTask has methods to - inspect the state of the task, and to add continuations to - be run once the task is complete. - */ -@interface BFTask<__covariant ResultType> : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef __nullable id(^BFContinuationBlock)(BFTask *t); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(nullable ResultType)result; - -/*! - Creates a task that is already completed with the given error. - @param error The error for the task. - */ -+ (instancetype)taskWithError:(NSError *)error; - -/*! - Creates a task that is already cancelled. - */ -+ (instancetype)cancelledTask; - -/*! - Returns a task that will be completed (with result == nil) once - all of the input tasks have completed. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once all of the input tasks have completed. - If all tasks complete successfully without being faulted or cancelled the result will be - an `NSArray` of all task results in the order they were provided. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once there is at least one successful task. - The first task to successuly complete will set the result, all other tasks results are - ignored. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - */ -+ (BFTask *)taskWithDelay:(int)millis; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - @param token The cancellation token (optional). - */ -+ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable BFCancellationToken *)token; - -/*! - Returns a task that will be completed after the given block completes with - the specified executor. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to immediately schedule to run with the given executor. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -+ (instancetype)taskFromExecutor:(BFExecutor *)executor withBlock:(nullable id (^)(void))block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nullable, nonatomic, strong, readonly) ResultType result; - -/*! - The error of a failed task. - */ -@property (nullable, nonatomic, strong, readonly) NSError *error; - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error. - */ -@property (nonatomic, assign, readonly, getter=isFaulted) BOOL faulted; - -/*! - Whether this task has completed. - */ -@property (nonatomic, assign, readonly, getter=isCompleted) BOOL completed; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(block:)); - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken NS_SWIFT_NAME(continueWith(block:cancellationToken:)); - -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueWith(executor:block:)); - -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - his method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueWith(executor:block:cancellationToken:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(block:)); - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation or an error. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(block:cancellationToken:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or an error. - If it did, then the failure will be propagated to the returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block NS_SWIFT_NAME(continueOnSuccessWith(executor:block:)); - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation or an error. - If it did, then the failure will be propagated to the returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken -NS_SWIFT_NAME(continueOnSuccessWith(executor:block:cancellationToken:)); - -/*! - Waits until this operation is completed. - This method is inefficient and consumes a thread resource while - it's running. It should be avoided. This method logs a warning - message if it is used on the main thread. - */ -- (void)waitUntilFinished; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m deleted file mode 100644 index 0d6bd4cda2..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTask.m +++ /dev/null @@ -1,465 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFTask.h" - -#import - -#import "Bolts.h" - -NS_ASSUME_NONNULL_BEGIN - -__attribute__ ((noinline)) void warnBlockingOperationOnMainThread() { - NSLog(@"Warning: A long-running operation is being executed on the main thread. \n" - " Break on warnBlockingOperationOnMainThread() to debug."); -} - -NSString *const BFTaskErrorDomain = @"bolts"; -NSInteger const kBFMultipleErrorsError = 80175001; - -NSString *const BFTaskMultipleErrorsUserInfoKey = @"errors"; - -@interface BFTask () { - id _result; - NSError *_error; -} - -@property (nonatomic, assign, readwrite, getter=isCancelled) BOOL cancelled; -@property (nonatomic, assign, readwrite, getter=isFaulted) BOOL faulted; -@property (nonatomic, assign, readwrite, getter=isCompleted) BOOL completed; - -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic, strong) NSCondition *condition; -@property (nonatomic, strong) NSMutableArray *callbacks; - -@end - -@implementation BFTask - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _lock = [[NSObject alloc] init]; - _condition = [[NSCondition alloc] init]; - _callbacks = [NSMutableArray array]; - - return self; -} - -- (instancetype)initWithResult:(nullable id)result { - self = [super init]; - if (!self) return self; - - [self trySetResult:result]; - - return self; -} - -- (instancetype)initWithError:(NSError *)error { - self = [super init]; - if (!self) return self; - - [self trySetError:error]; - - return self; -} - -- (instancetype)initCancelled { - self = [super init]; - if (!self) return self; - - [self trySetCancelled]; - - return self; -} - -#pragma mark - Task Class methods - -+ (instancetype)taskWithResult:(nullable id)result { - return [[self alloc] initWithResult:result]; -} - -+ (instancetype)taskWithError:(NSError *)error { - return [[self alloc] initWithError:error]; -} - -+ (instancetype)cancelledTask { - return [[self alloc] initCancelled]; -} - -+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray *)tasks { - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int32_t cancelled = 0; - NSObject *lock = [[NSObject alloc] init]; - NSMutableArray *errors = [NSMutableArray array]; - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *t) { - if (t.error) { - @synchronized (lock) { - [errors addObject:t.error]; - } - } else if (t.cancelled) { - OSAtomicIncrement32Barrier(&cancelled); - } - - if (OSAtomicDecrement32Barrier(&total) == 0) { - if (errors.count > 0) { - if (errors.count == 1) { - tcs.error = [errors firstObject]; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ BFTaskMultipleErrorsUserInfoKey: errors }]; - tcs.error = error; - } - } else if (cancelled > 0) { - [tcs cancel]; - } else { - tcs.result = nil; - } - } - return nil; - }]; - } - return tcs.task; -} - -+ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks { - return [[self taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask * __unused task) { - return [tasks valueForKey:@"result"]; - }]; -} - -+ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks -{ - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int completed = 0; - __block int32_t cancelled = 0; - - NSObject *lock = [NSObject new]; - NSMutableArray *errors = [NSMutableArray new]; - - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *t) { - if (t.error != nil) { - @synchronized(lock) { - [errors addObject:t.error]; - } - } else if (t.cancelled) { - OSAtomicIncrement32Barrier(&cancelled); - } else { - if(OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { - [source setResult:t.result]; - } - } - - if (OSAtomicDecrement32Barrier(&total) == 0 && - OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { - if (cancelled > 0) { - [source cancel]; - } else if (errors.count > 0) { - if (errors.count == 1) { - source.error = errors.firstObject; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ @"errors": errors }]; - source.error = error; - } - } - } - // Abort execution of per tasks continuations - return nil; - }]; - } - return source.task; -} - - -+ (BFTask *)taskWithDelay:(int)millis { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - tcs.result = nil; - }); - return tcs.task; -} - -+ (BFTask *)taskWithDelay:(int)millis cancellationToken:(nullable BFCancellationToken *)token { - if (token.cancellationRequested) { - return [BFTask cancelledTask]; - } - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - if (token.cancellationRequested) { - [tcs cancel]; - return; - } - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskFromExecutor:(BFExecutor *)executor withBlock:(nullable id (^)(void))block { - return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { - return block(); - }]; -} - -#pragma mark - Custom Setters/Getters - -- (nullable id)result { - @synchronized(self.lock) { - return _result; - } -} - -- (BOOL)trySetResult:(nullable id)result { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - _result = result; - [self runContinuations]; - return YES; - } -} - -- (nullable NSError *)error { - @synchronized(self.lock) { - return _error; - } -} - -- (BOOL)trySetError:(NSError *)error { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _error = error; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCancelled { - @synchronized(self.lock) { - return _cancelled; - } -} - -- (BOOL)isFaulted { - @synchronized(self.lock) { - return _faulted; - } -} - -- (BOOL)trySetCancelled { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.cancelled = YES; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCompleted { - @synchronized(self.lock) { - return _completed; - } -} - -- (void)runContinuations { - @synchronized(self.lock) { - [self.condition lock]; - [self.condition broadcast]; - [self.condition unlock]; - for (void (^callback)(void) in self.callbacks) { - callback(); - } - [self.callbacks removeAllObjects]; - } -} - -#pragma mark - Chaining methods - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor block:block cancellationToken:nil]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - // Capture all of the state that needs to used when the continuation is complete. - dispatch_block_t executionBlock = ^{ - if (cancellationToken.cancellationRequested) { - [tcs cancel]; - return; - } - - id result = block(self); - if ([result isKindOfClass:[BFTask class]]) { - - id (^setupWithTask) (BFTask *) = ^id(BFTask *task) { - if (cancellationToken.cancellationRequested || task.cancelled) { - [tcs cancel]; - } else if (task.error) { - tcs.error = task.error; - } else { - tcs.result = task.result; - } - return nil; - }; - - BFTask *resultTask = (BFTask *)result; - - if (resultTask.completed) { - setupWithTask(resultTask); - } else { - [resultTask continueWithBlock:setupWithTask]; - } - - } else { - tcs.result = result; - } - }; - - BOOL completed; - @synchronized(self.lock) { - completed = self.completed; - if (!completed) { - [self.callbacks addObject:[^{ - [executor execute:executionBlock]; - } copy]]; - } - } - if (completed) { - [executor execute:executionBlock]; - } - - return tcs.task; -} - -- (BFTask *)continueWithBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:nil]; -} - -- (BFTask *)continueWithBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:cancellationToken]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor successBlock:block cancellationToken:nil]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - return [self continueWithExecutor:executor block:^id(BFTask *task) { - if (task.faulted || task.cancelled) { - return task; - } else { - return block(task); - } - } cancellationToken:cancellationToken]; -} - -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:nil]; -} - -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:cancellationToken]; -} - -#pragma mark - Syncing Task (Avoid it) - -- (void)warnOperationOnMainThread { - warnBlockingOperationOnMainThread(); -} - -- (void)waitUntilFinished { - if ([NSThread isMainThread]) { - [self warnOperationOnMainThread]; - } - - @synchronized(self.lock) { - if (self.completed) { - return; - } - [self.condition lock]; - } - // TODO: (nlutsenko) Restructure this to use Bolts-Swift thread access synchronization architecture - // In the meantime, it's absolutely safe to get `_completed` aka an ivar, as long as it's a `BOOL` aka less than word size. - while (!_completed) { - [self.condition wait]; - } - [self.condition unlock]; -} - -#pragma mark - NSObject - -- (NSString *)description { - // Acquire the data from the locked properties - BOOL completed; - BOOL cancelled; - BOOL faulted; - NSString *resultDescription = nil; - - @synchronized(self.lock) { - completed = self.completed; - cancelled = self.cancelled; - faulted = self.faulted; - resultDescription = completed ? [NSString stringWithFormat:@" result = %@", self.result] : @""; - } - - // Description string includes status information and, if available, the - // result since in some ways this is what a promise actually "is". - return [NSString stringWithFormat:@"<%@: %p; completed = %@; cancelled = %@; faulted = %@;%@>", - NSStringFromClass([self class]), - self, - completed ? @"YES" : @"NO", - cancelled ? @"YES" : @"NO", - faulted ? @"YES" : @"NO", - resultDescription]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h deleted file mode 100644 index f94c18fdb5..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask<__covariant ResultType>; - -/*! - A BFTaskCompletionSource represents the producer side of tasks. - It is a task that also has methods for changing the state of the - task by settings its completion values. - */ -@interface BFTaskCompletionSource<__covariant ResultType> : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask *task; - -/*! - Completes the task by setting the result. - Attempting to set this for a completed task will raise an exception. - @param result The result of the task. - */ -- (void)setResult:(nullable ResultType)result NS_SWIFT_NAME(set(result:)); - -/*! - Completes the task by setting the error. - Attempting to set this for a completed task will raise an exception. - @param error The error for the task. - */ -- (void)setError:(NSError *)error NS_SWIFT_NAME(set(error:)); - -/*! - Completes the task by marking it as cancelled. - Attempting to set this for a completed task will raise an exception. - */ -- (void)cancel; - -/*! - Sets the result of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetResult:(nullable ResultType)result NS_SWIFT_NAME(trySet(result:)); - -/*! - Sets the error of the task if it wasn't already completed. - @param error The error for the task. - @returns whether the new value was set. - */ -- (BOOL)trySetError:(NSError *)error NS_SWIFT_NAME(trySet(error:)); - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m b/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m deleted file mode 100644 index 33a6f89663..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFTaskCompletionSource.h" - -#import "BFTask.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFTask (BFTaskCompletionSource) - -- (BOOL)trySetResult:(nullable id)result; -- (BOOL)trySetError:(NSError *)error; -- (BOOL)trySetCancelled; - -@end - -@implementation BFTaskCompletionSource - -#pragma mark - Initializer - -+ (instancetype)taskCompletionSource { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _task = [[BFTask alloc] init]; - - return self; -} - -#pragma mark - Custom Setters/Getters - -- (void)setResult:(nullable id)result { - if (![self.task trySetResult:result]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the result on a completed task."]; - } -} - -- (void)setError:(NSError *)error { - if (![self.task trySetError:error]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the error on a completed task."]; - } -} - -- (void)cancel { - if (![self.task trySetCancelled]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot cancel a completed task."]; - } -} - -- (BOOL)trySetResult:(nullable id)result { - return [self.task trySetResult:result]; -} - -- (BOOL)trySetError:(NSError *)error { - return [self.task trySetError:error]; -} - -- (BOOL)trySetCancelled { - return [self.task trySetCancelled]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h b/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h deleted file mode 100644 index a3f2bd6f29..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import -#import -#import -#import -#import -#import -#import - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - - -NS_ASSUME_NONNULL_BEGIN - -/** - A string containing the version of the Bolts Framework used by the current application. - */ -extern NSString *const BoltsFrameworkVersionString; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m b/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m deleted file mode 100644 index c202687975..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/Common/Bolts.m +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "Bolts.h" - -NS_ASSUME_NONNULL_BEGIN - -NSString *const BoltsFrameworkVersionString = @"1.9.0"; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h deleted file mode 100644 index aa89efc2b9..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -/*! The version of the App Link protocol that this library supports */ -FOUNDATION_EXPORT NSString *const BFAppLinkVersion; - -/*! - Contains App Link metadata relevant for navigation on this device - derived from the HTML at a given URL. - */ -@interface BFAppLink : NSObject - -/*! - Creates a BFAppLink with the given list of BFAppLinkTargets and target URL. - - Generally, this will only be used by implementers of the BFAppLinkResolving 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 BFAppLinkTargets for this platform derived - from App Link metadata. - @param webURL the fallback web URL, if any, for the app link. - */ -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL; - -/*! The URL from which this BFAppLink was derived */ -@property (nonatomic, strong, readonly) 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) NSURL *webURL; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m deleted file mode 100644 index 77fd3115b8..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLink.m +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFAppLink_Internal.h" - -NSString *const BFAppLinkDataParameterName = @"al_applink_data"; -NSString *const BFAppLinkTargetKeyName = @"target_url"; -NSString *const BFAppLinkUserAgentKeyName = @"user_agent"; -NSString *const BFAppLinkExtrasKeyName = @"extras"; -NSString *const BFAppLinkRefererAppLink = @"referer_app_link"; -NSString *const BFAppLinkRefererAppName = @"app_name"; -NSString *const BFAppLinkRefererUrl = @"url"; -NSString *const BFAppLinkVersionKeyName = @"version"; -NSString *const BFAppLinkVersion = @"1.0"; - -@interface BFAppLink () - -@property (nonatomic, strong, readwrite) NSURL *sourceURL; -@property (nonatomic, copy, readwrite) NSArray *targets; -@property (nonatomic, strong, readwrite) NSURL *webURL; - -@property (nonatomic, assign, readwrite, getter=isBackToReferrer) BOOL backToReferrer; - -@end - -@implementation BFAppLink - -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL - isBackToReferrer:(BOOL)isBackToReferrer { - BFAppLink *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]; -} - -- (BFAppLink *)initWithIsBackToReferrer:(BOOL)backToReferrer { - if ((self = [super init])) { - _backToReferrer = backToReferrer; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h deleted file mode 100644 index 4b8a71e02f..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -/*! - The result of calling navigate on a BFAppLinkNavigation - */ -typedef NS_ENUM(NSInteger, BFAppLinkNavigationType) { - /*! Indicates that the navigation failed and no app was opened */ - BFAppLinkNavigationTypeFailure, - /*! Indicates that the navigation succeeded by opening the URL in the browser */ - BFAppLinkNavigationTypeBrowser, - /*! Indicates that the navigation succeeded by opening the URL in an app on the device */ - BFAppLinkNavigationTypeApp -}; - -@protocol BFAppLinkResolving; -@class BFTask; - -/*! - 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 BFAppLinkNavigations themselves. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkNavigation : NSObject - -/*! - 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) BFAppLink *appLink; - -/*! Creates an AppLinkNavigation with the given link, extras, and App Link data */ -+ (instancetype)navigationWithAppLink:(BFAppLink *)appLink - extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)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; - -/*! Performs the navigation */ -- (BFAppLinkNavigationType)navigate:(NSError **)error; - -/*! Returns a BFAppLink for the given URL */ -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination; - -/*! Returns a BFAppLink for the given URL using the given App Link resolution strategy */ -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination resolver:(id)resolver; - -/*! Navigates to a BFAppLink and returns whether it opened in-app or in-browser */ -+ (BFAppLinkNavigationType)navigateToAppLink:(BFAppLink *)link error:(NSError **)error; - -/*! - Returns a BFAppLinkNavigationType based on a BFAppLink. - 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.) - */ -+ (BFAppLinkNavigationType)navigationTypeForLink:(BFAppLink *)link; - -/*! - Return navigation type for current instance. - No-side-effect version of navigate: - */ -- (BFAppLinkNavigationType)navigationType; - -/*! Navigates to a URL (an asynchronous action) and returns a BFNavigationType */ -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination; - -/*! - Navigates to a URL (an asynchronous action) using the given App Link resolution - strategy and returns a BFNavigationType - */ -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination resolver:(id)resolver; - -/*! - Gets the default resolver to be used for App Link resolution. If the developer has not set one explicitly, - a basic, built-in resolver will be used. - */ -+ (id)defaultResolver; - -/*! - Sets the default resolver to be used for App Link resolution. Setting this to nil will revert the - default resolver to the basic, built-in resolver provided by Bolts. - */ -+ (void)setDefaultResolver:(id)resolver; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m deleted file mode 100644 index 7ea12de0f7..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkNavigation.m +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFAppLinkNavigation.h" - -#import - -#import "BFMeasurementEvent_Internal.h" -#import "BFAppLink_Internal.h" - -FOUNDATION_EXPORT NSString *const BFAppLinkDataParameterName; -FOUNDATION_EXPORT NSString *const BFAppLinkTargetKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkUserAgentKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkExtrasKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkVersionKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppLink; -FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppName; -FOUNDATION_EXPORT NSString *const BFAppLinkRefererUrl; - -static id defaultResolver; - -@interface BFAppLinkNavigation () - -@property (nonatomic, copy, readwrite) NSDictionary *extras; -@property (nonatomic, copy, readwrite) NSDictionary *appLinkData; -@property (nonatomic, strong, readwrite) BFAppLink *appLink; - -@end - -@implementation BFAppLinkNavigation - -+ (instancetype)navigationWithAppLink:(BFAppLink *)appLink - extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)appLinkData { - BFAppLinkNavigation *navigation = [[self alloc] init]; - navigation.appLink = appLink; - navigation.extras = extras; - navigation.appLinkData = appLinkData; - return navigation; -} - -+ (NSDictionary *)callbackAppLinkDataForAppWithName:(NSString *)appName url:(NSString *)url { - return @{BFAppLinkRefererAppLink: @{BFAppLinkRefererAppName: appName, BFAppLinkRefererUrl: url}}; -} - -- (NSString *)stringByEscapingQueryString:(NSString *)string { -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0 || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_9 - return [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; -#else - return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, - (CFStringRef)string, - NULL, - (CFStringRef) @":/?#[]@!$&'()*+,;=", - kCFStringEncodingUTF8)); -#endif -} - -- (NSURL *)appLinkURLWithTargetURL:(NSURL *)targetUrl error:(NSError **)error { - NSMutableDictionary *appLinkData = [NSMutableDictionary dictionaryWithDictionary:self.appLinkData ?: @{}]; - - // Add applink protocol data - if (!appLinkData[BFAppLinkUserAgentKeyName]) { - appLinkData[BFAppLinkUserAgentKeyName] = [NSString stringWithFormat:@"Bolts iOS %@", BoltsFrameworkVersionString]; - } - if (!appLinkData[BFAppLinkVersionKeyName]) { - appLinkData[BFAppLinkVersionKeyName] = BFAppLinkVersion; - } - appLinkData[BFAppLinkTargetKeyName] = [self.appLink.sourceURL absoluteString]; - appLinkData[BFAppLinkExtrasKeyName] = 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 ? @"&" : @"?", - BFAppLinkDataParameterName, - encoded]; - - return [NSURL URLWithString:endUrlString]; - } else { - if (error) { - *error = jsonError; - } - - // If there was an error encoding the app link data, fail hard. - return nil; - } -} - -- (BFAppLinkNavigationType)navigate:(NSError **)error { - NSURL *openedURL = nil; - NSError *encodingError = nil; - BFAppLinkNavigationType retType = BFAppLinkNavigationTypeFailure; - - // Find the first eligible/launchable target in the BFAppLink. - for (BFAppLinkTarget *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 = BFAppLinkNavigationTypeApp; - 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 = BFAppLinkNavigationTypeBrowser; - openedURL = appLinkBrowserURL; - } - } - - [self postAppLinkNavigateEventNotificationWithTargetURL:openedURL - error:error ? *error : nil - type:retType]; - return retType; -} - -- (void)postAppLinkNavigateEventNotificationWithTargetURL:(NSURL *)outputURL error:(NSError *)error type:(BFAppLinkNavigationType)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 BFAppLinkNavigationTypeFailure: - success = EVENT_NO_VAL; - linkType = @"fail"; - break; - case BFAppLinkNavigationTypeBrowser: - success = EVENT_YES_VAL; - linkType = @"web"; - break; - case BFAppLinkNavigationTypeApp: - success = EVENT_YES_VAL; - linkType = @"app"; - break; - default: - break; - } - if (success) { - logData[@"success"] = success; - } - if (linkType) { - logData[@"type"] = linkType; - } - - if ([self.appLink isBackToReferrer]) { - [BFMeasurementEvent postNotificationForEventName:BFAppLinkNavigateBackToReferrerEventName args:logData]; - } else { - [BFMeasurementEvent postNotificationForEventName:BFAppLinkNavigateOutEventName args:logData]; - } -} - -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination resolver:(id)resolver { - return [resolver appLinkFromURLInBackground:destination]; -} - -+ (BFTask *)resolveAppLinkInBackground:(NSURL *)destination { - return [self resolveAppLinkInBackground:destination resolver:[self defaultResolver]]; -} - -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination { - return [self navigateToURLInBackground:destination - resolver:[self defaultResolver]]; -} - -+ (BFTask *)navigateToURLInBackground:(NSURL *)destination - resolver:(id)resolver { - BFTask *resolutionTask = [self resolveAppLinkInBackground:destination - resolver:resolver]; - return [resolutionTask continueWithExecutor:[BFExecutor mainThreadExecutor] - withSuccessBlock:^id(BFTask *task) { - NSError *error = nil; - BFAppLinkNavigationType result = [self navigateToAppLink:task.result - error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } else { - return @(result); - } - }]; -} - -+ (BFAppLinkNavigationType)navigateToAppLink:(BFAppLink *)link error:(NSError **)error { - return [[BFAppLinkNavigation navigationWithAppLink:link - extras:nil - appLinkData:nil] navigate:error]; -} - -+ (BFAppLinkNavigationType)navigationTypeForLink:(BFAppLink *)link { - return [[self navigationWithAppLink:link extras:nil appLinkData:nil] navigationType]; -} - -- (BFAppLinkNavigationType)navigationType { - BFAppLinkTarget *eligibleTarget = nil; - for (BFAppLinkTarget *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 BFAppLinkNavigationTypeApp; - } else { - return BFAppLinkNavigationTypeFailure; - } - } - - if (self.appLink.webURL != nil) { - NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; - if (appLinkURL != nil) { - return BFAppLinkNavigationTypeBrowser; - } else { - return BFAppLinkNavigationTypeFailure; - } - } - - return BFAppLinkNavigationTypeFailure; -} - -+ (id)defaultResolver { - if (defaultResolver) { - return defaultResolver; - } - return [BFWebViewAppLinkResolver sharedInstance]; -} - -+ (void)setDefaultResolver:(id)resolver { - defaultResolver = resolver; -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h deleted file mode 100644 index 5c78bff458..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkResolving.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -@class BFTask; - -/*! - 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. - */ -@protocol BFAppLinkResolving - -/*! - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @returns A BFTask that will return a BFAppLink for the given URL. - */ -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h deleted file mode 100644 index 436c528068..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import -#import - -#import - -@class BFAppLink; -@class BFAppLinkReturnToRefererController; - -/*! - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -@protocol BFAppLinkReturnToRefererControllerDelegate - -@optional - -/*! Called when the user has tapped to navigate, but before the navigation has been performed. */ -- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller - willNavigateToAppLink:(BFAppLink *)appLink; - -/*! Called after the navigation has been attempted, with an indication of whether the referer - app link was successfully opened. */ -- (void)returnToRefererController:(BFAppLinkReturnToRefererController *)controller - didNavigateToAppLink:(BFAppLink *)url - type:(BFAppLinkNavigationType)type; - -@end - -/*! - A controller class that implements default behavior for a BFAppLinkReturnToRefererView, including - the ability to display the view above the navigation bar for navigation-based apps. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -@interface BFAppLinkReturnToRefererController : NSObject - -/*! - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak) id delegate; - -/*! - The BFAppLinkReturnToRefererView this controller is controlling. - */ -@property (nonatomic, strong) BFAppLinkReturnToRefererView *view; - -/*! - Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed - contained within another UIView (i.e., not displayed above the navigation bar). - */ -- (instancetype)init; - -/*! - Initializes a controller suitable for controlling a BFAppLinkReturnToRefererView that is to be displayed - displayed above the navigation bar. - */ -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController; - -/*! - Removes the view entirely from the navigation controller it is currently displayed in. - */ -- (void)removeFromNavController; - -/*! - Shows the BFAppLinkReturnToRefererView with the specified referer information. If nil or missing data, - the view will not be displayed. */ -- (void)showViewForRefererAppLink:(BFAppLink *)refererAppLink; - -/*! - Shows the BFAppLinkReturnToRefererView 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; - -/*! - Closes the view, possibly animating it. - */ -- (void)closeViewAnimated:(BOOL)animated; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m deleted file mode 100644 index d380635493..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererController.m +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFAppLinkReturnToRefererController.h" - -#import "BFAppLink.h" -#import "BFAppLinkReturnToRefererView_Internal.h" -#import "BFURL_Internal.h" - -static const CFTimeInterval kBFViewAnimationDuration = 0.25f; - -@implementation BFAppLinkReturnToRefererController { - UINavigationController *_navigationController; - BFAppLinkReturnToRefererView *_view; -} - -#pragma mark - Object lifecycle - -- (instancetype)init { - return [self initForDisplayAboveNavController:nil]; -} - -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController { - self = [super 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 - -- (BFAppLinkReturnToRefererView *)view { - if (!_view) { - self.view = [[BFAppLinkReturnToRefererView alloc] initWithFrame:CGRectZero]; - if (_navigationController) { - [_navigationController.view addSubview:_view]; - } - } - return _view; -} - -- (void)setView:(BFAppLinkReturnToRefererView *)view { - if (_view != view) { - _view.delegate = nil; - } - - _view = view; - _view.delegate = self; - - if (_navigationController) { - _view.includeStatusBarInSize = BFIncludeStatusBarInSizeAlways; - } -} - -- (void)showViewForRefererAppLink:(BFAppLink *)refererAppLink { - self.view.refererAppLink = refererAppLink; - - [_view sizeToFit]; - - if (_navigationController) { - if (!_view.closed) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self moveNavigationBar]; - }); - } - } -} - -- (void)showViewForRefererURL:(NSURL *)url { - BFAppLink *appLink = [BFURL URLForRenderBackToReferrerBarURL:url].appLinkReferer; - [self showViewForRefererAppLink:appLink]; -} - -- (void)removeFromNavController { - if (_navigationController) { - [_view removeFromSuperview]; - _navigationController = nil; - } -} - -#pragma mark - BFAppLinkReturnToRefererViewDelegate - -- (void)returnToRefererViewDidTapInsideCloseButton:(BFAppLinkReturnToRefererView *)view { - [self closeViewAnimated:YES explicitlyClosed:YES]; -} - -- (void)returnToRefererViewDidTapInsideLink:(BFAppLinkReturnToRefererView *)view - link:(BFAppLink *)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:kBFViewAnimationDuration delay:0.0 options:options animations:^{ - _view.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(_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:kBFViewAnimationDuration delay:0.0 options:options animations:^{ - [_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 (_navigationController) { - [self updateNavigationBarY:_view.statusBarHeight]; - } - - CGRect frame = _view.frame; - frame.size.height = 0.0; - _view.frame = frame; - }; - - if (animated) { - [UIView animateWithDuration:kBFViewAnimationDuration animations:^{ - closer(); - } completion:^(BOOL finished) { - if (explicitlyClosed) { - _view.closed = YES; - } - }]; - } else { - closer(); - if (explicitlyClosed) { - _view.closed = YES; - } - } -} - -- (void)openRefererAppLink:(BFAppLink *)refererAppLink { - if (refererAppLink) { - id delegate = _delegate; - if ([delegate respondsToSelector:@selector(returnToRefererController:willNavigateToAppLink:)]) { - [delegate returnToRefererController:self willNavigateToAppLink:refererAppLink]; - } - - NSError *error = nil; - BFAppLinkNavigationType type = [BFAppLinkNavigation navigateToAppLink:refererAppLink error:&error]; - - if ([delegate respondsToSelector:@selector(returnToRefererController:didNavigateToAppLink:type:)]) { - [delegate returnToRefererController:self didNavigateToAppLink:refererAppLink type:type]; - } - } -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h deleted file mode 100644 index f62bc66f6c..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import -#import - -#import - -@class BFAppLinkReturnToRefererView; -@class BFURL; - -typedef NS_ENUM(NSUInteger, BFIncludeStatusBarInSize) { - BFIncludeStatusBarInSizeNever, - BFIncludeStatusBarInSizeIOS7AndLater, - BFIncludeStatusBarInSizeAlways, -}; - -/*! - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -@protocol BFAppLinkReturnToRefererViewDelegate - -/*! - Called when the user has tapped inside the close button. - */ -- (void)returnToRefererViewDidTapInsideCloseButton:(BFAppLinkReturnToRefererView *)view; - -/*! - Called when the user has tapped inside the App Link portion of the view. - */ -- (void)returnToRefererViewDidTapInsideLink:(BFAppLinkReturnToRefererView *)view - link:(BFAppLink *)link; - -@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") -@interface BFAppLinkReturnToRefererView : UIView - -/*! - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak) id delegate; - -/*! - The color of the text label and close button. - */ -@property (nonatomic, strong) UIColor *textColor; - -@property (nonatomic, strong) BFAppLink *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) BFIncludeStatusBarInSize includeStatusBarInSize; - -/*! - Indicates whether the user has closed the view by clicking the close button. - */ -@property (nonatomic, assign) BOOL closed; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m deleted file mode 100644 index f2d0e79ba2..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkReturnToRefererView.m +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFAppLinkReturnToRefererView.h" - -#import "BFAppLink.h" -#import "BFAppLinkTarget.h" - -static const CGFloat BFMarginX = 8.5f; -static const CGFloat BFMarginY = 8.5f; - -static NSString *const BFRefererAppLink = @"referer_app_link"; -static NSString *const BFRefererAppName = @"app_name"; -static NSString *const BFRefererUrl = @"url"; -static const CGFloat BFCloseButtonWidth = 12.0; -static const CGFloat BFCloseButtonHeight = 12.0; - -@interface BFAppLinkReturnToRefererView () - -@property (nonatomic, strong) UILabel *labelView; -@property (nonatomic, strong) UIButton *closeButton; -@property (nonatomic, strong) UITapGestureRecognizer *insideTapGestureRecognizer; - -@end - -@implementation BFAppLinkReturnToRefererView { - 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 = BFIncludeStatusBarInSizeIOS7AndLater; - - // 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]; -#ifdef __IPHONE_6_0 - _labelView.textAlignment = NSTextAlignmentCenter; -#else - _labelView.textAlignment = UITextAlignmentCenter; -#endif - _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 * BFMarginY + 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(BFMarginX, - CGRectGetMaxY(bounds) - labelSize.height - 1.5f * BFMarginY, - CGRectGetMaxX(bounds) - BFCloseButtonWidth - 3 * BFMarginX, - labelSize.height + BFMarginY); - - _closeButton.frame = CGRectMake(CGRectGetMaxX(bounds) - BFCloseButtonWidth - 2 * BFMarginX, - _labelView.center.y - BFCloseButtonHeight / 2.0f - BFMarginY, - BFCloseButtonWidth + 2 * BFMarginX, - BFCloseButtonHeight + 2 * BFMarginY); -} - -- (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 * BFMarginY + self.statusBarHeight); - } - return size; -} - -- (CGFloat)statusBarHeight { - UIApplication *application = [UIApplication sharedApplication]; - - BOOL include; - switch (_includeStatusBarInSize) { - case BFIncludeStatusBarInSizeAlways: - include = YES; - break; - case BFIncludeStatusBarInSizeIOS7AndLater: { - float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; - include = (systemVersion >= 7.0); - break; - } - case BFIncludeStatusBarInSizeNever: - 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:(BFIncludeStatusBarInSize)includeStatusBarInSize { - _includeStatusBarInSize = includeStatusBarInSize; - [self setNeedsLayout]; - [self invalidateIntrinsicContentSize]; -} - -- (void)setTextColor:(UIColor *)textColor { - _textColor = textColor; - [self updateColors]; -} - -- (void)setRefererAppLink:(BFAppLink *)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(BFCloseButtonWidth, BFCloseButtonHeight), 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, BFCloseButtonWidth - inset, BFCloseButtonHeight - inset); - CGContextStrokePath(context); - - CGContextMoveToPoint(context, BFCloseButtonWidth - inset, inset); - CGContextAddLineToPoint(context, inset, BFCloseButtonHeight - 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 setHidden:_explicitlyHidden || _closed || !self.hasRefererData]; -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h deleted file mode 100644 index 61721269d5..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -/*! - Represents a target defined in App Link metadata, consisting of at least - a URL, and optionally an App Store ID and name. - */ -@interface BFAppLinkTarget : NSObject - -/*! Creates a BFAppLinkTarget with the given app site and target URL. */ -+ (instancetype)appLinkTargetWithURL:(NSURL *)url - appStoreId:(NSString *)appStoreId - appName:(NSString *)appName; - -/*! The URL prefix for this app link target */ -@property (nonatomic, strong, readonly) NSURL *URL; - -/*! The app ID for the app store */ -@property (nonatomic, copy, readonly) NSString *appStoreId; - -/*! The name of the app */ -@property (nonatomic, copy, readonly) NSString *appName; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m deleted file mode 100644 index 5518cba295..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFAppLinkTarget.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFAppLinkTarget.h" - -@interface BFAppLinkTarget () - -@property (nonatomic, strong, readwrite) NSURL *URL; -@property (nonatomic, copy, readwrite) NSString *appStoreId; -@property (nonatomic, copy, readwrite) NSString *appName; - -@end - -@implementation BFAppLinkTarget - -+ (instancetype)appLinkTargetWithURL:(NSURL *)url - appStoreId:(NSString *)appStoreId - appName:(NSString *)appName { - BFAppLinkTarget *target = [[self alloc] init]; - target.URL = url; - target.appStoreId = appStoreId; - target.appName = appName; - return target; -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h deleted file mode 100644 index b3173fc23c..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -/*! The name of the notification posted by BFMeasurementEvent */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventNotificationName; - -/*! Defines keys in the userInfo object for the notification named BFMeasurementEventNotificationName */ -/*! The string field for the name of the event */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventNameKey; -/*! The dictionary field for the arguments of the event */ -FOUNDATION_EXPORT NSString *const BFMeasurementEventArgsKey; - -/*! Bolts Events raised by BFMeasurementEvent for Applink */ -/*! - The name of the event posted when [BFURL URLWithURL:] is called successfully. This represents the successful parsing of an app link URL. - */ -FOUNDATION_EXPORT NSString *const BFAppLinkParseEventName; - -/*! - The name of the event posted when [BFURL URLWithInboundURL:] is called successfully. - This represents parsing an inbound app link URL from a different application - */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateInEventName; - -/*! The event raised when the user navigates from your app to other apps */ -FOUNDATION_EXPORT NSString *const BFAppLinkNavigateOutEventName; - -/*! - 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 BFAppLinkNavigateBackToReferrerEventName; - -@interface BFMeasurementEvent : NSObject - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m deleted file mode 100644 index e3e6cde4a2..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFMeasurementEvent.m +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFMeasurementEvent_Internal.h" - -NSString *const BFMeasurementEventNotificationName = @"com.parse.bolts.measurement_event"; - -NSString *const BFMeasurementEventNameKey = @"event_name"; -NSString *const BFMeasurementEventArgsKey = @"event_args"; - -/* app Link Event raised by this BFURL */ -NSString *const BFAppLinkParseEventName = @"al_link_parse"; -NSString *const BFAppLinkNavigateInEventName = @"al_nav_in"; - -/*! AppLink events raised in this class */ -NSString *const BFAppLinkNavigateOutEventName = @"al_nav_out"; -NSString *const BFAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out"; - -__attribute__((noinline)) void warnOnMissingEventName() { - NSLog(@"Warning: Missing event name when logging bolts measurement event. \n" - " Ignoring this event in logging."); -} - -@implementation BFMeasurementEvent { - NSString *_name; - NSDictionary *_args; -} - -- (void)postNotification { - if (!_name) { - warnOnMissingEventName(); - return; - } - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - NSDictionary *userInfo = @{BFMeasurementEventNameKey : _name, - BFMeasurementEventArgsKey : _args}; - - [center postNotificationName:BFMeasurementEventNotificationName - 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 diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h deleted file mode 100644 index 924c91d480..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -@class BFAppLink; - -/*! - Provides a set of utilities for working with NSURLs, such as parsing of query parameters - and handling for App Link requests. - */ -@interface BFURL : NSObject - -/*! - Creates a link target from a raw URL. - On success, this posts the BFAppLinkParseEventName measurement event. If you are constructing the BFURL within your application delegate's - application:openURL:sourceApplication:annotation:, you should instead use URLWithInboundURL:sourceApplication: - to support better BFMeasurementEvent notifications - @param url The instance of `NSURL` to create BFURL from. - */ -+ (BFURL *)URLWithURL:(NSURL *)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 BFAppLinkNavigateInEventName measurement event. - @param url The instance of `NSURL` to create BFURL 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: - */ -+ (BFURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)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) NSDictionary *appLinkData; - -/*! - If this link target is an App Link, this is the data found in extras. - */ -@property (nonatomic, strong, readonly) NSDictionary *appLinkExtras; - -/*! - The App Link indicating how to navigate back to the referer app, if any. - */ -@property (nonatomic, strong, readonly) BFAppLink *appLinkReferer; - -/*! - The URL that was used to create this BFURL. - */ -@property (nonatomic, strong, readonly) NSURL *inputURL; - -/*! - The query parameters of the inputURL, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *inputQueryParameters; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m deleted file mode 100644 index 14a13842b7..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFURL.m +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFURL_Internal.h" -#import "BFAppLink_Internal.h" -#import "BFAppLinkTarget.h" -#import "BFMeasurementEvent_Internal.h" - -@implementation BFURL - -- (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 = [BFURL queryParametersForURL:url]; - _inputQueryParameters = baseQuery; - _targetQueryParameters = baseQuery; - - // Check for applink_data - NSString *appLinkDataString = baseQuery[BFAppLinkDataParameterName]; - 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[BFAppLinkVersionKeyName] ?: @"1.0"; - NSString *target = applinkData[BFAppLinkTargetKeyName]; - if ([version isKindOfClass:[NSString class]] && - [version isEqual:BFAppLinkVersion]) { - // There's applink data! The target should actually be the applink target. - _appLinkData = applinkData; - id applinkExtras = applinkData[BFAppLinkExtrasKeyName]; - if (applinkExtras && [applinkExtras isKindOfClass:[NSDictionary class]]) { - _appLinkExtras = applinkExtras; - } - _targetURL = ([target isKindOfClass:[NSString class]] ? [NSURL URLWithString:target] : url); - _targetQueryParameters = [BFURL queryParametersForURL:_targetURL]; - - NSDictionary *refererAppLink = _appLinkData[BFAppLinkRefererAppLink]; - NSString *refererURLString = refererAppLink[BFAppLinkRefererUrl]; - NSString *refererAppName = refererAppLink[BFAppLinkRefererAppName]; - - if (refererURLString && refererAppName) { - BFAppLinkTarget *appLinkTarget = [BFAppLinkTarget appLinkTargetWithURL:[NSURL URLWithString:refererURLString] - appStoreId:nil - appName:refererAppName]; - _appLinkReferer = [BFAppLink 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; - [BFMeasurementEvent postNotificationForEventName:BFAppLinkParseEventName args:logData]; - if (forOpenURLEvent) { - [BFMeasurementEvent postNotificationForEventName:BFAppLinkNavigateInEventName args:logData]; - } - } - } - } - - return self; -} - -+ (BFURL *)URLWithURL:(NSURL *)url { - return [[BFURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:NO]; -} - -+ (BFURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication { - return [[BFURL alloc] initWithURL:url forOpenInboundURL:YES sourceApplication:sourceApplication forRenderBackToReferrerBar:NO]; -} - -+ (BFURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url { - return [[BFURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:YES]; -} - -+ (NSString *)decodeURLString:(NSString *)string { - return (NSString *)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapes(NULL, - (CFStringRef)string, - CFSTR(""))); -} - -+ (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[[self decodeURLString:component]] = [NSNull null]; - } else { - NSString *key = [self decodeURLString:[component substringToIndex:equalsLocation.location]]; - NSString *value = [self decodeURLString:[component substringFromIndex:equalsLocation.location + 1]]; - parameters[key] = value; - } - } - return [NSDictionary dictionaryWithDictionary:parameters]; -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h deleted file mode 100644 index 3782ae2cb9..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -/*! - A reference implementation for an App Link resolver that uses a hidden UIWebView - to parse the HTML containing App Link metadata. - */ -@interface BFWebViewAppLinkResolver : NSObject - -/*! - Gets the instance of a BFWebViewAppLinkResolver. - */ -+ (instancetype)sharedInstance; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m b/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m deleted file mode 100644 index 0e0d58c6e4..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/BFWebViewAppLinkResolver.m +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import "BFWebViewAppLinkResolver.h" -#import "BFAppLink.h" -#import "BFAppLinkTarget.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "BFExecutor.h" - -// Defines JavaScript to extract app link tags from HTML content -static NSString *const BFWebViewAppLinkResolverTagExtractionJavaScript = @"" -"(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 BFWebViewAppLinkResolverIOSURLKey = @"url"; -static NSString *const BFWebViewAppLinkResolverIOSAppStoreIdKey = @"app_store_id"; -static NSString *const BFWebViewAppLinkResolverIOSAppNameKey = @"app_name"; -static NSString *const BFWebViewAppLinkResolverDictionaryValueKey = @"_value"; -static NSString *const BFWebViewAppLinkResolverPreferHeader = @"Prefer-Html-Meta-Tags"; -static NSString *const BFWebViewAppLinkResolverMetaTagPrefix = @"al"; -static NSString *const BFWebViewAppLinkResolverWebKey = @"web"; -static NSString *const BFWebViewAppLinkResolverIOSKey = @"ios"; -static NSString *const BFWebViewAppLinkResolverIPhoneKey = @"iphone"; -static NSString *const BFWebViewAppLinkResolverIPadKey = @"ipad"; -static NSString *const BFWebViewAppLinkResolverWebURLKey = @"url"; -static NSString *const BFWebViewAppLinkResolverShouldFallbackKey = @"should_fallback"; - -@interface BFWebViewAppLinkResolverWebViewDelegate : NSObject - -@property (nonatomic, copy) void (^didFinishLoad)(UIWebView *webView); -@property (nonatomic, copy) void (^didFailLoadWithError)(UIWebView *webView, NSError *error); -@property (nonatomic, assign) BOOL hasLoaded; - -@end - -@implementation BFWebViewAppLinkResolverWebViewDelegate - -- (void)webViewDidFinishLoad:(UIWebView *)webView { - if (self.didFinishLoad) { - self.didFinishLoad(webView); - } -} - -- (void)webViewDidStartLoad:(UIWebView *)webView { -} - -- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { - if (self.didFailLoadWithError) { - self.didFailLoadWithError(webView, error); - } -} - -- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { - if (self.hasLoaded) { - // Consider loading a second resource to be "success", since it indicates an inner frame - // or redirect is happening. We can run the tag extraction script at this point. - self.didFinishLoad(webView); - return NO; - } - self.hasLoaded = YES; - return YES; -} - -@end - -@implementation BFWebViewAppLinkResolver - -+ (instancetype)sharedInstance { - static id instance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[self alloc] init]; - }); - return instance; -} - -- (BFTask *)followRedirects:(NSURL *)url { - // This task will be resolved with either the redirect NSURL - // or a dictionary with the response data to be returned. - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setValue:BFWebViewAppLinkResolverMetaTagPrefix forHTTPHeaderField:BFWebViewAppLinkResolverPreferHeader]; - - void (^completion)(NSURLResponse *response, NSData *data, NSError *error) = ^(NSURLResponse *response, NSData *data, NSError *error) { - if (error) { - [tcs setError: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]; - [tcs setResult:redirectURL]; - return; - } - } - - [tcs setResult:@{ @"response" : response, @"data" : data }]; - }; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0 || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_9 - NSURLSession *session = [NSURLSession sharedSession]; - [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - completion(response, data, error); - }] resume]; -#else - [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:completion]; -#endif - - return [tcs.task continueWithSuccessBlock:^id(BFTask *task) { - // If we redirected, just keep recursing. - if ([task.result isKindOfClass:[NSURL class]]) { - return [self followRedirects:task.result]; - } - return task; - }]; -} - -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url NS_EXTENSION_UNAVAILABLE_IOS("") { - return [[self followRedirects:url] continueWithExecutor:[BFExecutor mainThreadExecutor] - withSuccessBlock:^id(BFTask *task) { - NSData *responseData = task.result[@"data"]; - NSHTTPURLResponse *response = task.result[@"response"]; - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - UIWebView *webView = [[UIWebView alloc] init]; - BFWebViewAppLinkResolverWebViewDelegate *listener = [[BFWebViewAppLinkResolverWebViewDelegate alloc] init]; - __block BFWebViewAppLinkResolverWebViewDelegate *retainedListener = listener; - listener.didFinishLoad = ^(UIWebView *view) { - if (retainedListener) { - NSDictionary *ogData = [self getALDataFromLoadedPage:view]; - [view removeFromSuperview]; - view.delegate = nil; - retainedListener = nil; - [tcs setResult:[self appLinkFromALData:ogData destination:url]]; - } - }; - listener.didFailLoadWithError = ^(UIWebView* view, NSError *error) { - if (retainedListener) { - [view removeFromSuperview]; - view.delegate = nil; - retainedListener = nil; - [tcs setError:error]; - } - }; - webView.delegate = listener; - webView.hidden = YES; - [webView loadData:responseData - MIMEType:response.MIMEType - textEncodingName:response.textEncodingName - baseURL:response.URL]; - UIWindow *window = [UIApplication sharedApplication].windows.firstObject; - [window addSubview:webView]; - - return tcs.task; - }]; -} - -/* - 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:BFWebViewAppLinkResolverMetaTagPrefix]) { - 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[BFWebViewAppLinkResolverDictionaryValueKey] = tag[@"content"]; - } - } - return al; -} - -- (NSDictionary *)getALDataFromLoadedPage:(UIWebView *)webView { - // Run some JavaScript in the webview to fetch the meta tags. - NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:BFWebViewAppLinkResolverTagExtractionJavaScript]; - NSError *error = nil; - NSArray *arr = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] - options:0 - error:&error]; - return [self parseALData:arr]; -} - -/* - Converts app link data into a BFAppLink containing the targets relevant for this platform. - */ -- (BFAppLink *)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[BFWebViewAppLinkResolverIPadKey] ?: @{}, - appLinkDict[BFWebViewAppLinkResolverIOSKey] ?: @{} ]; - } else if (idiom == UIUserInterfaceIdiomPhone) { - platformData = @[ appLinkDict[BFWebViewAppLinkResolverIPhoneKey] ?: @{}, - appLinkDict[BFWebViewAppLinkResolverIOSKey] ?: @{} ]; - } else { - // Future-proofing. Other User Interface idioms should only hit ios. - platformData = @[ appLinkDict[BFWebViewAppLinkResolverIOSKey] ?: @{} ]; - } - - 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[BFWebViewAppLinkResolverIOSURLKey]; - NSArray *appStoreIds = platformDict[BFWebViewAppLinkResolverIOSAppStoreIdKey]; - NSArray *appNames = platformDict[BFWebViewAppLinkResolverIOSAppNameKey]; - - NSUInteger maxCount = MAX(urls.count, MAX(appStoreIds.count, appNames.count)); - - for (NSUInteger i = 0; i < maxCount; i++) { - NSString *urlString = urls[i][BFWebViewAppLinkResolverDictionaryValueKey]; - NSURL *url = urlString ? [NSURL URLWithString:urlString] : nil; - NSString *appStoreId = appStoreIds[i][BFWebViewAppLinkResolverDictionaryValueKey]; - NSString *appName = appNames[i][BFWebViewAppLinkResolverDictionaryValueKey]; - BFAppLinkTarget *target = [BFAppLinkTarget appLinkTargetWithURL:url - appStoreId:appStoreId - appName:appName]; - [linkTargets addObject:target]; - } - } - } - - NSDictionary *webDict = appLinkDict[BFWebViewAppLinkResolverWebKey][0]; - NSString *webUrlString = webDict[BFWebViewAppLinkResolverWebURLKey][0][BFWebViewAppLinkResolverDictionaryValueKey]; - NSString *shouldFallbackString = webDict[BFWebViewAppLinkResolverShouldFallbackKey][0][BFWebViewAppLinkResolverDictionaryValueKey]; - - NSURL *webUrl = destination; - - if (shouldFallbackString && - [@[ @"no", @"false", @"0" ] containsObject:[shouldFallbackString lowercaseString]]) { - webUrl = nil; - } - if (webUrl && webUrlString) { - webUrl = [NSURL URLWithString:webUrlString]; - } - - return [BFAppLink appLinkWithSourceURL:destination - targets:linkTargets - webURL:webUrl]; -} - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h deleted file mode 100644 index 8b85823b4d..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -@interface BFAppLinkReturnToRefererView (Internal) - -- (CGFloat)statusBarHeight; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h deleted file mode 100644 index aeeaa53e3d..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFAppLink_Internal.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -FOUNDATION_EXPORT NSString *const BFAppLinkDataParameterName; -FOUNDATION_EXPORT NSString *const BFAppLinkTargetKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkUserAgentKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkExtrasKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkVersionKeyName; -FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppLink; -FOUNDATION_EXPORT NSString *const BFAppLinkRefererAppName; -FOUNDATION_EXPORT NSString *const BFAppLinkRefererUrl; - -@interface BFAppLink (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 diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h deleted file mode 100644 index 7d46fd046c..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFMeasurementEvent_Internal.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import -/*! - Provides methods for posting notifications from the Bolts framework - */ -@interface BFMeasurementEvent (Internal) - -+ (void)postNotificationForEventName:(NSString *)name args:(NSDictionary *)args; - -@end diff --git a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h b/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h deleted file mode 100644 index 03b6bc674a..0000000000 --- a/iphone/Maps/Pods/Bolts/Bolts/iOS/Internal/BFURL_Internal.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -@interface BFURL (Internal) -+ (BFURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url; -@end diff --git a/iphone/Maps/Pods/Bolts/LICENSE b/iphone/Maps/Pods/Bolts/LICENSE deleted file mode 100644 index e1a5831dea..0000000000 --- a/iphone/Maps/Pods/Bolts/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -BSD License - -For Bolts software - -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/iphone/Maps/Pods/Bolts/README.md b/iphone/Maps/Pods/Bolts/README.md deleted file mode 100644 index 5e972c8500..0000000000 --- a/iphone/Maps/Pods/Bolts/README.md +++ /dev/null @@ -1,683 +0,0 @@ -Bolts -============ -[![Build Status](https://img.shields.io/travis/BoltsFramework/Bolts-ObjC/master.svg?style=flat)](https://travis-ci.org/BoltsFramework/Bolts-ObjC) -[![Coverage Status](https://codecov.io/github/BoltsFramework/Bolts-ObjC/coverage.svg?branch=master)](https://codecov.io/github/BoltsFramework/Bolts-ObjC?branch=master) -[![Pod Platform](https://img.shields.io/cocoapods/p/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) -[![Pod License](https://img.shields.io/cocoapods/l/Bolts.svg?style=flat)](https://github.com/BoltsFramework/Bolts-ObjC/blob/master/LICENSE) -[![Reference Status](https://www.versioneye.com/objective-c/bolts/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts/references) - -[![Pod Version](https://img.shields.io/cocoapods/v/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -Bolts is a collection of low-level libraries designed to make developing mobile -apps easier. Bolts was designed by Parse and Facebook for our own internal use, -and we have decided to open source these libraries to make them available to -others. Using these libraries does not require using any Parse services. Nor -do they require having a Parse or Facebook developer account. - -Bolts includes: - -* "Tasks", which make organization of complex asynchronous code more manageable. A task is kind of like a JavaScript Promise, but available for iOS and Android. -* An implementation of the [App Links protocol](http://applinks.org/), helping you link to content in other apps and handle incoming deep-links. - -For more information, see the [Bolts iOS API Reference](http://boltsframework.github.io/docs/ios/). - -# Tasks - -To build a truly responsive iOS application, you must keep long-running operations off of the UI thread, and be careful to avoid blocking anything the UI thread might be waiting on. This means you will need to execute various operations in the background. To make this easier, we've added a class called `BFTask`. A task represents the result of an asynchronous operation. Typically, a `BFTask` is returned from an asynchronous function and gives the ability to continue processing the result of the task. When a task is returned from a function, it's already begun doing its job. A task is not tied to a particular threading model: it represents the work being done, not where it is executing. Tasks have many advantages over other methods of asynchronous programming, such as callbacks. `BFTask` is not a replacement for `NSOperation` or GCD. In fact, they play well together. But tasks do fill in some gaps that those technologies don't address. -* `BFTask` takes care of managing dependencies for you. Unlike using `NSOperation` for dependency management, you don't have to declare all dependencies before starting a `BFTask`. For example, imagine you need to save a set of objects and each one may or may not require saving child objects. With an `NSOperation`, you would normally have to create operations for each of the child saves ahead of time. But you don't always know before you start the work whether that's going to be necessary. That can make managing dependencies with `NSOperation` very painful. Even in the best case, you have to create your dependencies before the operations that depend on them, which results in code that appears in a different order than it executes. With `BFTask`, you can decide during your operation's work whether there will be subtasks and return the other task in just those cases. -* `BFTasks` release their dependencies. `NSOperation` strongly retains its dependencies, so if you have a queue of ordered operations and sequence them using dependencies, you have a leak, because every operation gets retained forever. `BFTasks` release their callbacks as soon as they are run, so everything cleans up after itself. This can reduce memory use, and simplify memory management. -* `BFTasks` keep track of the state of finished tasks: It tracks whether there was a returned value, the task was cancelled, or if an error occurred. It also has convenience methods for propagating errors. With `NSOperation`, you have to build all of this stuff yourself. -* `BFTasks` don't depend on any particular threading model. So it's easy to have some tasks perform their work with an operation queue, while others perform work using blocks with GCD. These tasks can depend on each other seamlessly. -* Performing several tasks in a row will not create nested "pyramid" code as you would get when using only callbacks. -* `BFTasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. -* You can arrange task-based code in the order that it executes, rather than having to split your logic across scattered callback functions. - -For the examples in this doc, assume there are async versions of some common Parse methods, called `saveAsync:` and `findAsync:` which return a `Task`. In a later section, we'll show how to define these functions yourself. - -## The `continueWithBlock` Method - -Every `BFTask` has a method named `continueWithBlock:` which takes a continuation block. A continuation is a block that will be executed when the task is complete. You can then inspect the task to check if it was successful and to get its result. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithBlock:^id(BFTask *task) { - if (task.isCancelled) { - // the save was cancelled. - } else if (task.error) { - // the save failed. - } else { - // the object was saved successfully. - PFObject *object = task.result; - } - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithBlock { - (task: BFTask!) -> BFTask in - if task.isCancelled() { - // the save was cancelled. - } else if task.error != nil { - // the save failed. - } else { - // the object was saved successfully. - var object = task.result() as PFObject - } -} -``` - -BFTasks use Objective-C blocks, so the syntax should be pretty straightforward. Let's look closer at the types involved with an example. - -```objective-c -// Objective-C -/** - * Gets an NSString asynchronously. - */ -- (BFTask *)getStringAsync { - // Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return [[self getNumberAsync] continueWithBlock:^id(BFTask *task) { - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - NSNumber *number = task.result; - return [NSString stringWithFormat:@"%@", number]; - )]; -} -``` - -```swift -// Swift -/** - * Gets an NSString asynchronously. - */ -func getStringAsync() -> BFTask { - //Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return self.getNumberAsync().continueWithBlock { - (task: BFTask!) -> NSString in - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - let number = task.result() as NSNumber - return NSString(format:"%@", number) - } -} -``` - -In many cases, you only want to do more work if the previous task was successful, and propagate any errors or cancellations to be dealt with later. To do this, use the `continueWithSuccessBlock:` method instead of `continueWithBlock:`. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithSuccessBlock:^id(BFTask *task) { - // the object was saved successfully. - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // the object was saved successfully. - return nil -} -``` - -## Chaining Tasks Together - -BFTasks are a little bit magical, in that they let you chain them without nesting. If you return a BFTask from `continueWithBlock:`, then the task returned by `continueWithBlock:` will not be considered finished until the new task returned from the new continuation block. This lets you perform multiple actions without incurring the pyramid code you would get with callbacks. Likewise, you can return a `BFTask` from `continueWithSuccessBlock:`. So, return a `BFTask` to do more asynchronous work. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - return [self saveAsync:valedictorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - PFObject *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - return self.saveAsync(valedictorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! - return nil -} -``` - -## Error Handling - -By carefully choosing whether to call `continueWithBlock:` or `continueWithSuccessBlock:`, you can control how errors are propagated in your application. Using `continueWithBlock:` lets you handle errors by transforming them or dealing with them. You can think of failed tasks kind of like throwing an exception. In fact, if you throw an exception inside a continuation, the resulting task will be faulted with that exception. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - // Force this callback to fail. - return [BFTask taskWithError:[NSError errorWithDomain:@"example.com" - code:-1 - userInfo:nil]]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Now this continuation will be skipped. - PFQuery *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithBlock:^id(BFTask *task) { - if (task.error) { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil; - } - // This will also be skipped. - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! This gets called. - // The task's result is nil. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - //Force this callback to fail. - return BFTask(error:NSError(domain:"example.com", - code:-1, userInfo: nil)) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - //Now this continuation will be skipped. - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - if task.error != nil { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil - } - // This will also be skipped. - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! This gets called. - // The tasks result is nil. - return nil -} -``` - -It's often convenient to have a long chain of success callbacks with only one error handler at the end. - -## Creating Tasks - -When you're getting started, you can just use the tasks returned from methods like `findAsync:` or `saveAsync:`. However, for more advanced scenarios, you may want to make your own tasks. To do that, you create a `BFTaskCompletionSource`. This object will let you create a new `BFTask`, and control whether it gets marked as finished or cancelled. After you create a `BFTaskCompletionSource`, you'll need to call `setResult:`, `setError:`, or `cancel` to trigger its continuations. - -```objective-c -// Objective-C -- (BFTask *)successAsync { - BFTaskCompletionSource *successful = [BFTaskCompletionSource taskCompletionSource]; - [successful setResult:@"The good result."]; - return successful.task; -} - -- (BFTask *)failAsync { - BFTaskCompletionSource *failed = [BFTaskCompletionSource taskCompletionSource]; - [failed setError:[NSError errorWithDomain:@"example.com" code:-1 userInfo:nil]]; - return failed.task; -} -``` - -```swift -// Swift -func successAsync() -> BFTask { - var successful = BFTaskCompletionSource() - successful.setResult("The good result.") - return successful.task -} - -func failAsync() -> BFTask { - var failed = BFTaskCompletionSource() - failed.setError(NSError(domain:"example.com", code:-1, userInfo:nil)) - return failed.task -} -``` - -If you know the result of a task at the time it is created, there are some convenience methods you can use. - -```objective-c -// Objective-C -BFTask *successful = [BFTask taskWithResult:@"The good result."]; - -BFTask *failed = [BFTask taskWithError:anError]; -``` - -```swift -// Swift -let successful = BFTask(result:"The good result") - -let failed = BFTask(error:anError) -``` - -## Creating Async Methods - -With these tools, it's easy to make your own asynchronous functions that return tasks. For example, you can make a task-based version of `fetchAsync:` easily. - -```objective-c -// Objective-C -- (BFTask *) fetchAsync:(PFObject *)object { - BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource]; - [object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { - if (!error) { - [task setResult:object]; - } else { - [task setError:error]; - } - }]; - return task.task; -} -``` - -```swift -// Swift -func fetchAsync(object: PFObject) -> BFTask { - var task = BFTaskCompletionSource() - object.fetchInBackgroundWithBlock { - (object: PFObject?, error: NSError?) -> Void in - if error == nil { - task.setResult(object) - } else { - task.setError(error) - } - } - return task.task -} - -``` - -It's similarly easy to create `saveAsync:`, `findAsync:` or `deleteAsync:`. - -## Tasks in Series - -`BFTasks` are convenient when you want to do a series of tasks in a row, each one waiting for the previous to finish. For example, imagine you want to delete all of the comments on your blog. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *task) { - NSArray *results = task.result; - - // Create a trivial completed task as a base case. - BFTask *task = [BFTask taskWithResult:nil]; - for (PFObject *result in results) { - // For each item, extend the task with a function to delete the item. - task = [task continueWithBlock:^id(BFTask *task) { - // Return a task that will be marked as completed when the delete is finished. - return [self deleteAsync:result]; - }]; - } - return task; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - let results = task.result() as NSArray - - // Create a trivial completed task as a base case. - let task = BFTask(result:nil) - for result : PFObject in results { - // For each item, extend the task with a function to delete the item. - task = task.continueWithBlock { - (task: BFTask!) -> BFTask in - return self.deleteAsync(result) - } - } - return task -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Tasks in Parallel - -You can also perform several tasks in parallel, using the `taskForCompletionOfAllTasks:` method. You can start multiple operations at once, and use `taskForCompletionOfAllTasks:` to create a new task that will be marked as completed when all of its input tasks are completed. The new task will be successful only if all of the passed-in tasks succeed. Performing operations in parallel will be faster than doing them serially, but may consume more system resources and bandwidth. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *results) { - // Collect one task for each delete into an array. - NSMutableArray *tasks = [NSMutableArray array]; - for (PFObject *result in results) { - // Start this delete immediately and add its task to the list. - [tasks addObject:[self deleteAsync:result]]; - } - // Return a new task that will be marked as completed when all of the deletes are - // finished. - return [BFTask taskForCompletionOfAllTasks:tasks]; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) - -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - // Collect one task for each delete into an array. - var tasks = NSMutableArray.array() - var results = task.result() as NSArray - for result : PFObject! in results { - // Start this delete immediately and add its task to the list. - tasks.addObject(self.deleteAsync(result)) - } - // Return a new task that will be marked as completed when all of the deletes - // are finished. - return BFTask(forCompletionOfAllTasks:tasks) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Task Executors - -Both `continueWithBlock:` and `continueWithSuccessBlock:` methods have another form that takes an instance of `BFExecutor`. These are `continueWithExecutor:withBlock:` and `continueWithExecutor:withSuccessBlock:`. These methods allow you to control how the continuation is executed. The default executor will dispatch to GCD, but you can provide your own executor to schedule work onto a different thread. For example, if you want to continue with work on the UI thread: - -```objective-c -// Create a BFExecutor that uses the main thread. -BFExecutor *myExecutor = [BFExecutor executorWithBlock:^void(void(^block)()) { - dispatch_async(dispatch_get_main_queue(), block); -}]; - -// And use the Main Thread Executor like this. The executor applies only to the new -// continuation being passed into continueWithBlock. -[[self fetchAsync:object] continueWithExecutor:myExecutor withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -For common cases, such as dispatching on the main thread, we have provided default implementations of `BFExecutor`. These include `defaultExecutor`, `immediateExecutor`, `mainThreadExecutor`, `executorWithDispatchQueue:`, and `executorWithOperationQueue:`. For example: - -```objective-c -// Continue on the Main Thread, using a built-in executor. -[[self fetchAsync:object] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -## Task Cancellation - -It's generally bad design to keep track of the `BFTaskCompletionSource` for cancellation. A better model is to create a "cancellation token" at the top level, and pass that to each async function that you want to be part of the same "cancelable operation". Then, in your continuation blocks, you can check whether the cancellation token has been cancelled and bail out early by returning a `[BFTask cancelledTask]`. For example: - -```objective-c -- (void)doSomethingComplicatedAsync:(MYCancellationToken *)cancellationToken { - [[self doSomethingAsync:cancellationToken] continueWithBlock:^{ - if (cancellationToken.isCancelled) { - return [BFTask cancelledTask]; - } - // Do something that takes a while. - return result; - }]; -} - -// Somewhere else. -MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init]; -[obj doSomethingComplicatedAsync:cancellationToken]; - -// When you get bored... -[cancellationToken cancel]; -``` - -**Note:** The cancellation token implementation should be thread-safe. -We are likely to add some concept like this to Bolts at some point in the future. - -# App Links - -[App Links](http://applinks.org/) provide a cross-platform mechanism that allows a developer to define and publish a deep-linking scheme for their content, allowing other apps to link directly to an experience optimized for the device they are running on. Whether you are building an app that receives incoming links or one that may link out to other apps' content, Bolts provides tools to simplify implementation of the [App Links protocol](http://applinks.org/documentation). - -## Handling an App Link - -The most common case will be making your app receive App Links. In-linking will allow your users to quickly access the richest, most native-feeling presentation of linked content on their devices. Bolts makes it easy to handle an inbound App Link (as well as general inbound deep-links) by providing utilities for processing an incoming URL. - -For example, you can use the `BFURL` utility class to parse an incoming URL in your `AppDelegate`: - -```objective-c -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:sourceApplication]; - - // Use the target URL from the App Link to locate content. - if ([parsedUrl.targetURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.targetQueryParameters[@"query"]; - - // Apps that have existing deep-linking support and map their App Links to existing - // deep-linking functionality may instead want to perform these operations on the input URL. - // Use the target URL from the App Link to locate content. - if ([parsedUrl.inputURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.inputQueryParameters[@"query"]; - - // Apps can easily check the Extras and App Link data from the App Link as well. - NSString *fbAccessToken = parsedUrl.appLinkExtras[@"fb_access_token"]; - NSDictionary *refererData = parsedUrl.appLinkExtras[@"referer"]; -} -``` - -## Navigating to a URL - -Following an App Link allows your app to provide the best user experience (as defined by the receiving app) when a user navigates to a link. Bolts makes this process simple, automating the steps required to follow a link: - -1. Resolve the App Link by getting the App Link metadata from the HTML at the URL specified. -2. Step through App Link targets relevant to the device being used, checking whether the app that can handle the target is present on the device. -3. If an app is present, build a URL with the appropriate al_applink_data specified and navigate to that URL. -4. Otherwise, open the browser with the original URL specified. - -In the simplest case, it takes just one line of code to navigate to a URL that may have an App Link: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -### Adding App and Navigation Data - -Under most circumstances, the data that will need to be passed along to an app during a navigation will be contained in the URL itself, so that whether or not the app is actually installed on the device, users are taken to the correct content. Occasionally, however, apps will want to pass along data that is relevant for app-to-app navigation, or will want to augment the App Link protocol with information that might be used by the app to adjust how the app should behave (e.g. showing a link back to the referring app). - -If you want to take advantage of these features, you can break apart the navigation process. First, you must have an App Link to which you wish to navigate: - -```objective-c -[[BFAppLinkNavigation resolveAppLinkInBackground:url] continueWithSuccessBlock:^id(BFTask *task) { - BFAppLink *link = task.result; -}]; -``` - -Then, you can build an App Link request with any additional data you would like and navigate: - -```objective-c -BFAppLinkNavigation *navigation = [BFAppLinkNavigation navigationWithAppLink:link - extras:@{ @"access_token": @"t0kEn" } - appLinkData:@{ @"ref": @"12345" }]; -NSError *error = nil; -[navigation navigate:&error]; -``` - -### Resolving App Link Metadata - -Bolts allows for custom App Link resolution, which may be used as a performance optimization (e.g. caching the metadata) or as a mechanism to allow developers to use a centralized index for obtaining App Link metadata. A custom App Link resolver just needs to be able to take a URL and return a `BFAppLink` containing the ordered list of `BFAppLinkTarget`s that are applicable for this device. Bolts provides one of these out of the box that performs this resolution on the device using a hidden UIWebView. - -You can use any resolver that implements the `BFAppLinkResolving` protocol by using one of the overloads on `BFAppLinkNavigation`: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url - resolver:resolver]; -``` - -Alternatively, a you can swap out the default resolver to be used by the built-in APIs: - -```objective-c -[BFAppLinkNavigation setDefaultResolver:resolver]; -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -## App Link Return-to-Referer View - -When an application is opened via an App Link, a banner allowing the user to "Touch to return to " should be displayed. The `BFAppLinkReturnToRefererView` provides this functionality. It will take an incoming App Link and parse the referer information to display the appropriate calling app name. - -```objective-c -- (void)viewDidLoad { - [super viewDidLoad]; - - // Perform other view initialization. - - self.returnToRefererController = [[BFAppLinkReturnToRefererController alloc] init]; - - // self.returnToRefererView is a BFAppLinkReturnToRefererView. - // You may initialize the view either by loading it from a NIB or programmatically. - self.returnToRefererController.view = self.returnToRefererView; - - // If you have a UINavigationController in the view, then the bar must be shown above it. - [self.returnToRefererController] -} -``` - -The following code assumes that the view controller has an `openedAppLinkURL` `NSURL` property that has already been populated with the URL used to open the app. You can then do something like this to show the view: - -```objective-c -- (void)viewWillAppear { - [super viewWillAppear]; - - // Show only if you have a back AppLink. - [self.returnToRefererController showViewForRefererURL:self.openedAppLinkURL]; -} -``` - -In a navigation-controller view hierarchy, the banner should be displayed above the navigation bar, and `BFAppLinkReturnToRefererController` provides an `initForDisplayAboveNavController` method to assist with this. - -## Analytics - -Bolts introduces Measurement Event. App Links posts three different Measurement Event notifications to the application, which can be caught and integrated with existing analytics components in your application. - -* `al_nav_out` — Raised when your app switches out to an App Links URL. -* `al_nav_in` — Raised when your app opens an incoming App Links URL. -* `al_ref_back_out` — Raised when your app returns back the referrer app using the built-in top navigation back bar view. - -### Listen for App Links Measurement Events - -There are other analytics tools that are integrated with Bolts' App Links events, but you can also listen for these events yourself: - -```objective-c -[[NSNotificationCenter defaultCenter] addObserverForName:BFMeasurementEventNotificationName object:nil queue:nil usingBlock:^(NSNotification *note) { - NSDictionary *event = note.userInfo; - NSDictionary *eventData = event[BFMeasurementEventArgsKey]; - // Integrate to your logging/analytics component. -}]; -``` - -### App Links Event Fields - -App Links Measurement Events sends additional information from App Links Intents in flattened string key value pairs. Here are some of the useful fields for the three events. - -* `al_nav_in` - * `inputURL`: the URL that opens the app. - * `inputURLScheme`: the scheme of `inputURL`. - * `refererURL`: the URL that the referrer app added into `al_applink_data`: `referer_app_link`. - * `refererAppName`: the app name that the referrer app added to `al_applink_data`: `referer_app_link`. - * `sourceApplication`: the bundle of referrer application. - * `targetURL`: the `target_url` field in `al_applink_data`. - * `version`: App Links API version. - -* `al_nav_out` / `al_ref_back_out` - * `outputURL`: the URL used to open the other app (or browser). If there is an eligible app to open, this will be the custom scheme url/intent in `al_applink_data`. - * `outputURLScheme`: the scheme of `outputURL`. - * `sourceURL`: the URL of the page hosting App Links meta tags. - * `sourceURLHost`: the hostname of `sourceURL`. - * `success`: `“1”` to indicate success in opening the App Link in another app or browser; `“0”` to indicate failure to open the App Link. - * `type`: `“app”` for open in app, `“web”` for open in browser; `“fail”` when the success field is `“0”`. - * `version`: App Links API version. - -# Installation - -You can download the latest framework files from our [Releases page](https://github.com/BoltsFramework/Bolts-ObjC/releases). - -Bolts is also available through [CocoaPods](https://cocoapods.org/). To install it simply add the following line to your Podfile: - - pod 'Bolts' diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/FBAudienceNetwork b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/FBAudienceNetwork similarity index 63% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/FBAudienceNetwork rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/FBAudienceNetwork index 4be0a79ac3..6a9f5e0e89 100644 Binary files a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/FBAudienceNetwork and b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/FBAudienceNetwork 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 new file mode 100644 index 0000000000..313c7d2fbc --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h @@ -0,0 +1,49 @@ +// 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 new file mode 100644 index 0000000000..ace31e0493 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h @@ -0,0 +1,103 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h similarity index 69% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h index f97e954b3a..52c2149cba 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h @@ -19,11 +19,12 @@ #import #import +#import NS_ASSUME_NONNULL_BEGIN @class FBAdImage; -@class FBNativeAd; +@class FBNativeAdBase; @class FBNativeAdViewAttributes; /** @@ -50,42 +51,52 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** 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) FBNativeAd *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; /** - Initialize this view with a given native ad. Configuration is pulled from the native ad. - - - Parameter nativeAd: The native ad to initialize with. + The tag for AdChoices view. It always returns FBNativeAdViewTagChoicesIcon. */ -- (instancetype)initWithNativeAd:(FBNativeAd *)nativeAd; +@property (nonatomic, assign, readonly) FBNativeAdViewTag nativeAdViewTag; /** Initialize this view with a given native ad. Configuration is pulled from the native ad. - - Parameter nativeAd: The native ad to initialize with. - - Parameter expandable: Controls whether view defaults to expanded or not, see property documentation + @param nativeAd The native ad to initialize with. */ -- (instancetype)initWithNativeAd:(FBNativeAd *)nativeAd +- (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. - - Parameter nativeAd: The native ad to initialize with. - - Parameter expandable: Controls whether view defaults to expanded or not, see property documentation - - Parameter attributes: Attributes to configure look and feel. + @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:(FBNativeAd *)nativeAd +- (instancetype)initWithNativeAd:(FBNativeAdBase *)nativeAd expandable:(BOOL)expandable attributes:(nullable FBNativeAdViewAttributes *)attributes; @@ -97,10 +108,16 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Using the superview, this updates the frame of this view, positioning the icon in the corner specified. UIRectCornerAllCorners not supported. - - Parameter corner: The corner to display this view from. - - Parameter insets: Insets to take into account when positioning the view. Only respective insets are applied to corners. + @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 diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdDefines.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h similarity index 87% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdDefines.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h index 5203db1b91..5a63b67613 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdDefines.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h @@ -35,6 +35,7 @@ #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 @@ -60,18 +61,6 @@ #define __nullable #endif -#ifndef FB_IOS9_SDK_OR_LATER -#define FB_IOS9_SDK_OR_LATER (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0) -#endif - -#ifndef FBInterfaceOrientationMask -#if !FB_IOS9_SDK_OR_LATER -#define FBInterfaceOrientationMask NSUInteger -#else -#define FBInterfaceOrientationMask UIInterfaceOrientationMask -#endif // FB_IOS9_SDK_OR_LATER -#endif // FBInterfaceOrientationMask - #ifndef FB_SUBCLASSING_RESTRICTED #if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) #define FB_SUBCLASSING_RESTRICTED __attribute__((objc_subclassing_restricted)) diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h new file mode 100644 index 0000000000..fb262889ba --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h @@ -0,0 +1,100 @@ +// 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 new file mode 100644 index 0000000000..f9e8ed9700 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdIconView.h @@ -0,0 +1,38 @@ +// 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 new file mode 100644 index 0000000000..9e9914958e --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdImage.h @@ -0,0 +1,64 @@ +// 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 new file mode 100644 index 0000000000..4115454f50 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h @@ -0,0 +1,54 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdSettings.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h similarity index 80% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdSettings.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h index 0359343cb1..1e773c644c 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdSettings.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h @@ -63,7 +63,7 @@ typedef NS_ENUM(NSInteger, FBMediaViewRenderingMethod) { FBMediaViewRenderingMethodOpenGL, /// Software fallback FBMediaViewRenderingMethodSoftware -}; +} FB_DEPRECATED_WITH_MESSAGE("Rendering method is no longer used in Audience Network"); /** Test Ad type to be injected when test mode is on @@ -90,7 +90,11 @@ typedef NS_ENUM(NSInteger, FBAdTestAdType) { /// 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 + 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; @@ -125,6 +129,11 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED */ @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. */ @@ -138,7 +147,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Adds a test device. - - Parameter deviceHash: The id of the device to use test mode, can be obtained from debug log or testDeviceHash + @param deviceHash The id of the device to use test mode, can be obtained from debug log or testDeviceHash @@ -150,7 +159,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Add a collection of test devices. See `+addTestDevices:` for details. - - Parameter devicesHash: The array of the device id to use test mode, can be obtained from debug log or testDeviceHash + @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; @@ -162,24 +171,32 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Clears the added test device - - Parameter deviceHash: The id of the device using test mode, can be obtained from debug log or testDeviceHash + @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. - - Parameter isChildDirected: Indicates whether you would like your ad control to be treated 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; ++ (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 - - Parameter service: Representing the name of the mediation that is mediation Audience Network + @param service Representing the name of the mediation that is mediation Audience Network */ + (void)setMediationService:(NSString *)service; @@ -212,7 +229,8 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Gets the FBMediaView rendering method */ -+ (FBMediaViewRenderingMethod)mediaViewRenderingMethod; ++ (FBMediaViewRenderingMethod) + mediaViewRenderingMethod FB_DEPRECATED_WITH_MESSAGE("Rendering method is no longer used in Audience Network"); /** Sets the FBMediaView rendering method @@ -222,7 +240,8 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED FBMediaViewRenderingMethodOpenGL: use OpenGL rendering method FBMediaViewRenderingMethodSoftware: use software rendering method */ -+ (void)setMediaViewRenderingMethod:(FBMediaViewRenderingMethod)mediaViewRenderingMethod; ++ (void)setMediaViewRenderingMethod:(FBMediaViewRenderingMethod)mediaViewRenderingMethod + FB_DEPRECATED_WITH_MESSAGE("Rendering method is no longer used in Audience Network"); @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 new file mode 100644 index 0000000000..1dc99c575a --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h @@ -0,0 +1,43 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdSize.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSize.h similarity index 100% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdSize.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSize.h diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h new file mode 100644 index 0000000000..17c008b609 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h @@ -0,0 +1,40 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdView.h similarity index 66% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdView.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdView.h index 1f98ab0045..d460f575c1 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAdView.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdView.h @@ -20,6 +20,7 @@ #import #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -35,14 +36,27 @@ FB_CLASS_EXPORT /** This is a method to initialize an FBAdView matching the given placement id. - - Parameter placementID: The id of the ad placement. You can create your placement id from Facebook developers page. - - Parameter adSize: The size of the ad; for example, kFBAdSizeHeight50Banner or kFBAdSizeHeight90Banner. - - Parameter viewController: The view controller that will be used to present the ad and the app store view. + @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. @@ -59,23 +73,14 @@ FB_CLASS_EXPORT You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. - - Parameter bidPayload: The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. + @param bidPayload The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. */ - (void)loadAdWithBidPayload:(NSString *)bidPayload; /** - This is a method to disable auto refresh for the FBAdView instance - - - By default, we read the refresh interval from the placement setting in your Facebook - developers page. Once you call this method, the auto refresh will be disabled for this FBAdView - instance, and you cannot re-enable the refresh for this instance. A new created FBAdView will still - use the default behavior. - - This method is designed for ad network mediation. We still recommend you to set the placement - refresh interval as 'None' if you're using one of the ad network mediation. + There is no reason to call this method anymore. Autorefresh is disabled by default. */ -- (void)disableAutoRefresh; +- (void)disableAutoRefresh FB_DEPRECATED; /** Typed access to the id of the ad placement. @@ -85,10 +90,18 @@ FB_CLASS_EXPORT 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 @@ -104,7 +117,7 @@ FB_CLASS_EXPORT /** Sent after an ad has been clicked by the person. - - Parameter adView: An FBAdView object sending the message. + @param adView An FBAdView object sending the message. */ - (void)adViewDidClick:(FBAdView *)adView; /** @@ -112,27 +125,27 @@ FB_CLASS_EXPORT interaction with the modal view and dismiss it, this message will be sent, returning control to the application. - - Parameter adView: An FBAdView object sending the message. + @param adView An FBAdView object sending the message. */ - (void)adViewDidFinishHandlingClick:(FBAdView *)adView; /** Sent when an ad has been successfully loaded. - - Parameter adView: An FBAdView object sending the message. + @param adView An FBAdView object sending the message. */ - (void)adViewDidLoad:(FBAdView *)adView; /** Sent after an FBAdView fails to load the ad. - - Parameter adView: An FBAdView object sending the message. - - Parameter error: An error object containing details of the error. + @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. - - Parameter adView: An FBAdView object sending the message. + @param adView An FBAdView object sending the message. */ - (void)adViewWillLogImpression:(FBAdView *)adView; @@ -140,7 +153,7 @@ FB_CLASS_EXPORT 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. - - Returns: A view controller that is used to present modal content. + @return A view controller that is used to present modal content. */ @property (nonatomic, readonly, strong) UIViewController *viewControllerForPresentingModalView; diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h new file mode 100644 index 0000000000..378bd1ed81 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h @@ -0,0 +1,62 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h similarity index 73% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h index 07858208c0..7f5c435260 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h @@ -1,3 +1,4 @@ + // Copyright 2004-present Facebook. All Rights Reserved. // // You are hereby granted a non-exclusive, worldwide, royalty-free license to use, @@ -20,8 +21,12 @@ #import #import +#import +#import +#import #import #import +#import #import #import #import @@ -34,9 +39,21 @@ #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 @"4.28.1" +#define FB_AD_SDK_VERSION @"5.6.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 new file mode 100644 index 0000000000..b90b41cb87 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h @@ -0,0 +1,103 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h similarity index 83% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h index d9565a86d7..22eae1d0c4 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h @@ -19,6 +19,7 @@ #import #import +#import NS_ASSUME_NONNULL_BEGIN @@ -49,11 +50,16 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED */ @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. - - Parameter placementID: The id of the ad placement. You can create your placement id from Facebook developers page. + @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; @@ -72,7 +78,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods of `FBInstreamAdViewDelegate` to be notified when loading succeeds or fails. - - Parameter bidPayload: The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. + @param bidPayload The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. */ - (void)loadAdWithBidPayload:(NSString *)bidPayload; @@ -80,7 +86,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Begins ad playback. This method should only be called after an `adViewDidLoad:` call has been received. - - Parameter rootViewController: The view controller that will be used to modally + @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; @@ -96,7 +102,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Sent when an FBInstreamAdView instance successfully loads an ad. - - Parameter adView: The FBInstreamAdView object sending the message. + @param adView The FBInstreamAdView object sending the message. */ - (void)adViewDidLoad:(FBInstreamAdView *)adView; @@ -105,7 +111,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED deallocated. This method is mutually exclusive to `adView:didFailWithError:`, and it is impossible for both methods to be received for a single ad session. - - Parameter adView: The FBInstreamAdView object sending the message. + @param adView The FBInstreamAdView object sending the message. */ - (void)adViewDidEnd:(FBInstreamAdView *)adView; @@ -115,8 +121,8 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED `loadAd` (if they ad fails to load) or after `showAdFromRootViewController:` (if the ad has a playback failure). - - Parameter adView: The FBInstreamAdView object sending the message. - - Parameter error: An NSError object containing details of the error. + @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; @@ -126,14 +132,14 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Sent when the user has touched the click-through interface element. The ad's landing page will be shown. - - Parameter adView: The FBInstreamAdView object sending the message. + @param adView The FBInstreamAdView object sending the message. */ - (void)adViewDidClick:(FBInstreamAdView *)adView; /** Sent immediately before the impression of an FBInstreamAdView object will be logged. - - Parameter adView: The FBInstreamAdView object sending the message. + @param adView The FBInstreamAdView object sending the message. */ - (void)adViewWillLogImpression:(FBInstreamAdView *)adView; diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h similarity index 82% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h index b1617b55be..b52fd46f03 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h @@ -20,6 +20,7 @@ #import #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -41,11 +42,15 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED 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. - - Parameter placementID: The id of the ad placement. You can create your placement id from Facebook developers page. + @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; @@ -73,14 +78,14 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. - - Parameter bidPayload: The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. + @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. - - Parameter rootViewController: The view controller that will be used to present the interstitial ad. + @param rootViewController The view controller that will be used to present the interstitial ad. You can implement `interstitialAdDidClick:`, `interstitialAdWillClose:` and `interstitialAdWillClose` @@ -103,7 +108,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Sent after an ad in the FBInterstitialAd object is clicked. The appropriate app store view or app browser will be launched. - - Parameter interstitialAd: An FBInterstitialAd object sending the message. + @param interstitialAd An FBInterstitialAd object sending the message. */ - (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd; @@ -111,36 +116,36 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Sent after an FBInterstitialAd object has been dismissed from the screen, returning control to your application. - - Parameter interstitialAd: An FBInterstitialAd object sending the message. + @param interstitialAd An FBInterstitialAd object sending the message. */ - (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd; /** Sent immediately before an FBInterstitialAd object will be dismissed from the screen. - - Parameter interstitialAd: An FBInterstitialAd object sending the message. + @param interstitialAd An FBInterstitialAd object sending the message. */ - (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd; /** Sent when an FBInterstitialAd successfully loads an ad. - - Parameter interstitialAd: An FBInterstitialAd object sending the message. + @param interstitialAd An FBInterstitialAd object sending the message. */ - (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd; /** Sent when an FBInterstitialAd failes to load an ad. - - Parameter interstitialAd: An FBInterstitialAd object sending the message. - - Parameter error: An error object containing details of the error. + @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. - - Parameter interstitialAd: An FBInterstitialAd object sending the message. + @param interstitialAd An FBInterstitialAd object sending the message. */ - (void)interstitialAdWillLogImpression:(FBInterstitialAd *)interstitialAd; diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h new file mode 100644 index 0000000000..c111748503 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h @@ -0,0 +1,50 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBMediaView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaView.h similarity index 74% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBMediaView.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaView.h index c897ac8d22..91633ec6cf 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBMediaView.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaView.h @@ -20,6 +20,7 @@ #import #import +#import NS_ASSUME_NONNULL_BEGIN @@ -37,37 +38,32 @@ FB_CLASS_EXPORT */ @property (nonatomic, weak, nullable) id delegate; -/** - This is a method to create a media view using the given native ad. - - Parameter nativeAd: The native ad to load media content from. - */ -- (instancetype)initWithNativeAd:(FBNativeAd *)nativeAd; - -/** - the native ad, can be set again to reuse this view. - */ -@property (nonatomic, strong) FBNativeAd *nativeAd; - /** 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 FB_DEPRECATED; +@property (nonatomic, assign, readonly) float volume; /** - Enables or disables autoplay for some types of media. Defaults to YES. + Shows if the video will autoplay or not */ -@property (nonatomic, assign, getter=isAutoplayEnabled) BOOL autoplayEnabled; +@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. */ @@ -78,9 +74,6 @@ FB_CLASS_EXPORT */ - (void)applyNaturalHeight; -// Setting autoplayEnabled in the SDK is deprecated. Migrate to using server-side control when available. -- (void)setAutoplayEnabled:(BOOL)autoplayEnabled FB_DEPRECATED; - @end /** @@ -93,50 +86,50 @@ FB_CLASS_EXPORT /** Sent when an FBMediaView has been successfully loaded. - - Parameter mediaView: An FBMediaView object sending the message. + @param mediaView An FBMediaView object sending the message. */ - (void)mediaViewDidLoad:(FBMediaView *)mediaView; /** Sent just before an FBMediaView will enter the fullscreen layout. - - Parameter mediaView: An FBMediaView object sending the message. + @param mediaView An FBMediaView object sending the message. */ - (void)mediaViewWillEnterFullscreen:(FBMediaView *)mediaView; /** Sent after an FBMediaView has exited the fullscreen layout. - - Parameter mediaView: An FBMediaView object sending the message. + @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. - - Parameter mediaView: An FBMediaView object sending the message. - - Parameter volume: The current ad video volume (after the volume change). + @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. - - Parameter mediaView: An FBMediaView object sending the message. + @param mediaView An FBMediaView object sending the message. */ - (void)mediaViewVideoDidPause:(FBMediaView *)mediaView; /** Sent after a video ad in an FBMediaView enters a playing state. - - Parameter mediaView: An FBMediaView object sending the message. + @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. - - Parameter mediaView: An FBMediaView object sending the message. + @param mediaView An FBMediaView object sending the message. */ - (void)mediaViewVideoDidComplete:(FBMediaView *)mediaView; diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h similarity index 91% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h index cf4a300c6c..40a87bed30 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h @@ -76,15 +76,15 @@ FB_CLASS_EXPORT /** Seeks the video to a particular time location. Only works after calling `engageVideoSeek`. - - Parameter time: The requested time location, expressed as a CMTime value. + @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. - - Parameter interval: The time interval at which the block should be invoked during normal playback, according to progress of the player's current time. - - Parameter queue: A serial dispatch queue onto which block should be enqueued. - - Parameter block: The block to be invoked periodically. + @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 diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h new file mode 100644 index 0000000000..e066b0975b --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h @@ -0,0 +1,173 @@ +// 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 + @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 new file mode 100644 index 0000000000..97e92f7b88 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h @@ -0,0 +1,195 @@ +// 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; +/** + 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 new file mode 100644 index 0000000000..6a5c916408 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h @@ -0,0 +1,41 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h similarity index 71% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h index e18d37c803..ba19ccfb5e 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h @@ -20,6 +20,7 @@ #import #import +#import #import #import @@ -36,46 +37,51 @@ FB_CLASS_EXPORT */ @property (nonatomic, weak, nullable) id delegate; +/** + FBAdExtraHint to provide extra info + */ +@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; + /** Create a FBNativeAdCollectionViewAdProvider. - - Parameter manager: The FBNativeAdsManager which is consumed by this class. + @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. - - Parameter collectionView: The collectionView where native ad will be used - - Parameter indexPath: The indexPath to use as a key for this native ad - - Returns: A FBNativeAd which is loaded and ready to be used. + @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. - - Parameter indexPath: The indexPath of the cell within the collection view - - Parameter stride: The frequency that native ads are to appear within the collection view - - Returns: Boolean indicating whether the cell at the path is an ad + @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. - - Parameter indexPath: The indexPath to of the non-ad cell - - Parameter stride: The frequency that native ads are to appear within the collection view - - Returns: An indexPath adjusted to what it would be in a collection view 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 */ -- (NSIndexPath *)adjustNonAdCellIndexPath:(NSIndexPath *)indexPath forStride:(NSUInteger)stride; +- (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. - - Parameter count: The count of cells in the collection view not including ads - - Parameter stride: The frequency that native ads are to appear within the collection view - - Returns: The total count of cells within the collection view including both ad and non-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; diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h similarity index 85% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h index 6593f6743b..9a31a3de7c 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h @@ -36,17 +36,17 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Method to create a FBNativeAdCollectionViewCellProvider. - - Parameter manager: The naitve ad manager consumed by this provider - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. + @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. - - Parameter manager: The naitve ad manager consumed by this provider - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. - - Parameter attributes: The layout of this native ad template. For more information, consult FBNativeAdViewLayout. + @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; diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h similarity index 74% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h index 7209934716..a5efe0e5a7 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h @@ -67,8 +67,8 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** 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. - - Parameter manager: An instance of FBNativeAdManager. Can be preloaded with ads. - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. + @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; @@ -76,9 +76,9 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** 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. - - Parameter manager: An instance of FBNativeAdManager. Can be preloaded with ads. - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. - - Parameter attributes: The layout of this native ad template. For more information, consult FBNativeAdViewLayout. + @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 @@ -86,10 +86,10 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** 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. - - Parameter manager: An instance of FBNativeAdManager. Can be preloaded with ads. - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. - - Parameter attributes: The layout of this native ad template. For more information, consult FBNativeAdViewLayout. - - Parameter maximumNativeAdCount: Maximum native ads to show at once. + @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 @@ -99,17 +99,17 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** This is a method to create a native ad horizontal scroll view from a user provided view. - - Parameter manager: An instance of FBNativeAdManager. Can be preloaded with ads. - - Parameter 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 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. - - Parameter manager: An instance of FBNativeAdManager. Can be preloaded with ads. - - Parameter 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. - - Parameter maximumNativeAdCount: Maximum native ads to show at once. + @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 diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h similarity index 72% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h index fbc17504e0..3f979381c6 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h @@ -20,6 +20,7 @@ #import #import +#import #import #import @@ -36,46 +37,51 @@ FB_CLASS_EXPORT */ @property (nonatomic, weak, nullable) id delegate; +/** + FBAdExtraHint to provide extra info + */ +@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; + /** Create a FBNativeAdTableViewAdProvider. - - Parameter manager: The FBNativeAdsManager which is consumed by this class. + @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. - - Parameter tableView: The tableView where native ad will be used - - Parameter indexPath: The indexPath to use as a key for this native ad - - Returns: A FBNativeAd which is loaded and ready to be used. + @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. - - Parameter indexPath: The indexPath of the cell within the table view - - Parameter stride: The frequency that native ads are to appear within the table view - - Returns: Boolean indicating whether the cell at the path is an ad + @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. - - Parameter indexPath: The indexPath to of the non-ad cell - - Parameter stride: The frequency that native ads are to appear within the table view - - Returns: An indexPath adjusted to what it would be in a table view 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 */ -- (NSIndexPath *)adjustNonAdCellIndexPath:(NSIndexPath *)indexPath forStride:(NSUInteger)stride; +- (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. - - Parameter count: The count of cells in the table view not including ads - - Parameter stride: The frequency that native ads are to appear within the table view - - Returns: The total count of cells within the table view including both ad and non-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; diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h similarity index 86% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h index 2a1bbb2662..c5c61b3a6a 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h @@ -36,17 +36,17 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Method to create a FBNativeAdTableViewCellProvider. - - Parameter manager: The naitve ad manager consumed by this provider - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. + @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. - - Parameter manager: The naitve ad manager consumed by this provider - - Parameter type: The type of this native ad template. For more information, consult FBNativeAdViewType. - - Parameter attributes: The layout of this native ad template. For more information, consult FBNativeAdViewLayout. + @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; diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h new file mode 100644 index 0000000000..cbbcf535ac --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h @@ -0,0 +1,92 @@ +// 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 new file mode 100644 index 0000000000..07002fa7c4 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h @@ -0,0 +1,84 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h similarity index 89% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h index 82cf24a484..36becefc6c 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h @@ -19,6 +19,7 @@ #import #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -38,7 +39,7 @@ NS_ASSUME_NONNULL_BEGIN /** When the FBNativeAdsManager has reached a failure while attempting to load a batch of ads this message will be sent to the application. - - Parameter error: An NSError object with information about the failure. + @param error An NSError object with information about the failure. */ - (void)nativeAdsFailedToLoadWithError:(NSError *)error; @@ -70,11 +71,16 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED */ @property (nonatomic, assign, getter=isValid, readonly) BOOL valid; +/** + FBAdExtraHint to provide extra info + */ +@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; + /** Initialize the native ads manager. - - Parameter placementID: The id of the ad placement. You can create your placement id from Facebook developers page. - - Parameter numAdsRequested: The number of ads you would like the native ads manager to retrieve. + @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; @@ -93,7 +99,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** 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. - - Returns: A FBNativeAd which is loaded and ready to be used. + @return A FBNativeAd which is loaded and ready to be used. */ @property (nonatomic, readonly, strong, nullable) FBNativeAd *nextNativeAd; diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h new file mode 100644 index 0000000000..7c0d0d152e --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h @@ -0,0 +1,168 @@ +// 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 new file mode 100644 index 0000000000..17b00e17e3 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h @@ -0,0 +1,80 @@ +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h similarity index 83% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h index e33a2896ba..14ce6e8b05 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h @@ -21,6 +21,7 @@ #import #import +#import NS_ASSUME_NONNULL_BEGIN @@ -50,16 +51,19 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** 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; + /** This is a method to initialize an FBRewardedVideoAd matching the given placement id. - - Parameter placementID: The id of the ad placement. You can create your placement id from Facebook developers page. + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. */ - (instancetype)initWithPlacementID:(NSString *)placementID; @@ -107,7 +111,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Presents the rewarded video ad modally from the specified view controller. - - Parameter rootViewController: The view controller that will be used to present the rewarded video ad. + @param rootViewController The view controller that will be used to present the rewarded video ad. You can implement `rewardedVideoAdDidClick:` and `rewardedVideoAdWillClose:` @@ -118,8 +122,8 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Presents the rewarded video ad modally from the specified view controller. - - Parameter rootViewController: The view controller that will be used to present the rewarded video ad. - - Parameter flag: Pass YES to animate the presentation; otherwise, pass NO. + @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:` @@ -141,14 +145,14 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED /** Sent after an ad has been clicked by the person. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdDidClick:(FBRewardedVideoAd *)rewardedVideoAd; /** Sent when an ad has been successfully loaded. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdDidLoad:(FBRewardedVideoAd *)rewardedVideoAd; @@ -156,22 +160,22 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Sent after an FBRewardedVideoAd object has been dismissed from the screen, returning control to your application. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdDidClose:(FBRewardedVideoAd *)rewardedVideoAd; /** Sent immediately before an FBRewardedVideoAd object will be dismissed from the screen. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdWillClose:(FBRewardedVideoAd *)rewardedVideoAd; /** Sent after an FBRewardedVideoAd fails to load the ad. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. - - Parameter error: An error object containing details of the error. + @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; @@ -179,21 +183,21 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Sent after the FBRewardedVideoAd object has finished playing the video successfully. Reward the user on this callback. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdVideoComplete:(FBRewardedVideoAd *)rewardedVideoAd; /** Sent immediately before the impression of an FBRewardedVideoAd object will be logged. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @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. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdServerRewardDidSucceed:(FBRewardedVideoAd *)rewardedVideoAd; @@ -201,7 +205,7 @@ FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED Sent if server call to publisher's reward endpoint did not return HTTP status code 200 or if the endpoint timed out. - - Parameter rewardedVideoAd: An FBRewardedVideoAd object sending the message. + @param rewardedVideoAd An FBRewardedVideoAd object sending the message. */ - (void)rewardedVideoAdServerRewardDidFail:(FBRewardedVideoAd *)rewardedVideoAd; diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h new file mode 100644 index 0000000000..6d0bf7e7ac --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h @@ -0,0 +1,58 @@ +// 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 new file mode 100644 index 0000000000..ca37fef8f4 --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h @@ -0,0 +1,46 @@ +// 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 new file mode 100644 index 0000000000..4c46932f45 Binary files /dev/null and b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Info.plist differ diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Modules/module.modulemap b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Modules/module.modulemap similarity index 75% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Modules/module.modulemap rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Modules/module.modulemap index 72796302db..8e773a57da 100644 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/Modules/module.modulemap +++ b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Modules/module.modulemap @@ -11,14 +11,18 @@ framework module FBAudienceNetwork { 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" @@ -42,4 +46,12 @@ framework module FBAudienceNetwork { 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/PkgInfo b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/PkgInfo similarity index 100% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/SDK/FBAudienceNetwork.framework/PkgInfo rename to iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/PkgInfo diff --git a/iphone/Maps/Pods/FBAudienceNetwork/licenses b/iphone/Maps/Pods/FBAudienceNetwork/licenses new file mode 100644 index 0000000000..6c63b3527b --- /dev/null +++ b/iphone/Maps/Pods/FBAudienceNetwork/licenses @@ -0,0 +1,12 @@ +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 index 4216bfd97c..e191a7f5d1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h @@ -22,7 +22,13 @@ #import #endif +#ifdef BUCK #import +#else +#import "FBSDKGraphRequestConnection.h" +#endif + +NS_ASSUME_NONNULL_BEGIN @class FBSDKAccessToken; @class FBSDKGraphRequest; @@ -30,17 +36,20 @@ #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; +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; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsLoggingResultNotification +NS_SWIFT_NAME(AppEventsLoggingResultNotification); #endif /** optional plist key ("FacebookLoggingOverrideAppID") for setting `loggingOverrideAppID` */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventsOverrideAppIDBundleKey; +FOUNDATION_EXPORT NSString *const FBSDKAppEventsOverrideAppIDBundleKey +NS_SWIFT_NAME(AppEventsOverrideAppIDBundleKey); /** @@ -59,8 +68,7 @@ typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushBehavior) 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) @@ -88,7 +96,7 @@ typedef NS_ENUM(NSUInteger, FBSDKProductAvailability) * Discontinued */ FBSDKProductAvailabilityDiscontinued, -}; +} NS_SWIFT_NAME(AppEvents.ProductAvailability); /** NS_ENUM(NSUInteger, FBSDKProductCondition) @@ -99,208 +107,266 @@ 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 NSString *const FBSDKAppEventNameAchievedLevel; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAchievedLevel; /** Log this event when the user has entered their payment info. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAddedPaymentInfo; +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 NSString *const FBSDKAppEventNameAddedToCart; +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 NSString *const FBSDKAppEventNameAddedToWishlist; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAddedToWishlist; /** Log this event when a user has completed registration with the app. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameCompletedRegistration; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameCompletedRegistration; /** Log this event when the user has completed a tutorial in the app. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameCompletedTutorial; +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 NSString *const FBSDKAppEventNameInitiatedCheckout; +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 NSString *const FBSDKAppEventNameRated; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameRated; /** Log this event when a user has performed a search within the app. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSearched; +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 NSString *const FBSDKAppEventNameSpentCredits; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSpentCredits; /** Log this event when the user has unlocked an achievement in the app. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameUnlockedAchievement; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameUnlockedAchievement; /** Log this event when a user has viewed a form of content in the app. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameViewedContent; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameViewedContent; /** A telephone/SMS, email, chat or other type of contact between a customer and your business. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameContact; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameContact; /** The customization of products through a configuration tool or other application your business owns. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameCustomizeProduct; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameCustomizeProduct; /** The donation of funds to your organization or cause. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameDonate; +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 NSString *const FBSDKAppEventNameFindLocation; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameFindLocation; /** The booking of an appointment to visit one of your locations. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSchedule; +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 NSString *const FBSDKAppEventNameStartTrial; +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 NSString *const FBSDKAppEventNameSubmitApplication; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSubmitApplication; /** The start of a paid subscription for a product or service you offer. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameSubscribe; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSubscribe; /** Log this event when the user views an ad. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAdImpression; +FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAdImpression; /** Log this event when the user clicks an ad. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameAdClick; +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 NSString *const FBSDKAppEventParameterNameContent; +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 NSString *const FBSDKAppEventParameterNameContentID; +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 NSString *const FBSDKAppEventParameterNameContentType; +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 NSString *const FBSDKAppEventParameterNameCurrency; +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 NSString *const FBSDKAppEventParameterNameDescription; +FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameDescription; /** Parameter key used to specify the level achieved in a `FBAppEventNameAchieved` event. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameLevel; +FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameLevel; /** Parameter key used to specify the maximum rating available for the `FBAppEventNameRate` event. E.g., "5" or "10". */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameMaxRatingValue; +FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameMaxRatingValue; /** Parameter key used to specify how many items are being processed for an `FBAppEventNameInitiatedCheckout` or `FBAppEventNamePurchased` event. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameNumItems; +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 NSString *const FBSDKAppEventParameterNamePaymentInfoAvailable; +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 NSString *const FBSDKAppEventParameterNameRegistrationMethod; +FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameRegistrationMethod; /** Parameter key used to specify the string provided by the user for a search operation. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameSearchString; +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 NSString *const FBSDKAppEventParameterNameSuccess; +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 NSString *const FBSDKAppEventParameterProductCustomLabel0; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel0; /** Parameter key used to specify the product item's custom label 1. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel1; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel1; /** Parameter key used to specify the product item's custom label 2. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel2; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel2; /** Parameter key used to specify the product item's custom label 3. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel3; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel3; /** Parameter key used to specify the product item's custom label 4. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductCustomLabel4; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel4; /** Parameter key used to specify the product item's AppLink app URL for iOS. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIOSUrl; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSUrl; /** Parameter key used to specify the product item's AppLink app ID for iOS App Store. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIOSAppStoreID; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSAppStoreID; /** Parameter key used to specify the product item's AppLink app name for iOS. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIOSAppName; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSAppName; /** Parameter key used to specify the product item's AppLink app URL for iPhone. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPhoneUrl; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneUrl; /** Parameter key used to specify the product item's AppLink app ID for iPhone App Store. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID; /** Parameter key used to specify the product item's AppLink app name for iPhone. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppName; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneAppName; /** Parameter key used to specify the product item's AppLink app URL for iPad. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPadUrl; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadUrl; /** Parameter key used to specify the product item's AppLink app ID for iPad App Store. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPadAppStoreID; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadAppStoreID; /** Parameter key used to specify the product item's AppLink app name for iPad. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkIPadAppName; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadAppName; /** Parameter key used to specify the product item's AppLink app URL for Android. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkAndroidUrl; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidUrl; /** Parameter key used to specify the product item's AppLink fully-qualified package name for intent generation. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkAndroidPackage; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidPackage; /** Parameter key used to specify the product item's AppLink app name for Android. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkAndroidAppName; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidAppName; /** Parameter key used to specify the product item's AppLink app URL for Windows Phone. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl; /** Parameter key used to specify the product item's AppLink app ID, as a GUID, for App Store. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID; +FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID; /** Parameter key used to specify the product item's AppLink app name for Windows Phone. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppName; +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 NSString *const FBSDKAppEventParameterValueYes; +FOUNDATION_EXPORT FBSDKAppEventParameterValue FBSDKAppEventParameterValueYes; /** No-valued parameter value to be used with parameter keys that need a Yes/No value */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterValueNo; +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 NSString *const FBSDKAppEventParameterNameAdType; +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 NSString *const FBSDKAppEventParameterNameOrderID; +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; /** @@ -351,8 +417,45 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; + 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 */ @@ -365,7 +468,7 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; are given in the `FBSDKAppEvents` documentation. */ -+ (void)logEvent:(NSString *)eventName; ++ (void)logEvent:(FBSDKAppEventName)eventName; /** @@ -377,7 +480,7 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; @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:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName valueToSum:(double)valueToSum; @@ -394,8 +497,8 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names are provided in `FBSDKAppEventParameterName*` constants. */ -+ (void)logEvent:(NSString *)eventName - parameters:(NSDictionary *)parameters; ++ (void)logEvent:(FBSDKAppEventName)eventName + parameters:(NSDictionary *)parameters; /** @@ -414,9 +517,9 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; are provided in `FBSDKAppEventParameterName*` constants. */ -+ (void)logEvent:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters; + parameters:(NSDictionary *)parameters; /** @@ -439,10 +542,10 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; @param accessToken The optional access token to log the event as. */ -+ (void)logEvent:(NSString *)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken; ++ (void)logEvent:(FBSDKAppEventName)eventName + valueToSum:(nullable NSNumber *)valueToSum + parameters:(NSDictionary *)parameters + accessToken:(nullable FBSDKAccessToken *)accessToken; /* * Purchase logging @@ -489,7 +592,7 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; */ + (void)logPurchase:(double)purchaseAmount currency:(NSString *)currency - parameters:(NSDictionary *)parameters; + parameters:(NSDictionary *)parameters; /** @@ -516,8 +619,8 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; */ + (void)logPurchase:(double)purchaseAmount currency:(NSString *)currency - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken; + parameters:(NSDictionary *)parameters + accessToken:(nullable FBSDKAccessToken *)accessToken; /* @@ -574,10 +677,10 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; title:(NSString *)title priceAmount:(double)priceAmount currency:(NSString *)currency - gtin:(NSString *)gtin - mpn:(NSString *)mpn - brand:(NSString *)brand - parameters:(NSDictionary *)parameters; + gtin:(nullable NSString *)gtin + mpn:(nullable NSString *)mpn + brand:(nullable NSString *)brand + parameters:(nullable NSDictionary *)parameters; /** @@ -624,52 +727,8 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; @param deviceTokenString Device token string. */ -+ (void)setPushNotificationsDeviceTokenString:(NSString *)deviceTokenString; - -/* - * Control over event batching/flushing - */ - -/** - - Get the current event flushing behavior specifying when events are sent back to Facebook servers. - */ -+ (FBSDKAppEventsFlushBehavior)flushBehavior; - -/** - - Set the current event flushing behavior specifying when events are sent back to Facebook servers. - - @param flushBehavior The desired `FBSDKAppEventsFlushBehavior` to be used. - */ -+ (void)setFlushBehavior:(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. - - @param appID The Facebook App ID to be used for App Event logging. - */ -+ (void)setLoggingOverrideAppID:(NSString *)appID; - -/** - Get the 'override' App ID for App Event logging. - - -@see setLoggingOverrideAppID: - - */ -+ (NSString *)loggingOverrideAppID; - ++ (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 @@ -682,11 +741,6 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; 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. - @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. - - - 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 @@ -699,49 +753,17 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; 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. - */ -+ (FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(FBSDKAccessToken *)accessToken; -/* - Sets a custom user ID to associate with all app events. - - The userID is persisted until it is cleared by passing nil. + @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. */ -+ (void)setUserID:(NSString *)userID; ++ (nullable FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(nullable FBSDKAccessToken *)accessToken; /* Clears the custom user ID to associate with all app events. */ + (void)clearUserID; -/* - Returns the set custom user ID. - */ -+ (NSString *)userID; - -/* - 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 userData user data to identify the user. User data should be formated as - a NSDictionary of data type name and value. - Supported data types and names are: - Email: em - First Name: fn - Last Name: ln - Phone: ph - Date of Birth: db - Gender: ge - City: ct - State: st - Zip: zp - Country: country - */ -+ (void)setUserData:(NSDictionary *)userData - DEPRECATED_MSG_ATTRIBUTE("Renamed `setUserEmail:firstName: ...`"); - /* 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. @@ -759,26 +781,45 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; @param zip user's zip @param country user's country */ -+ (void)setUserEmail:(NSString *)email - firstName:(NSString *)firstName - lastName:(NSString *)lastName - phone:(NSString *)phone - dateOfBirth:(NSString *)dateOfBirth - gender:(NSString *)gender - city:(NSString *)city - state:(NSString *)state - zip:(NSString *)zip - country:(NSString *)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 */ -+ (NSString *)getUserData; ++ (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:` @@ -786,7 +827,7 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; @param properties the custom user properties @param handler the optional completion handler */ -+ (void)updateUserProperties:(NSDictionary *)properties handler:(FBSDKGraphRequestHandler)handler; ++ (void)updateUserProperties:(NSDictionary *)properties handler:(nullable FBSDKGraphRequestBlock)handler; #if !TARGET_OS_TV /* @@ -820,3 +861,5 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterNameOrderID; + (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 index 416cd82bc9..d3d4e73fc7 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m @@ -18,7 +18,7 @@ #import "FBSDKAppEvents.h" #import "FBSDKAppEvents+Internal.h" - +#import "FBSDKApplicationDelegate+Internal.h" #import #import @@ -30,9 +30,12 @@ #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" @@ -42,8 +45,12 @@ #import "FBSDKUserDataStore.h" #if !TARGET_OS_TV + +#import "FBSDKAddressFilterManager.h" #import "FBSDKEventBindingManager.h" #import "FBSDKHybridAppEventsScriptMessageHandler.h" +#import "FBSDKModelManager.h" + #endif // @@ -51,162 +58,178 @@ // // General purpose -NSString *const FBSDKAppEventNameCompletedRegistration = @"fb_mobile_complete_registration"; -NSString *const FBSDKAppEventNameViewedContent = @"fb_mobile_content_view"; -NSString *const FBSDKAppEventNameSearched = @"fb_mobile_search"; -NSString *const FBSDKAppEventNameRated = @"fb_mobile_rate"; -NSString *const FBSDKAppEventNameCompletedTutorial = @"fb_mobile_tutorial_completion"; -NSString *const FBSDKAppEventNameContact = @"Contact"; -NSString *const FBSDKAppEventNameCustomizeProduct = @"CustomizeProduct"; -NSString *const FBSDKAppEventNameDonate = @"Donate"; -NSString *const FBSDKAppEventNameFindLocation = @"FindLocation"; -NSString *const FBSDKAppEventNameSchedule = @"Schedule"; -NSString *const FBSDKAppEventNameStartTrial = @"StartTrial"; -NSString *const FBSDKAppEventNameSubmitApplication = @"SubmitApplication"; -NSString *const FBSDKAppEventNameSubscribe = @"Subscribe"; -NSString *const FBSDKAppEventNameAdImpression = @"AdImpression"; -NSString *const FBSDKAppEventNameAdClick = @"AdClick"; +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 -NSString *const FBSDKAppEventNameAddedToCart = @"fb_mobile_add_to_cart"; -NSString *const FBSDKAppEventNameAddedToWishlist = @"fb_mobile_add_to_wishlist"; -NSString *const FBSDKAppEventNameInitiatedCheckout = @"fb_mobile_initiated_checkout"; -NSString *const FBSDKAppEventNameAddedPaymentInfo = @"fb_mobile_add_payment_info"; -NSString *const FBSDKAppEventNameProductCatalogUpdate = @"fb_mobile_catalog_update"; +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 -NSString *const FBSDKAppEventNameAchievedLevel = @"fb_mobile_level_achieved"; -NSString *const FBSDKAppEventNameUnlockedAchievement = @"fb_mobile_achievement_unlocked"; -NSString *const FBSDKAppEventNameSpentCredits = @"fb_mobile_spent_credits"; +FBSDKAppEventName FBSDKAppEventNameAchievedLevel = @"fb_mobile_level_achieved"; +FBSDKAppEventName FBSDKAppEventNameUnlockedAchievement = @"fb_mobile_achievement_unlocked"; +FBSDKAppEventName FBSDKAppEventNameSpentCredits = @"fb_mobile_spent_credits"; // // Public event parameter names // -NSString *const FBSDKAppEventParameterNameCurrency = @"fb_currency"; -NSString *const FBSDKAppEventParameterNameRegistrationMethod = @"fb_registration_method"; -NSString *const FBSDKAppEventParameterNameContentType = @"fb_content_type"; -NSString *const FBSDKAppEventParameterNameContent = @"fb_content"; -NSString *const FBSDKAppEventParameterNameContentID = @"fb_content_id"; -NSString *const FBSDKAppEventParameterNameSearchString = @"fb_search_string"; -NSString *const FBSDKAppEventParameterNameSuccess = @"fb_success"; -NSString *const FBSDKAppEventParameterNameMaxRatingValue = @"fb_max_rating_value"; -NSString *const FBSDKAppEventParameterNamePaymentInfoAvailable = @"fb_payment_info_available"; -NSString *const FBSDKAppEventParameterNameNumItems = @"fb_num_items"; -NSString *const FBSDKAppEventParameterNameLevel = @"fb_level"; -NSString *const FBSDKAppEventParameterNameDescription = @"fb_description"; -NSString *const FBSDKAppEventParameterLaunchSource = @"fb_mobile_launch_source"; -NSString *const FBSDKAppEventParameterNameAdType = @"ad_type"; -NSString *const FBSDKAppEventParameterNameOrderID = @"fb_order_id"; +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 // -NSString *const FBSDKAppEventParameterProductCustomLabel0 = @"fb_product_custom_label_0"; -NSString *const FBSDKAppEventParameterProductCustomLabel1 = @"fb_product_custom_label_1"; -NSString *const FBSDKAppEventParameterProductCustomLabel2 = @"fb_product_custom_label_2"; -NSString *const FBSDKAppEventParameterProductCustomLabel3 = @"fb_product_custom_label_3"; -NSString *const FBSDKAppEventParameterProductCustomLabel4 = @"fb_product_custom_label_4"; -NSString *const FBSDKAppEventParameterProductAppLinkIOSUrl = @"fb_product_applink_ios_url"; -NSString *const FBSDKAppEventParameterProductAppLinkIOSAppStoreID = @"fb_product_applink_ios_app_store_id"; -NSString *const FBSDKAppEventParameterProductAppLinkIOSAppName = @"fb_product_applink_ios_app_name"; -NSString *const FBSDKAppEventParameterProductAppLinkIPhoneUrl = @"fb_product_applink_iphone_url"; -NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID = @"fb_product_applink_iphone_app_store_id"; -NSString *const FBSDKAppEventParameterProductAppLinkIPhoneAppName = @"fb_product_applink_iphone_app_name"; -NSString *const FBSDKAppEventParameterProductAppLinkIPadUrl = @"fb_product_applink_ipad_url"; -NSString *const FBSDKAppEventParameterProductAppLinkIPadAppStoreID = @"fb_product_applink_ipad_app_store_id"; -NSString *const FBSDKAppEventParameterProductAppLinkIPadAppName = @"fb_product_applink_ipad_app_name"; -NSString *const FBSDKAppEventParameterProductAppLinkAndroidUrl = @"fb_product_applink_android_url"; -NSString *const FBSDKAppEventParameterProductAppLinkAndroidPackage = @"fb_product_applink_android_package"; -NSString *const FBSDKAppEventParameterProductAppLinkAndroidAppName = @"fb_product_applink_android_app_name"; -NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl = @"fb_product_applink_windows_phone_url"; -NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID = @"fb_product_applink_windows_phone_app_id"; -NSString *const FBSDKAppEventParameterProductAppLinkWindowsPhoneAppName = @"fb_product_applink_windows_phone_app_name"; +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 // -NSString *const FBSDKAppEventParameterValueNo = @"0"; -NSString *const FBSDKAppEventParameterValueYes = @"1"; +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 // -NSString *const FBSDKAppEventNamePurchased = @"fb_mobile_purchase"; +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"; -NSString *const FBSDKAppEventNameLoginViewUsage = @"fb_login_view_usage"; -NSString *const FBSDKAppEventNameShareSheetLaunch = @"fb_share_sheet_launch"; -NSString *const FBSDKAppEventNameShareSheetDismiss = @"fb_share_sheet_dismiss"; -NSString *const FBSDKAppEventNameShareTrayDidLaunch = @"fb_share_tray_did_launch"; -NSString *const FBSDKAppEventNameShareTrayDidSelectActivity = @"fb_share_tray_did_select_activity"; -NSString *const FBSDKAppEventNamePermissionsUILaunch = @"fb_permissions_ui_launch"; -NSString *const FBSDKAppEventNamePermissionsUIDismiss = @"fb_permissions_ui_dismiss"; -NSString *const FBSDKAppEventNameFBDialogsPresentShareDialog = @"fb_dialogs_present_share"; -NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogPhoto = @"fb_dialogs_present_share_photo"; -NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogOG = @"fb_dialogs_present_share_og"; -NSString *const FBSDKAppEventNameFBDialogsPresentLikeDialogOG = @"fb_dialogs_present_like_og"; -NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialog = @"fb_dialogs_present_message"; -NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogPhoto = @"fb_dialogs_present_message_photo"; -NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogOG = @"fb_dialogs_present_message_og"; - -NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogStart = @"fb_dialogs_native_login_dialog_start"; +FBSDKAppEventName FBSDKAppEventNameFBDialogsNativeLoginDialogStart = @"fb_dialogs_native_login_dialog_start"; NSString *const FBSDKAppEventsNativeLoginDialogStartTime = @"fb_native_login_dialog_start_time"; -NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogEnd = @"fb_dialogs_native_login_dialog_end"; +FBSDKAppEventName FBSDKAppEventNameFBDialogsNativeLoginDialogEnd = @"fb_dialogs_native_login_dialog_end"; NSString *const FBSDKAppEventsNativeLoginDialogEndTime = @"fb_native_login_dialog_end_time"; -NSString *const FBSDKAppEventNameFBDialogsWebLoginCompleted = @"fb_dialogs_web_login_dialog_complete"; +FBSDKAppEventName FBSDKAppEventNameFBDialogsWebLoginCompleted = @"fb_dialogs_web_login_dialog_complete"; NSString *const FBSDKAppEventsWebLoginE2E = @"fb_web_login_e2e"; -NSString *const FBSDKAppEventNameFBSessionAuthStart = @"fb_mobile_login_start"; -NSString *const FBSDKAppEventNameFBSessionAuthEnd = @"fb_mobile_login_complete"; -NSString *const FBSDKAppEventNameFBSessionAuthMethodStart = @"fb_mobile_login_method_start"; -NSString *const FBSDKAppEventNameFBSessionAuthMethodEnd = @"fb_mobile_login_method_complete"; +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"; -NSString *const FBSDKAppEventNameFBSDKLikeButtonImpression = @"fb_like_button_impression"; -NSString *const FBSDKAppEventNameFBSDKLoginButtonImpression = @"fb_login_button_impression"; -NSString *const FBSDKAppEventNameFBSDKSendButtonImpression = @"fb_send_button_impression"; -NSString *const FBSDKAppEventNameFBSDKShareButtonImpression = @"fb_share_button_impression"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonImpression = @"fb_live_streaming_button_impression"; +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"; -NSString *const FBSDKAppEventNameFBSDKSmartLoginService = @"fb_smart_login_service"; +FBSDKAppEventName FBSDKAppEventNameFBSDKSmartLoginService = @"fb_smart_login_service"; -NSString *const FBSDKAppEventNameFBSDKLikeButtonDidTap = @"fb_like_button_did_tap"; -NSString *const FBSDKAppEventNameFBSDKLoginButtonDidTap = @"fb_login_button_did_tap"; -NSString *const FBSDKAppEventNameFBSDKSendButtonDidTap = @"fb_send_button_did_tap"; -NSString *const FBSDKAppEventNameFBSDKShareButtonDidTap = @"fb_share_button_did_tap"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonDidTap = @"fb_live_streaming_button_did_tap"; +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"; -NSString *const FBSDKAppEventNameFBSDKLikeControlDidDisable = @"fb_like_control_did_disable"; -NSString *const FBSDKAppEventNameFBSDKLikeControlDidLike = @"fb_like_control_did_like"; -NSString *const FBSDKAppEventNameFBSDKLikeControlDidPresentDialog = @"fb_like_control_did_present_dialog"; -NSString *const FBSDKAppEventNameFBSDKLikeControlDidTap = @"fb_like_control_did_tap"; -NSString *const FBSDKAppEventNameFBSDKLikeControlDidUnlike = @"fb_like_control_did_unlike"; -NSString *const FBSDKAppEventNameFBSDKLikeControlError = @"fb_like_control_error"; -NSString *const FBSDKAppEventNameFBSDKLikeControlImpression = @"fb_like_control_impression"; -NSString *const FBSDKAppEventNameFBSDKLikeControlNetworkUnavailable = @"fb_like_control_network_unavailable"; +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"; -NSString *const FBSDLAppEventNameFBSDKEventShareDialogResult = @"fb_dialog_share_result"; -NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogResult = @"fb_messenger_dialog_share_result"; -NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult = @"fb_app_invite_dialog_share_result"; +FBSDKAppEventName FBSDKAppEventNameFBSDKEventShareDialogResult = @"fb_dialog_share_result"; +FBSDKAppEventName FBSDKAppEventNameFBSDKEventMessengerShareDialogResult = @"fb_messenger_dialog_share_result"; +FBSDKAppEventName FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult = @"fb_app_invite_dialog_share_result"; -NSString *const FBSDKAppEventNameFBSDKEventShareDialogShow = @"fb_dialog_share_show"; -NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogShow = @"fb_messenger_dialog_share_show"; -NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogShow = @"fb_app_invite_share_show"; +FBSDKAppEventName FBSDKAppEventNameFBSDKEventShareDialogShow = @"fb_dialog_share_show"; +FBSDKAppEventName FBSDKAppEventNameFBSDKEventMessengerShareDialogShow = @"fb_messenger_dialog_share_show"; +FBSDKAppEventName FBSDKAppEventNameFBSDKEventAppInviteShareDialogShow = @"fb_app_invite_share_show"; -NSString *const FBSDKAppEventNameFBSessionFASLoginDialogResult = @"fb_mobile_login_fas_dialog_result"; +FBSDKAppEventName FBSDKAppEventNameFBSessionFASLoginDialogResult = @"fb_mobile_login_fas_dialog_result"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingStart = @"fb_sdk_live_streaming_start"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingStop = @"fb_sdk_live_streaming_stop"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingPause = @"fb_sdk_live_streaming_pause"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingResume = @"fb_sdk_live_streaming_resume"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingError = @"fb_sdk_live_streaming_error"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingUpdateStatus = @"fb_sdk_live_streaming_update_status"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingVideoID = @"fb_sdk_live_streaming_video_id"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingMic = @"fb_sdk_live_streaming_mic"; -NSString *const FBSDKAppEventNameFBSDKLiveStreamingCamera = @"fb_sdk_live_streaming_camera"; +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"; @@ -220,6 +243,7 @@ NSString *const FBSDKAppEventParameterShareTrayResult = @"fb_share_t 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"; @@ -228,18 +252,18 @@ NSString *const FBSDKAppEventParameterLiveStreamingVideoID = @"live_stream NSString *const FBSDKAppEventParameterLiveStreamingMicEnabled = @"live_streaming_mic_enabled"; NSString *const FBSDKAppEventParameterLiveStreamingCameraEnabled = @"live_streaming_camera_enabled"; -NSString *const FBSDKAppEventParameterProductItemID = @"fb_product_item_id"; -NSString *const FBSDKAppEventParameterProductAvailability = @"fb_product_availability"; -NSString *const FBSDKAppEventParameterProductCondition = @"fb_product_condition"; -NSString *const FBSDKAppEventParameterProductDescription = @"fb_product_description"; -NSString *const FBSDKAppEventParameterProductImageLink = @"fb_product_image_link"; -NSString *const FBSDKAppEventParameterProductLink = @"fb_product_link"; -NSString *const FBSDKAppEventParameterProductTitle = @"fb_product_title"; -NSString *const FBSDKAppEventParameterProductGTIN = @"fb_product_gtin"; -NSString *const FBSDKAppEventParameterProductMPN = @"fb_product_mpn"; -NSString *const FBSDKAppEventParameterProductBrand = @"fb_product_brand"; -NSString *const FBSDKAppEventParameterProductPriceAmount = @"fb_product_price_amount"; -NSString *const FBSDKAppEventParameterProductPriceCurrency = @"fb_product_price_currency"; +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"; @@ -265,6 +289,8 @@ NSString *const FBSDKAppEventsDialogShareContentTypeMessengerMediaTemplate 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"; @@ -283,8 +309,8 @@ NSString *const FBSDKAppEventsOverrideAppIDBundleKey = @"FacebookLoggingOverride // Activities Endpoint Parameter static NSString *const FBSDKActivitesParameterPushDeviceToken = @"device_token"; // Event Names -static NSString *const FBSDKAppEventNamePushTokenObtained = @"fb_mobile_obtain_push_token"; -static NSString *const FBSDKAppEventNamePushOpened = @"fb_mobile_push_opened"; +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"; @@ -301,7 +327,6 @@ 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" @@ -309,11 +334,6 @@ NSString *const FBSDKAPPEventsWKWebViewMessagesProtocolKey = @"fbmq-0.1"; #define FBUnityUtilityClassName "FBUnityUtility" #define FBUnityUtilityUpdateBindingsSelector @"triggerUpdateBindings:" -#define UNINSTALL_TRACKING_DEVICE_ID_KEY @"device_id" -#define UNINSTALL_TRACKING_PLATFORM_KEY @"platform" -#define UNINSTALL_TRACKING_DEVICE_TOKEN_KEY @"device_token" -#define UNINSTALL_TRACKING_TOKEN_ENDPOINT @"app_push_device_token" - static NSString *g_overrideAppID = nil; @interface FBSDKAppEvents () @@ -326,6 +346,8 @@ static NSString *g_overrideAppID = nil; @property (nonatomic, strong) dispatch_source_t flushTimer; +@property (nonatomic, copy) NSString *userID; + @end @implementation FBSDKAppEvents @@ -336,7 +358,6 @@ static NSString *g_overrideAppID = nil; #if !TARGET_OS_TV FBSDKEventBindingManager *_eventBindingManager; #endif - NSString *_userID; BOOL _isUnityInit; } @@ -346,20 +367,21 @@ static NSString *g_overrideAppID = nil; { if (self == [FBSDKAppEvents class]) { g_overrideAppID = [[[NSBundle mainBundle] objectForInfoDictionaryKey:FBSDKAppEventsOverrideAppIDBundleKey] copy]; + [FBSDKBasicUtility anonymousID]; } } -- (FBSDKAppEvents *)init +- (instancetype)init { self = [super init]; if (self) { _flushBehavior = FBSDKAppEventsFlushBehaviorAuto; - typeof(self) __weak weakSelf = self; + __weak FBSDKAppEvents *weakSelf = self; self.flushTimer = [FBSDKUtility startGCDTimerWithInterval:FLUSH_PERIOD_IN_SECONDS block:^{ - [weakSelf flushTimerFired:nil]; - }]; + [weakSelf flushTimerFired:nil]; + }]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; _userID = [defaults stringForKey:USER_ID_USER_DEFAULTS_KEY]; @@ -397,21 +419,21 @@ static NSString *g_overrideAppID = nil; #pragma mark - Public Methods -+ (void)logEvent:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName { [FBSDKAppEvents logEvent:eventName - parameters:nil]; + parameters:@{}]; } -+ (void)logEvent:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName valueToSum:(double)valueToSum { [FBSDKAppEvents logEvent:eventName valueToSum:valueToSum - parameters:nil]; + parameters:@{}]; } -+ (void)logEvent:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName parameters:(NSDictionary *)parameters { [FBSDKAppEvents logEvent:eventName @@ -420,7 +442,7 @@ static NSString *g_overrideAppID = nil; accessToken:nil]; } -+ (void)logEvent:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName valueToSum:(double)valueToSum parameters:(NSDictionary *)parameters { @@ -430,7 +452,7 @@ static NSString *g_overrideAppID = nil; accessToken:nil]; } -+ (void)logEvent:(NSString *)eventName ++ (void)logEvent:(FBSDKAppEventName)eventName valueToSum:(NSNumber *)valueToSum parameters:(NSDictionary *)parameters accessToken:(FBSDKAccessToken *)accessToken @@ -447,7 +469,7 @@ static NSString *g_overrideAppID = nil; { [FBSDKAppEvents logPurchase:purchaseAmount currency:currency - parameters:nil]; + parameters:@{}]; } + (void)logPurchase:(double)purchaseAmount @@ -494,7 +516,7 @@ static NSString *g_overrideAppID = nil; + (void)logPushNotificationOpen:(NSDictionary *)payload { - [self logPushNotificationOpen:payload action:nil]; + [self logPushNotificationOpen:payload action:@""]; } + (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action @@ -511,7 +533,7 @@ static NSString *g_overrideAppID = nil; } NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObject:campaign forKey:FBSDKAppEventParameterPushCampaign]; - if (action) { + if (action && action.length > 0) { parameters[FBSDKAppEventParameterPushAction] = action; } [self logEvent:FBSDKAppEventNamePushOpened parameters:parameters]; @@ -532,7 +554,8 @@ static NSString *g_overrideAppID = nil; gtin:(NSString *)gtin mpn:(NSString *)mpn brand:(NSString *)brand - parameters:(NSDictionary *)parameters { + parameters:(NSDictionary *)parameters +{ if (itemID == nil) { [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"itemID cannot be null"]; @@ -634,7 +657,6 @@ static NSString *g_overrideAppID = nil; // when appropriate, result in logging an "activated app" and "deactivated app" (for the // previous session) App Event. [FBSDKTimeSpentData restore:YES]; - [FBSDKUserDataStore initStore]; } + (void)setPushNotificationsDeviceToken:(NSData *)deviceToken @@ -694,10 +716,10 @@ static NSString *g_overrideAppID = nil; + (void)setUserID:(NSString *)userID { - if ([[[self class] singleton]->_userID isEqualToString:userID]) { + if ([[[self class] singleton].userID isEqualToString:userID]) { return; } - [[self class] singleton]->_userID = userID; + [[self class] singleton].userID = userID; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:userID forKey:USER_ID_USER_DEFAULTS_KEY]; [defaults synchronize]; @@ -710,78 +732,85 @@ static NSString *g_overrideAppID = nil; + (NSString *)userID { - return [[self class] singleton]->_userID; + return [[self class] singleton].userID; } -+ (void)setUserData:(NSDictionary*)userData ++ (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 setUserDataAndHash:userData]; -} - -+ (void)setUserEmail:(NSString *)email - firstName:(NSString *)firstName - lastName:(NSString *)lastName - phone:(NSString *)phone - dateOfBirth:(NSString *)dateOfBirth - gender:(NSString *)gender - city:(NSString *)city - state:(NSString *)state - zip:(NSString *)zip - country:(NSString *)country -{ - [FBSDKUserDataStore setUserDataAndHash:email - firstName:firstName - lastName:lastName - phone:phone - dateOfBirth:dateOfBirth - gender:gender - city:city - state:state - zip:zip - country: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 getHashedUserData]; + return [FBSDKUserDataStore getHashedData]; } + (void)clearUserData { - [FBSDKUserDataStore setUserDataAndHash:nil - firstName:nil - lastName:nil - phone:nil - dateOfBirth:nil - gender:nil - city:nil - state:nil - zip:nil - country:nil]; + [FBSDKUserDataStore setAndHashUserEmail:nil + firstName:nil + lastName:nil + phone:nil + dateOfBirth:nil + gender:nil + city:nil + state:nil + zip:nil + country:nil]; } -+ (void)updateUserProperties:(NSDictionary *)properties handler:(FBSDKGraphRequestHandler)handler ++ (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 = [NSError fbRequiredArgumentErrorWithName:@"userID" message:@"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]; - dataDictionary[@"user_unique_id"] = [FBSDKAppEvents userID]; - [FBSDKInternalUtility dictionary:dataDictionary setObject:[FBSDKAppEventsUtility advertiserID] forKey:@"advertiser_id"]; - [FBSDKInternalUtility dictionary:dataDictionary setObject:properties forKey:@"custom_data"]; + [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 = [FBSDKInternalUtility JSONStringForObject:@[dataDictionary] error:&error invalidObjectHandler:^id(id object, BOOL *stop) { + NSString *dataJSONString = [FBSDKBasicUtility JSONStringForObject:@[dataDictionary] error:&error invalidObjectHandler:^id(id object, BOOL *stop) { *stop = YES; - invalidObjectError = [NSError fbUnknownErrorWithMessage:@"The values in the properties dictionary must be NSStrings or NSNumbers"]; + invalidObjectError = [FBSDKError unknownErrorWithMessage:@"The values in the properties dictionary must be NSStrings or NSNumbers"]; return nil; }]; if (!error) { @@ -798,10 +827,10 @@ static NSString *g_overrideAppID = nil; FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/user_properties", [[self singleton] appID]] parameters:params tokenString:[FBSDKAccessToken currentAccessToken].tokenString - HTTPMethod:@"POST" + HTTPMethod:FBSDKHTTPMethodPOST flags:FBSDKGraphRequestFlagDisableErrorRecovery | - FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | - FBSDKGraphRequestFlagSkipClientToken + FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | + FBSDKGraphRequestFlagSkipClientToken ]; [request startWithCompletionHandler:handler]; } @@ -818,12 +847,12 @@ static NSString *g_overrideAppID = nil; [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 + [[self singleton] appID], + FBSDKAppEventsWKWebViewMessagesPixelIDKey, + FBSDKAppEventsWKWebViewMessagesEventKey, + FBSDKAppEventsWKWebViewMessagesParamsKey, + FBSDKAppEventsWKWebViewMessagesHandlerKey, + FBSDKAPPEventsWKWebViewMessagesProtocolKey ]; [controller addUserScript:[[WKUserScriptClass alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]]; @@ -864,6 +893,74 @@ static NSString *g_overrideAppID = nil; #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 @@ -876,14 +973,27 @@ static NSString *g_overrideAppID = nil; accessToken:accessToken]; } + +#ifdef DEBUG +static dispatch_once_t *onceTokenPointer; ++ (void)resetSingleton +{ + if (onceTokenPointer) { + *onceTokenPointer = 0; + } +} +#endif + + (FBSDKAppEvents *)singleton { - static dispatch_once_t pred; + static dispatch_once_t onceToken; +#ifdef DEBUG + onceTokenPointer = &onceToken; +#endif static FBSDKAppEvents *shared = nil; - - dispatch_once(&pred, ^{ - shared = [[FBSDKAppEvents alloc] init]; - }); + dispatch_once(&onceToken, ^{ + shared = [[self alloc] init]; + }); return shared; } @@ -929,10 +1039,10 @@ static NSString *g_overrideAppID = nil; shouldAccessAdvertisingID:self->_serverConfiguration.isAdvertisingIDEnabled]; NSString *path = [NSString stringWithFormat:@"%@/activities", appID]; FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:path - parameters:params - tokenString:nil - HTTPMethod:@"POST" - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + 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]; @@ -947,9 +1057,10 @@ static NSString *g_overrideAppID = nil; #if !TARGET_OS_TV - (void)enableCodelessEvents { if (_serverConfiguration.isCodelessEventsEnabled) { + [FBSDKCodelessIndexer enable]; + if (!_eventBindingManager) { _eventBindingManager = [[FBSDKEventBindingManager alloc] init]; - [_eventBindingManager start]; } if ([FBSDKInternalUtility isUnity]) { @@ -963,18 +1074,36 @@ static NSString *g_overrideAppID = nil; #endif // app events can use a server configuration up to 24 hours old to minimize network traffic. -- (void)fetchServerConfiguration:(void (^)(void))callback +- (void)fetchServerConfiguration:(FBSDKCodeBlock)callback { [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { self->_serverConfiguration = serverConfiguration; - if (self->_serverConfiguration.implicitPurchaseLoggingEnabled) { + if (self->_serverConfiguration.implicitPurchaseLoggingEnabled && [FBSDKSettings isAutoLogAppEventsEnabled]) { [FBSDKPaymentObserver startObservingTransactions]; } else { [FBSDKPaymentObserver stopObservingTransactions]; } #if !TARGET_OS_TV - [self enableCodelessEvents]; + [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(); @@ -982,12 +1111,21 @@ static NSString *g_overrideAppID = nil; }]; } -- (void)instanceLogEvent:(NSString *)eventName +- (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; } @@ -995,59 +1133,72 @@ static NSString *g_overrideAppID = nil; if (!isImplicitlyLogged && !_explicitEventsLoggedYet) { _explicitEventsLoggedYet = YES; } - - __block BOOL failed = NO; - - if (![FBSDKAppEventsUtility validateIdentifier:eventName]) { - failed = 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 (![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]; - NSMutableDictionary *eventDictionary = [NSMutableDictionary dictionaryWithDictionary:parameters]; +#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]); } - [FBSDKInternalUtility dictionary:eventDictionary setObject:valueToSum forKey:@"_valueToSum"]; + [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.presentedViewController; + 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]; @@ -1094,7 +1245,7 @@ static NSString *g_overrideAppID = nil; @synchronized(self) { if (_appEventsState) { matchingEventsPreviouslySaved = [[FBSDKAppEventsState alloc] initWithToken:_appEventsState.tokenString - appID:_appEventsState.appID]; + appID:_appEventsState.appID]; } } for (FBSDKAppEventsState *saved in existingEventsStates) { @@ -1135,7 +1286,7 @@ static NSString *g_overrideAppID = nil; [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; [self fetchServerConfiguration:^(void) { - NSString *receipt_data = [appEventsState extractReceiptData]; + NSString *receipt_data = appEventsState.extractReceiptData; NSString *encodedEvents = [appEventsState JSONStringForEvents:self->_serverConfiguration.implicitLoggingEnabled]; if (!encodedEvents) { [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents @@ -1179,10 +1330,10 @@ static NSString *g_overrideAppID = nil; } FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/activities", appEventsState.appID] - parameters:postParameters - tokenString:appEventsState.tokenString - HTTPMethod:@"POST" - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; + parameters:postParameters + tokenString:appEventsState.tokenString + HTTPMethod:FBSDKHTTPMethodPOST + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { [self handleActivitiesPostCompletion:error @@ -1297,7 +1448,7 @@ static NSString *g_overrideAppID = nil; // 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 limitEventAndDataUsage]) { + if ([FBSDKAppEventsUtility advertisingTrackingStatus] == FBSDKAdvertisingTrackingDisallowed || FBSDKSettings.shouldLimitEventAndDataUsage) { return nil; } @@ -1325,10 +1476,10 @@ static NSString *g_overrideAppID = nil; 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]; + parameters:parameters + tokenString:tokenString + HTTPMethod:nil + flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; return request; } 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 new file mode 100644 index 0000000000..3b97764e55 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..98d19f7165 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.m @@ -0,0 +1,329 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 index fcc4f42f5a..68d1d4ed13 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h @@ -16,12 +16,25 @@ // IN AN ACTION OF 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(^FBSDKCodelessSettingLoadBlock)(BOOL isCodelessSetupEnabled, NSError *error); +NS_ASSUME_NONNULL_BEGIN +typedef void(^FBSDKCodelessSettingLoadBlock)(BOOL isCodelessSetupEnabled, NSError *_Nullable error); + +NS_SWIFT_NAME(CodelessIndexer) @interface FBSDKCodelessIndexer : NSObject -+ (NSString *)extInfo; +@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 index 60ff531bb2..3e1f395eee 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -24,16 +28,16 @@ #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; @@ -42,8 +46,11 @@ static NSString *_deviceSessionID; static NSTimer *_appIndexingTimer; static NSString *_lastTreeHash; -+ (void)load ++ (void)enable { + if (_isGestureSet) { + return; + } #if TARGET_OS_SIMULATOR [self setupGesture]; #else @@ -138,6 +145,7 @@ static NSString *_lastTreeHash; + (void)setupGesture { + _isGestureSet = YES; [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES; Class class = [UIApplication class]; @@ -160,8 +168,8 @@ static NSString *_lastTreeHash; FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/%@", [FBSDKSettings appID], CODELESS_INDEXING_SESSION_ENDPOINT] - parameters: parameters - HTTPMethod:@"POST"]; + parameters:parameters + HTTPMethod:FBSDKHTTPMethodPOST]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { _isCheckingSession = NO; if ([result isKindOfClass:[NSDictionary class]]) { @@ -213,13 +221,13 @@ static NSString *_lastTreeHash; localeString = [NSString stringWithFormat:@"%@_%@", languageCode, countryCode]; } - NSString *extinfo = [FBSDKInternalUtility JSONStringForObject:@[machine, - advertiserID, - debugStatus, - isSimulator, - localeString] - error:NULL - invalidObjectHandler:NULL]; + NSString *extinfo = [FBSDKBasicUtility JSONStringForObject:@[machine, + advertiserID, + debugStatus, + isSimulator, + localeString] + error:NULL + invalidObjectHandler:NULL]; return extinfo ?: @""; } @@ -289,7 +297,7 @@ static NSString *_lastTreeHash; CODELESS_INDEXING_PLATFORM_KEY: @"iOS", CODELESS_INDEXING_SESSION_ID_KEY: [self currentSessionDeviceID] } - HTTPMethod:@"POST"]; + HTTPMethod:FBSDKHTTPMethodPOST]; _isCodelessIndexing = YES; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { _isCodelessIndexing = NO; @@ -357,7 +365,7 @@ static NSString *_lastTreeHash; } if (childrenTrees.count > 0) { - [result setValue:[childrenTrees copy] forKey:CODELESS_VIEW_TREE_CHILDREN_KEY]; + [result setValue:[childrenTrees copy] forKey:VIEW_HIERARCHY_CHILD_VIEWS_KEY]; } return [result copy]; @@ -402,3 +410,5 @@ static NSString *_lastTreeHash; } @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 index e2debc5ab5..e9c1f6ab7c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h @@ -16,8 +16,13 @@ // IN AN ACTION OF 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; @@ -28,3 +33,5 @@ - (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 index 769ff88f1a..c5dc127074 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m @@ -16,10 +16,14 @@ // IN AN ACTION OF 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 "FBSDKCodelessMacros.h" #import "FBSDKCodelessPathComponent.h" +#import "FBSDKViewHierarchyMacros.h" @implementation FBSDKCodelessParameterComponent @@ -42,3 +46,5 @@ } @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 index 15bed07659..6e62250b48 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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) @@ -27,6 +31,7 @@ typedef NS_OPTIONS(int, FBSDKCodelessMatchBitmaskField) FBSDKCodelessMatchBitmaskFieldHint = 1 << 4 }; +NS_SWIFT_NAME(CodelessPathComponent) @interface FBSDKCodelessPathComponent : NSObject @property (nonatomic, copy, readonly) NSString *className; @@ -42,3 +47,5 @@ typedef NS_OPTIONS(int, FBSDKCodelessMatchBitmaskField) - (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 index 1fc5108101..1fadc32c6b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m @@ -16,9 +16,13 @@ // IN AN ACTION OF 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 "FBSDKCodelessMacros.h" +#import "FBSDKViewHierarchyMacros.h" @implementation FBSDKCodelessPathComponent @@ -56,3 +60,5 @@ } @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 index 19e12f57a8..0214b6fd27 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h @@ -16,10 +16,13 @@ // IN AN ACTION OF 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(EventBinding) @interface FBSDKEventBinding : NSObject @property (nonatomic, copy, readonly) NSString *eventName; @@ -35,3 +38,5 @@ - (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 index 322b4ef2a2..bc0ca520b4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m @@ -16,16 +16,20 @@ // IN AN ACTION OF 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 - +#import "FBSDKAppEvents.h" #import "FBSDKAppEventsUtility.h" -#import "FBSDKCodelessMacros.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" @@ -175,7 +179,8 @@ pathComponent:(FBSDKCodelessPathComponent *)component if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldText) > 0) { NSString *text = viewPathComponent.text; BOOL match = ((text.length == 0 && pathComponent.text.length == 0) - || [text isEqualToString:pathComponent.text]); + || [text isEqualToString:pathComponent.text] + || [[FBSDKUtility SHA256Hash:text] isEqualToString:pathComponent.text]); if (!match) { return NO; } @@ -189,7 +194,8 @@ pathComponent:(FBSDKCodelessPathComponent *)component if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldHint) > 0) { NSString *hint = viewPathComponent.hint; BOOL match = ((hint.length == 0 && pathComponent.hint.length == 0) - || [hint isEqualToString:pathComponent.hint]); + || [hint isEqualToString:pathComponent.hint] + || [[FBSDKUtility SHA256Hash:hint] isEqualToString:pathComponent.hint]); if (!match) { return NO; } @@ -272,3 +278,5 @@ pathComponent:(FBSDKCodelessPathComponent *)component } @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 index 863094e271..23ee4dcc95 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h @@ -16,13 +16,19 @@ // IN AN ACTION OF 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)start; - (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 index 436d0f6814..06bf86d767 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m @@ -16,18 +16,22 @@ // IN AN ACTION OF 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 "FBSDKCodelessMacros.h" #import "FBSDKCodelessPathComponent.h" #import "FBSDKEventBinding.h" #import "FBSDKSwizzler.h" #import "FBSDKTypeUtility.h" #import "FBSDKViewHierarchy.h" +#import "FBSDKViewHierarchyMacros.h" #define ReactNativeTargetKey @"target" #define ReactNativeTouchEndEventName @"touchEnd" @@ -37,14 +41,6 @@ #define ReactNativeClassRCTTouchEvent "RCTTouchEvent" #define ReactNativeClassRCTTouchHandler "RCTTouchHandler" -static void fb_dispatch_on_main_thread(dispatch_block_t block) { - dispatch_async(dispatch_get_main_queue(), block); -} - -static void fb_dispatch_on_default_thread(dispatch_block_t block) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); -} - @interface FBSDKEventBindingManager () { BOOL isStarted; @@ -122,6 +118,11 @@ static void fb_dispatch_on_default_thread(dispatch_block_t block) { if (isStarted) { return; } + + if (0 == eventBindings.count) { + return; + } + isStarted = YES; void (^blockToWindow)(id view) = ^(id view) { @@ -382,9 +383,15 @@ static void fb_dispatch_on_default_thread(dispatch_block_t block) { - (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 new file mode 100644 index 0000000000..bb38bf4669 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..77c2e3b8e4 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.m @@ -0,0 +1,119 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 index 41ab684754..282a3f8f8f 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h @@ -16,7 +16,11 @@ // IN AN ACTION 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" @@ -24,8 +28,6 @@ // Internally known event names -FOUNDATION_EXPORT NSString *const FBSDKAppEventNamePurchased; - /** Use to log that the share dialog was launched */ FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareSheetLaunch; @@ -41,10 +43,10 @@ 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. */ +/** Use to log that the share tray launched. */ FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareTrayDidLaunch; -/*! Use to log that the person selected a sharing target. */ +/** Use to log that the person selected a sharing target. */ FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareTrayDidSelectActivity; // Internally known event parameters @@ -105,7 +107,7 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingMic; FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingCamera; /** Use to log the results of a share dialog */ -FOUNDATION_EXPORT NSString *const FBSDLAppEventNameFBSDKEventShareDialogResult; +FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventShareDialogResult; FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogResult; FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult; @@ -118,11 +120,11 @@ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentType; FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentUUID; FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentPageID; -/*! Use to log parameters for share tray use */ +/** 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*/ +/** Use to log parameters for live streaming*/ FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingPrevStatus; FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingStatus; FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingError; @@ -199,12 +201,44 @@ 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; -+ (FBSDKAppEvents *)singleton; - (void)flushForReason:(FBSDKAppEventsFlushReason)flushReason; - (void)registerNotifications; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h index 2de04b854d..bd25235175 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(AppEventsDeviceInfo) @interface FBSDKAppEventsDeviceInfo : NSObject + (void)extendDictionaryWithDeviceInfo:(NSMutableDictionary *)dictionary; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m index 11106fa396..631fba933b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m @@ -25,6 +25,7 @@ #import #import #endif + #import #import @@ -228,7 +229,7 @@ static const u_int FB_GIGABYTE = 1024 * 1024 * 1024; // bytes _timeZoneName ?: @"" ]; - return [FBSDKInternalUtility JSONStringForObject:arr error:NULL invalidObjectHandler:NULL]; + return [FBSDKBasicUtility JSONStringForObject:arr error:NULL invalidObjectHandler:NULL]; } #pragma mark - Helper Methods diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h index 5bb5c2e798..a23dea7fc1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h @@ -19,13 +19,14 @@ #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) BOOL areAllEventsImplicit; +@property (nonatomic, readonly, getter=areAllEventsImplicit) BOOL allEventsImplicit; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m index cff1b8ac93..3fcf9af1e0 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m @@ -18,7 +18,9 @@ #import "FBSDKAppEventsState.h" -#import "FBSDKInternalUtility.h" +#import "FBSDKBasicUtility.h" +#import "FBSDKEventDeactivationManager.h" +#import "FBSDKRestrictiveDataFilterManager.h" #define FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY @"isImplicit" @@ -163,6 +165,8 @@ - (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]) { @@ -175,7 +179,7 @@ [events addObject:event]; } - return [FBSDKInternalUtility JSONStringForObject:events error:NULL invalidObjectHandler:NULL]; + 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 index 4c17a4c791..046ff217cf 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h @@ -20,6 +20,7 @@ @class FBSDKAppEventsState; +NS_SWIFT_NAME(AppEventsStateManager) @interface FBSDKAppEventsStateManager : NSObject + (void)clearPersistedAppEventsStates; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m index 596d7a6223..294b558d4a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m @@ -22,6 +22,7 @@ #import "FBSDKAppEventsState.h" #import "FBSDKAppEventsUtility.h" +#import "FBSDKInternalUtility.h" #import "FBSDKLogger.h" #import "FBSDKSettings.h" @@ -73,6 +74,6 @@ static BOOL g_canSkipDiskCheck = NO; + (NSString *)filePath { - return [FBSDKAppEventsUtility persistenceFilePath:@"com-facebook-sdk-AppEventsPersistedEvents.json"]; + 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 index 42ec8c71e9..6b0baa29dd 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h @@ -25,7 +25,7 @@ typedef NS_ENUM(NSUInteger, FBSDKAdvertisingTrackingStatus) FBSDKAdvertisingTrackingAllowed, FBSDKAdvertisingTrackingDisallowed, FBSDKAdvertisingTrackingUnspecified -}; +} NS_SWIFT_NAME(AppEventsUtility.AdvertisingTrackingStatus); typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushReason) { @@ -35,30 +35,32 @@ typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushReason) 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; -+ (NSString *)advertiserID; -+ (FBSDKAdvertisingTrackingStatus)advertisingTrackingStatus; -+ (NSString *)attributionID; + + (void)ensureOnMainThread:(NSString *)methodName className:(NSString *)className; + (NSString *)flushReasonToString:(FBSDKAppEventsFlushReason)flushReason; + (void)logAndNotify:(NSString *)msg allowLogAsDeveloperError:(BOOL)allowLogAsDeveloperError; + (void)logAndNotify:(NSString *)msg; -+ (NSString *)persistenceFilePath:(NSString *)filename; + (NSString *)tokenStringToUseFor:(FBSDKAccessToken *)token; -+ (long)unixTimeNow; + (BOOL)validateIdentifier:(NSString *)identifier; + (id)getVariable:(NSString *)variableName fromInstance:(NSObject *)instance; + (NSNumber *)getNumberValue:(NSString *)text; -+ (BOOL)isDebugBuild; + (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 index dae2b1bfab..a353aa5225 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m @@ -47,21 +47,27 @@ #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 NSString *attributionID = [[self class] attributionID]; // Only present on iOS 6 and below. - [FBSDKInternalUtility dictionary:parameters setObject:attributionID forKey:@"attribution"]; + [FBSDKBasicUtility dictionary:parameters setObject:attributionID forKey:@"attribution"]; #endif if (!implicitEventsOnly && shouldAccessAdvertisingID) { NSString *advertiserID = [[self class] advertiserID]; - [FBSDKInternalUtility dictionary:parameters setObject:advertiserID forKey:@"advertiser_id"]; + [FBSDKBasicUtility dictionary:parameters setObject:advertiserID forKey:@"advertiser_id"]; } - parameters[FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY] = [self anonymousID]; + 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; @@ -69,10 +75,6 @@ if (userID) { parameters[@"app_user_id"] = userID; } - NSString *userData = [FBSDKAppEvents getUserData]; - if (userData){ - parameters[@"ud"] = userData; - } [FBSDKAppEventsDeviceInfo extendDictionaryWithDeviceInfo:parameters]; @@ -91,7 +93,7 @@ }); if (urlSchemes.count > 0) { - parameters[@"url_schemes"] = [FBSDKInternalUtility JSONStringForObject:urlSchemes error:NULL invalidObjectHandler:NULL]; + parameters[@"url_schemes"] = [FBSDKBasicUtility JSONStringForObject:urlSchemes error:NULL invalidObjectHandler:NULL]; } return parameters; @@ -99,7 +101,7 @@ + (NSString *)advertiserID { - if (![[FBSDKSettings advertiserIDCollectionEnabled] boolValue]) { + if (!FBSDKSettings.isAdvertiserIDCollectionEnabled) { return nil; } @@ -133,22 +135,6 @@ return status; } -+ (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 *)attributionID { #if TARGET_OS_TV @@ -158,7 +144,8 @@ #endif } -// for tests only. +#pragma mark - Internal, for testing + + (void)clearLibraryFiles { [[NSFileManager defaultManager] removeItemAtPath:[[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME] @@ -218,7 +205,7 @@ } [FBSDKLogger singleShotLogEntry:behaviorToLog logEntry:msg]; - NSError *error = [NSError fbErrorWithCode:FBSDKErrorAppEventsFlush message:msg]; + NSError *error = [FBSDKError errorWithCode:FBSDKErrorAppEventsFlush message:msg]; [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAppEventsLoggingResultNotification object:error]; } @@ -285,37 +272,6 @@ restOfStringCharacterSet:(NSCharacterSet *)restOfStringCharacterSet return YES; } -+ (void)persistAnonymousID:(NSString *)anonymousID -{ - [[self class] ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass(self)]; - NSDictionary *data = @{ FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY : anonymousID }; - NSString *content = [FBSDKInternalUtility JSONStringForObject:data error:NULL invalidObjectHandler:NULL]; - - [content writeToFile:[[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME] - atomically:YES - encoding:NSASCIIStringEncoding - error:nil]; -} - -+ (NSString *)persistenceFilePath:(NSString *)filename -{ - NSSearchPathDirectory directory = NSLibraryDirectory; - NSArray *paths = NSSearchPathForDirectoriesInDomains(directory, NSUserDomainMask, YES); - NSString *docDirectory = paths[0]; - return [docDirectory stringByAppendingPathComponent:filename]; -} - -+ (NSString *)retrievePersistedAnonymousID -{ - [[self class] ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass(self)]; - NSString *file = [[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME]; - NSString *content = [[NSString alloc] initWithContentsOfFile:file - encoding:NSASCIIStringEncoding - error:nil]; - NSDictionary *results = [FBSDKInternalUtility objectForJSONString:content error:NULL]; - return results[FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY]; -} - // 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 diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h index 0f6d1c8e15..79eb205ef0 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h @@ -16,11 +16,16 @@ // IN AN ACTION OF 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 index 3e62dcfcfe..40709d931a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m @@ -16,9 +16,17 @@ // IN AN ACTION OF 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" @@ -34,7 +42,7 @@ NSString *const FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey = @"_fb_pix NSString *event = message.body[FBSDKAppEventsWKWebViewMessagesEventKey]; if (event.length > 0) { NSString *stringedParams = message.body[FBSDKAppEventsWKWebViewMessagesParamsKey]; - NSMutableDictionary *params = nil; + NSMutableDictionary *params = nil; NSError *jsonParseError = nil; if ([stringedParams isKindOfClass:[NSString class]]) { params = [NSJSONSerialization JSONObjectWithData:[stringedParams dataUsingEncoding:NSUTF8StringEncoding] @@ -54,9 +62,13 @@ NSString *const FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey = @"_fb_pix else { params[FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey] = pixelID; } - [FBSDKAppEvents logEvent:event parameters:params]; + [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 index a5f7a77ab3..aae6d63fe1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h @@ -19,6 +19,7 @@ #import // Class to encapsulate implicit logging of purchase events +NS_SWIFT_NAME(PaymentObserver) @interface FBSDKPaymentObserver : NSObject + (void)startObservingTransactions; + (void)stopObservingTransactions; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m index 858e103856..95ee5639fb 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m @@ -20,24 +20,34 @@ #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; @@ -65,9 +75,7 @@ static NSMutableArray *g_pendingRequestors; [[self singleton] stopObservingTransactions]; } -// -// Internal methods -// +#pragma mark - Internal Methods + (FBSDKPaymentObserver *)singleton { @@ -127,10 +135,6 @@ static NSMutableArray *g_pendingRequestors; - (void)handleTransaction:(SKPaymentTransaction *)transaction { - // Ignore restored transaction - if (transaction.originalTransaction != nil) { - return; - } FBSDKPaymentProductRequestor *productRequest = [[FBSDKPaymentProductRequestor alloc] initWithTransaction:transaction]; [productRequest resolveProducts]; } @@ -142,6 +146,11 @@ static NSMutableArray *g_pendingRequestors; @end @implementation FBSDKPaymentProductRequestor +{ + NSMutableSet *_originalTransactionSet; + NSSet *_eventsWithReceipt; + NSDateFormatter *_formatter; +} + (void)initialize { @@ -155,6 +164,16 @@ static NSMutableArray *g_pendingRequestors; 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; } @@ -192,86 +211,182 @@ static NSMutableArray *g_pendingRequestors; - (void)logTransactionEvent:(SKProduct *)product { - NSString *eventName = nil; + 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; - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - formatter.dateFormat = @"yyyy-MM-dd HH:mm:ssZ"; - switch (self.transaction.transactionState) { + switch (transaction.transactionState) { case SKPaymentTransactionStatePurchasing: - eventName = FBSDKAppEventNameInitiatedCheckout; break; case SKPaymentTransactionStatePurchased: - eventName = FBSDKAppEventNamePurchased; transactionID = self.transaction.transactionIdentifier; - transactionDate = [formatter stringFromDate:self.transaction.transactionDate]; + transactionDate = [_formatter stringFromDate:self.transaction.transactionDate]; break; case SKPaymentTransactionStateFailed: - eventName = FBSDKAppEventNamePurchaseFailed; break; case SKPaymentTransactionStateRestored: - eventName = FBSDKAppEventNamePurchaseRestored; - transactionDate = [formatter stringFromDate:self.transaction.transactionDate]; + transactionDate = [_formatter stringFromDate:self.transaction.transactionDate]; break; - case SKPaymentTransactionStateDeferred: - return; + default: break; } - if (!eventName) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKPaymentObserver logTransactionEvent: event name cannot be nil"]; - return; - } - - SKPayment *payment = self.transaction.payment; + SKPayment *payment = transaction.payment; NSMutableDictionary *eventParameters = [NSMutableDictionary dictionaryWithDictionary: @{ FBSDKAppEventParameterNameContentID: payment.productIdentifier ?: @"", FBSDKAppEventParameterNameNumItems: @(payment.quantity), FBSDKAppEventParameterNameTransactionDate: transactionDate ?: @"", }]; - double totalAmount = 0; if (product) { - totalAmount = payment.quantity * product.price.doubleValue; [eventParameters addEntriesFromDictionary: @{ FBSDKAppEventParameterNameCurrency: [product.priceLocale objectForKey:NSLocaleCurrencyCode], FBSDKAppEventParameterNameNumItems: @(payment.quantity), FBSDKAppEventParameterNameProductTitle: [self getTruncatedString:product.localizedTitle], FBSDKAppEventParameterNameDescription: [self getTruncatedString:product.localizedDescription], }]; - -#if !TARGET_OS_TV -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_2 - if (@available(iOS 11.2, *)) { - BOOL isSubscription = (product.subscriptionPeriod != nil) && ((unsigned long)product.subscriptionPeriod.numberOfUnits > 0); - if (isSubscription) { - // subs inapp - eventParameters[FBSDKAppEventParameterNameSubscriptionPeriod] = [self lengthOfSubscriptionPeriod:product.subscriptionPeriod]; - eventParameters[FBSDKAppEventParameterNameInAppPurchaseType] = @"subs"; - // trial information for subs - SKProductDiscount *discount = product.introductoryPrice; - if (discount) { - eventParameters[FBSDKAppEventParameterNameTrialPeriod] = [self lengthOfSubscriptionPeriod:discount.subscriptionPeriod]; - eventParameters[FBSDKAppEventParameterNameTrialPrice] = discount.price; - } - } else { - eventParameters[FBSDKAppEventParameterNameInAppPurchaseType] = @"inapp"; - } - } -#endif -#endif if (transactionID) { eventParameters[FBSDKAppEventParameterNameTransactionID] = transactionID; } } - [self logImplicitPurchaseEvent:eventName - valueToSum:totalAmount - parameters:eventParameters]; +#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; } -- (NSString *)lengthOfSubscriptionPeriod:(id)subcriptionPeriod +- (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_2 +#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; @@ -323,12 +438,85 @@ static NSMutableArray *g_pendingRequestors; } } -- (void)logImplicitPurchaseEvent:(NSString *)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters { +- (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 ([eventName isEqualToString:FBSDKAppEventNamePurchased]) { + if ([_eventsWithReceipt containsObject:eventName]) { NSData* receipt = [self fetchDeviceReceipt]; if (receipt) { NSString *base64encodedReceipt = [receipt base64EncodedStringWithOptions:0]; @@ -349,7 +537,8 @@ static NSMutableArray *g_pendingRequestors; } // Fetch the current receipt for this application. -- (NSData*)fetchDeviceReceipt { +- (NSData*)fetchDeviceReceipt +{ NSURL *receiptURL = [NSBundle bundleForClass:[self class]].appStoreReceiptURL; NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; return receipt; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h index b664af9745..0eb583e6c4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h @@ -22,6 +22,7 @@ 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; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m index 366c450d83..d57c7e9bcb 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m @@ -154,9 +154,9 @@ static const long INACTIVE_SECONDS_QUANTA[] = FBSDKTimeSpentPersistKeySessionID : _sessionID, }; - NSString *content = [FBSDKInternalUtility JSONStringForObject:timeSpentData error:NULL invalidObjectHandler:NULL]; + NSString *content = [FBSDKBasicUtility JSONStringForObject:timeSpentData error:NULL invalidObjectHandler:NULL]; - [content writeToFile:[FBSDKAppEventsUtility persistenceFilePath:FBSDKTimeSpentFilename] + [content writeToFile:[FBSDKBasicUtility persistenceFilePath:FBSDKTimeSpentFilename] atomically:YES encoding:NSASCIIStringEncoding error:nil]; @@ -181,7 +181,7 @@ static const long INACTIVE_SECONDS_QUANTA[] = if (!_isCurrentlyLoaded) { NSString *content = - [[NSString alloc] initWithContentsOfFile:[FBSDKAppEventsUtility persistenceFilePath:FBSDKTimeSpentFilename] + [[NSString alloc] initWithContentsOfFile:[FBSDKBasicUtility persistenceFilePath:FBSDKTimeSpentFilename] usedEncoding:nil error:nil]; @@ -203,7 +203,7 @@ static const long INACTIVE_SECONDS_QUANTA[] = } else { - NSDictionary *results = [FBSDKInternalUtility objectForJSONString:content error:NULL]; + NSDictionary *results = [FBSDKBasicUtility objectForJSONString:content error:NULL]; _lastSuspendTime = [results[FBSDKTimeSpentPersistKeyLastSuspendTime] longValue]; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h index 9377089331..c0266856be 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h @@ -18,26 +18,30 @@ #import +#import "FBSDKAppEvents+Internal.h" + NS_ASSUME_NONNULL_BEGIN +NS_SWIFT_NAME(UserDataStore) @interface FBSDKUserDataStore : NSObject -+ (void)initStore; - -+ (void)setUserDataAndHash:(NSDictionary *)ud; - -+ (void)setUserDataAndHash:(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; - -+ (NSString *) getHashedUserData; ++ (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 diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m index a4c18465d3..f49832e474 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m @@ -25,157 +25,153 @@ static NSString *const FBSDKUserDataKey = @"com.facebook.appevents.UserDataStore.userData"; -static NSString *const FBSDKEmail = @"em"; -static NSString *const FBSDKFirstName = @"fn"; -static NSString *const FBSDKLastName = @"ln"; -static NSString *const FBSDKPhone = @"ph"; -static NSString *const FBSDKDateOfBirth = @"db"; -static NSString *const FBSDKGender = @"ge"; -static NSString *const FBSDKCity = @"ct"; -static NSString *const FBSDKState = @"st"; -static NSString *const FBSDKZip = @"zp"; -static NSString *const FBSDKCountry = @"country"; - -static NSString *hashedUserData; -static volatile bool initialized = false; +static NSMutableDictionary *hashedUserData; +static dispatch_queue_t serialQueue; @implementation FBSDKUserDataStore -+ (void)initStore ++ (void)initialize { - if (initialized){ - return; + 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]; } - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - hashedUserData = [defaults stringForKey:FBSDKUserDataKey]; - initialized = true; } -+ (void)setUserDataAndHash:(NSDictionary *)ud ++ (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 { - if (!initialized){ - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"initStore should have been called before calling setUserData"]; - [FBSDKUserDataStore initStore]; - } - - hashedUserData = [FBSDKUserDataStore hashUserData:ud]; - NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:(hashedUserData) forKey:(FBSDKUserDataKey)]; -} - -+ (void)setUserDataAndHash:(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 initStore]; - NSMutableDictionary *ud = [[NSMutableDictionary alloc] init]; - if (email != nil) { - ud[FBSDKEmail] = email; + if (email) { + ud[FBSDKAppEventEmail] = [FBSDKUserDataStore encryptData:email type:FBSDKAppEventEmail]; } - if (firstName != nil) { - ud[FBSDKFirstName] = firstName; + if (firstName) { + ud[FBSDKAppEventFirstName] = [FBSDKUserDataStore encryptData:firstName type:FBSDKAppEventFirstName]; } - if (lastName != nil) { - ud[FBSDKLastName] = lastName; + if (lastName) { + ud[FBSDKAppEventLastName] = [FBSDKUserDataStore encryptData:lastName type:FBSDKAppEventLastName]; } - if (phone != nil) { - ud[FBSDKPhone] = phone; + if (phone) { + ud[FBSDKAppEventPhone] = [FBSDKUserDataStore encryptData:phone type:FBSDKAppEventPhone]; } - if (dateOfBirth != nil) { - ud[FBSDKDateOfBirth] = dateOfBirth; + if (dateOfBirth) { + ud[FBSDKAppEventDateOfBirth] = [FBSDKUserDataStore encryptData:dateOfBirth type:FBSDKAppEventDateOfBirth]; } - if (gender != nil) { - ud[FBSDKGender] = gender; + if (gender) { + ud[FBSDKAppEventGender] = [FBSDKUserDataStore encryptData:gender type:FBSDKAppEventGender]; } - if (city != nil) { - ud[FBSDKCity] = city; + if (city) { + ud[FBSDKAppEventCity] = [FBSDKUserDataStore encryptData:city type:FBSDKAppEventCity]; } - if (state != nil) { - ud[FBSDKState] = state; + if (state) { + ud[FBSDKAppEventState] = [FBSDKUserDataStore encryptData:state type:FBSDKAppEventState]; } - if (zip != nil) { - ud[FBSDKZip] = zip; + if (zip) { + ud[FBSDKAppEventZip] = [FBSDKUserDataStore encryptData:zip type:FBSDKAppEventZip]; } - if (country != nil) { - ud[FBSDKCountry] = country; + if (country) { + ud[FBSDKAppEventCountry] = [FBSDKUserDataStore encryptData:country type:FBSDKAppEventCountry]; } - hashedUserData = [FBSDKUserDataStore hashUserData:ud]; - NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:(hashedUserData) forKey:(FBSDKUserDataKey)]; + dispatch_async(serialQueue, ^{ + hashedUserData = [ud mutableCopy]; + [[NSUserDefaults standardUserDefaults] setObject:[FBSDKUserDataStore stringByHashedData:hashedUserData] + forKey:FBSDKUserDataKey]; + }); } -+ (NSString *)getHashedUserData ++ (void)setAndHashData:(nullable NSString *)data + forType:(FBSDKAppEventUserDataType)type { - if (!initialized){ - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"initStore should have been called before calling setUserID"]; - [FBSDKUserDataStore initStore]; - } - - return hashedUserData; + [FBSDKUserDataStore setHashData:[FBSDKUserDataStore encryptData:data type:type] + forType:type]; } -+ (NSString *)hashUserData:(NSDictionary *)ud ++ (void)setHashData:(nullable NSString *)hashData + forType:(FBSDKAppEventUserDataType)type { - if (ud == nil){ - return nil; - } - - NSMutableDictionary *encryptUserData = [NSMutableDictionary dictionaryWithCapacity:ud.count]; - - for (NSString *key in ud){ - NSString *const value = ud[key]; - if ([FBSDKUserDataStore maybeSHA256Hashed:value]){ - encryptUserData[key] = value; + dispatch_async(serialQueue, ^{ + if (!hashData) { + [hashedUserData removeObjectForKey:type]; } else { - NSString *const normalizedValue = [FBSDKUserDataStore normalizeData:key data:value]; - NSString *const encryptedValue = [FBSDKUserDataStore encryptData:normalizedValue]; - if (encryptedValue != nil){ - encryptUserData[key] = encryptedValue; - } + 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:encryptUserData + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:hashedData options:0 error:&error]; - if (jsonData){ + if (jsonData) { return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } else { - [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"invalid json object: %@", error]]; - return nil; + [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"Invalid json object: %@", error]]; + return @""; } } + (NSString *)encryptData:(NSString *)data + type:(FBSDKAppEventUserDataType)type { - if (data == nil || data.length == 0){ - return nil; + if (data.length == 0 || [FBSDKUserDataStore maybeSHA256Hashed:data]) { + return data; } - return [FBSDKUtility SHA256Hash:data]; + return [FBSDKUtility SHA256Hash:[FBSDKUserDataStore normalizeData:data type:type]]; } -+ (NSString *)normalizeData:(NSString *)type data:(NSString *)data{ ++ (NSString *)normalizeData:(NSString *)data + type:(FBSDKAppEventUserDataType)type +{ NSString *normalizedData = @""; - if ([type isEqualToString:FBSDKEmail] || [type isEqualToString:FBSDKFirstName] - || [type isEqualToString:FBSDKLastName] || [type isEqualToString:FBSDKCity] - || [type isEqualToString:FBSDKState] || [type isEqualToString:FBSDKCountry]) { + 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:FBSDKPhone]){ + } else if ([type isEqualToString:FBSDKAppEventPhone]) { NSError *error = nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9]" options:NSRegularExpressionCaseInsensitive @@ -186,12 +182,11 @@ static volatile bool initialized = false; range:NSMakeRange(0, data.length) withTemplate:@"" ]; - } else if ([type isEqualToString:FBSDKGender]){ + } else if ([type isEqualToString:FBSDKAppEventGender]) { NSString *temp = [data stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; temp = temp.lowercaseString; normalizedData = temp.length > 0 ? [temp substringToIndex:1]: @""; } - return normalizedData; } 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 new file mode 100644 index 0000000000..6adebf64d8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..314fe5ecdd --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.m @@ -0,0 +1,233 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..2b5cfe5e7f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelRuntime.hpp @@ -0,0 +1,310 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h similarity index 88% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h index 7fa7d7f04d..3012e8e3c5 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h @@ -16,11 +16,16 @@ // IN AN ACTION OF 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 "FBSDKAccessToken.h" -#import "FBSDKAccessTokenCaching.h" +@interface FBSDKModelUtility : NSObject -@interface FBSDKAccessTokenCacheV4 : 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 new file mode 100644 index 0000000000..9c1bff6761 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.m @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..2cec1084b8 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKStandaloneModel.hpp @@ -0,0 +1,152 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..c6245d88bc --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.h @@ -0,0 +1,32 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..a9f1d25d19 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.m @@ -0,0 +1,69 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h similarity index 81% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h index 38158311bd..e95ecd2c0e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h @@ -16,14 +16,22 @@ // IN AN ACTION OF 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 "FBSDKAccessTokenCaching.h" +NS_ASSUME_NONNULL_BEGIN -FOUNDATION_EXPORT NSString *const FBSDKTokenInformationUUIDKey; +@interface FBSDKAddressInferencer : NSObject -@interface FBSDKAccessTokenCacheV3 : NSObject - -+ (FBSDKAccessToken *)accessTokenForV3Dictionary:(NSDictionary *)dictionary; ++ (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 new file mode 100644 index 0000000000..6d163183d3 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.mm @@ -0,0 +1,213 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h similarity index 74% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h index 1245f32622..6c70282d77 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h @@ -18,17 +18,18 @@ #import -#import "FBSDKBridgeAPIRequest.h" +NS_ASSUME_NONNULL_BEGIN -@interface FBSDKBridgeAPICrypto : NSObject +@interface FBSDKRestrictiveDataFilterManager : NSObject - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; -+ (void)addCipherKeyToQueryParameters:(NSMutableDictionary *)queryParameters; -+ (NSDictionary *)decryptResponseForRequest:(FBSDKBridgeAPIRequest *)request - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef; -+ (void)reset; ++ (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 new file mode 100644 index 0000000000..df7d5a42ce --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.m @@ -0,0 +1,146 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..cbcb2a5c3c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..aa4f183888 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.mm @@ -0,0 +1,227 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..6207abd295 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.h @@ -0,0 +1,38 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..71954bc062 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.m @@ -0,0 +1,345 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..d8eaed6462 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..55b0c4e398 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.m @@ -0,0 +1,271 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..99db73a12f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h @@ -0,0 +1,74 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/Codeless/FBSDKViewHierarchy.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m similarity index 90% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m index 15bcc85281..e3aa150310 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m @@ -16,40 +16,37 @@ // IN AN ACTION OF 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 "FBSDKCodelessMacros.h" #import "FBSDKCodelessPathComponent.h" #import "FBSDKCoreKit+Internal.h" +#import "FBSDKViewHierarchyMacros.h" #define MAX_VIEW_HIERARCHY_LEVEL 35 -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, -}; +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 @@ -268,6 +265,11 @@ typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { } + (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj +{ + return [self getDetailAttributesOf:obj withHash:YES]; +} + ++ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj withHash:(BOOL)hash { if (!obj) { return nil; @@ -280,10 +282,10 @@ typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:simpleAttributes]; NSString *className = NSStringFromClass([obj class]); - result[CODELESS_VIEW_TREE_CLASS_NAME_KEY] = className; + result[VIEW_HIERARCHY_CLASS_NAME_KEY] = className; NSUInteger classBitmask = [FBSDKViewHierarchy getClassBitmask:obj]; - result[CODELESS_VIEW_TREE_CLASS_TYPE_BIT_MASK_KEY] = [NSString stringWithFormat:@"%lu", (unsigned long)classBitmask]; + result[VIEW_HIERARCHY_CLASS_TYPE_BITMASK_KEY] = [NSString stringWithFormat:@"%lu", (unsigned long)classBitmask]; if ([obj isKindOfClass:[UIControl class]]) { // Get actions of UIControl @@ -308,6 +310,12 @@ typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { 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; } @@ -357,9 +365,9 @@ typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { } if (titles.count > 0) { - text = [FBSDKInternalUtility JSONStringForObject:titles - error:NULL - invalidObjectHandler:NULL]; + text = [FBSDKBasicUtility JSONStringForObject:titles + error:NULL + invalidObjectHandler:NULL]; } } else if ([obj isKindOfClass:[UIDatePicker class]]) { UIDatePicker *picker = (UIDatePicker *)obj; @@ -488,6 +496,30 @@ typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { 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 @@ -626,3 +658,5 @@ typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h similarity index 85% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h index 72ef74153c..a81f113270 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h @@ -15,8 +15,8 @@ // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER // IN AN ACTION 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 FBSDKCodelessMacros_h -#define FBSDKCodelessMacros_h +#ifndef FBSDKViewHierarchyMacros_h +#define FBSDKViewHierarchyMacros_h // keys for event binding path compoenent #define CODELESS_MAPPING_METHOD_KEY @"method" @@ -66,14 +66,9 @@ #define CODELESS_SETTING_CACHE_TIMEOUT (7 * 24 * 60 * 60) // keys for view tree -#define CODELESS_VIEW_TREE_CLASS_NAME_KEY @"classname" -#define CODELESS_VIEW_TREE_CLASS_TYPE_BIT_MASK_KEY @"classtypebitmask" -#define CODELESS_VIEW_TREE_TEXT_KEY @"text" #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_CHILDREN_KEY @"childviews" -#define CODELESS_VIEW_TREE_HINT_KEY @"hint" #define CODELESS_VIEW_TREE_ACTIONS_KEY @"actions" #define CODELESS_VIEW_TREE_TOP_KEY @"top" @@ -89,4 +84,19 @@ #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 index 4bd2d01a61..9d681b29d1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h @@ -16,22 +16,31 @@ // IN AN ACTION OF 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; +/** 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, @@ -42,22 +51,25 @@ FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersion; from App Link metadata. @param webURL the fallback web URL, if any, for the app link. */ -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL ++ (instancetype)appLinkWithSourceURL:(nullable NSURL *)sourceURL targets:(NSArray *)targets - webURL:(nullable NSURL *)webURL; + webURL:(nullable NSURL *)webURL +NS_SWIFT_NAME(init(sourceURL:targets:webURL:)); -/*! The URL from which this FBSDKAppLink was derived */ -@property (nonatomic, strong, readonly) NSURL *sourceURL; +/** 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. */ +/** 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 index 57597dd576..a1ea9d2dc6 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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"; @@ -68,3 +72,5 @@ NSString *const FBSDKAppLinkVersion = @"1.0"; } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h index daf124ffed..4905ca7e27 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -23,17 +27,17 @@ 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 */ + /** Indicates that the navigation failed and no app was opened */ FBSDKAppLinkNavigationTypeFailure, - /*! Indicates that the navigation succeeded by opening the URL in the browser */ + /** 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 */ + /** 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. @@ -41,67 +45,83 @@ typedef NS_ENUM(NSInteger, FBSDKAppLinkNavigationType) { @param error the error during the request, if any */ -typedef void (^FBSDKAppLinkNavigationHandler)(FBSDKAppLinkNavigationType navType, NSError * _Nullable error); +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 */ +/** 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 */ +/** Creates an AppLinkNavigation with the given link, extras, and App Link data */ + (instancetype)navigationWithAppLink:(FBSDKAppLink *)appLink extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)appLinkData; + 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; + url:(NSString *)url +NS_SWIFT_NAME(callbackAppLinkData(forApp:url:)); -/*! Performs the navigation */ -- (FBSDKAppLinkNavigationType)navigate:(NSError *__autoreleasing *)error; +/** Performs the navigation */ +- (FBSDKAppLinkNavigationType)navigate:(NSError **)error +__attribute__((swift_error(nonnull_error))); -/*! Returns a FBSDKAppLink for the given URL */ -+ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkFromURLHandler)handler; +/** 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 */ +/** Returns a FBSDKAppLink for the given URL using the given App Link resolution strategy */ + (void)resolveAppLink:(NSURL *)destination resolver:(id)resolver - handler:(FBSDKAppLinkFromURLHandler)handler; + handler:(FBSDKAppLinkBlock)handler; -/*! Navigates to a FBSDKAppLink and returns whether it opened in-app or in-browser */ -+ (FBSDKAppLinkNavigationType)navigateToAppLink:(FBSDKAppLink *)link error:(NSError *__autoreleasing *)error; +/** 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 @@ -109,29 +129,19 @@ NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") */ + (FBSDKAppLinkNavigationType)navigationTypeForLink:(FBSDKAppLink *)link; -/*! Navigates to a URL (an asynchronous action) and returns a FBSDKNavigationType */ -+ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationHandler)handler; +/** 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:(FBSDKAppLinkNavigationHandler)handler; - -/*! - Gets the default resolver to be used for App Link resolution. If the developer has not set one explicitly, - a basic, built-in resolver will be used. - */ -+ (id)defaultResolver; - -/*! - Sets the default resolver to be used for App Link resolution. Setting this to nil will revert the - default resolver to the basic, built-in resolver provided by FBSDK. - */ -+ (void)setDefaultResolver:(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 index 436ceb4954..4cce02185a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -208,21 +212,21 @@ static id defaultResolver; + (void)resolveAppLink:(NSURL *)destination resolver:(id)resolver - handler:(FBSDKAppLinkFromURLHandler)handler { + handler:(FBSDKAppLinkBlock)handler { [resolver appLinkFromURL:destination handler:handler]; } -+ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkFromURLHandler)handler { ++ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkBlock)handler { [self resolveAppLink:destination resolver:[self defaultResolver] handler:handler]; } -+ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationHandler)handler { ++ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationBlock)handler { [self navigateToURL:destination resolver:[self defaultResolver] handler:handler]; } + (void)navigateToURL:(NSURL *)destination resolver:(id)resolver - handler:(FBSDKAppLinkNavigationHandler)handler { + handler:(FBSDKAppLinkNavigationBlock)handler { dispatch_async(dispatch_get_main_queue(), ^{ [self resolveAppLink:destination @@ -292,3 +296,5 @@ static id defaultResolver; } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h index 39b5dc0e85..88898b6207 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h @@ -16,79 +16,39 @@ // IN AN ACTION OF 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" -@class BFTask; - - -// Check if Bolts.framework is available for import -#if __has_include() -// Import it if it's available -#import -#else -// Otherwise - redeclare BFAppLinkResolving protocol to resolve the problem of missing symbols -// Please note: Bolts.framework is still required for AppLink resolving to work, -// but this allows FBSDKCoreKit to weakly link Bolts.framework as well as this enables clang modulemaps to work. +NS_ASSUME_NONNULL_BEGIN /** - 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. + Describes the callback for appLinkFromURLInBackground. + @param appLinks the FBSDKAppLinks representing the deferred App Links + @param error the error during the request, if any */ -DEPRECATED_MSG_ATTRIBUTE("Use `FBSDKAppLinkResolving`") -@protocol BFAppLinkResolving - -/** - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @return A BFTask that will return a BFAppLink for the given URL. - */ -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url -DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURL:handler:`"); - -@end - -#endif +typedef void (^FBSDKAppLinksBlock)(NSDictionary * appLinks, + NSError * _Nullable error) +NS_SWIFT_NAME(AppLinksBlock); /** - Provides an implementation of the BFAppLinkResolving protocol that uses the Facebook App Link + 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:]` and linking - Bolts.framework + Usage of this type requires a client token. See `[FBSDKSettings setClientToken:]` */ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -@interface FBSDKAppLinkResolver : NSObject -#pragma clang diagnostic pop -/** - Asynchronously resolves App Link data for multiple URLs. +NS_SWIFT_NAME(AppLinkResolver) +@interface FBSDKAppLinkResolver : NSObject - @param urls An array of NSURLs to resolve into App Links. - @return A BFTask that will return dictionary mapping input NSURLs to their - corresponding BFAppLink. - - You should set the client token before making this call. See `[FBSDKSettings setClientToken:]` - */ -- (BFTask *)appLinksFromURLsInBackground:(NSArray *)urls -DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURLs:handler:`"); - -/** - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @return A BFTask that will return a BFAppLink for the given URL. - */ -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url -DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURL:handler:`"); +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; /** Asynchronously resolves App Link data for a given array of URLs. @@ -96,12 +56,17 @@ DEPRECATED_MSG_ATTRIBUTE("Use `appLinkFromURL:handler:`"); @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:(FBSDKAppLinksFromURLArrayHandler)handler +- (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; ++ (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 index b83ec5bb2b..93167f8935 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m @@ -16,17 +16,17 @@ // IN AN ACTION OF 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 -#import -#import -#import - #import "FBSDKAccessToken.h" #import "FBSDKAppLink.h" +#import "FBSDKAppLinkTarget.h" #import "FBSDKGraphRequest+Internal.h" #import "FBSDKGraphRequestConnection.h" #import "FBSDKInternalUtility.h" @@ -46,47 +46,35 @@ static NSString *const kAppLinksKey = @"app_links"; @interface FBSDKAppLinkResolver () -@property (nonatomic, strong) NSMutableDictionary *cachedBFAppLinks; @property (nonatomic, strong) NSMutableDictionary *cachedFBSDKAppLinks; @property (nonatomic, assign) UIUserInterfaceIdiom userInterfaceIdiom; @end @implementation FBSDKAppLinkResolver -static Class g_BFTaskCompletionSourceClass; -static Class g_BFAppLinkTargetClass; -static Class g_BFAppLinkClass; -static Class g_BFTaskClass; - + (void)initialize { if (self == [FBSDKAppLinkResolver class]) { - g_BFTaskCompletionSourceClass = [FBSDKInternalUtility - resolveBoltsClassWithName:@"BFTaskCompletionSource"]; - g_BFAppLinkTargetClass = [FBSDKInternalUtility resolveBoltsClassWithName:@"BFAppLinkTarget"]; - g_BFTaskClass = [FBSDKInternalUtility resolveBoltsClassWithName:@"BFTask"]; - g_BFAppLinkClass = [FBSDKInternalUtility resolveBoltsClassWithName:@"BFAppLink"]; } } - (instancetype)initWithUserInterfaceIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom { if (self = [super init]) { - self.cachedBFAppLinks = [NSMutableDictionary dictionary]; self.cachedFBSDKAppLinks = [NSMutableDictionary dictionary]; self.userInterfaceIdiom = userInterfaceIdiom; } return self; } -- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkFromURLHandler)handler +- (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:(FBSDKAppLinksFromURLArrayHandler)handler +- (void)appLinksFromURLs:(NSArray *)urls handler:(FBSDKAppLinksBlock)handler { if (![FBSDKSettings clientToken] && ![FBSDKAccessToken currentAccessToken]) { [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors @@ -166,7 +154,7 @@ static Class g_BFTaskClass; NSURL *fallbackUrl = webFallbackString ? [NSURL URLWithString:webFallbackString] : url; NSNumber *shouldFallback = webTarget[kShouldFallbackKey]; - if (shouldFallback && !shouldFallback.boolValue) { + if (shouldFallback != nil && !shouldFallback.boolValue) { fallbackUrl = nil; } @@ -182,118 +170,11 @@ static Class g_BFTaskClass; }]; } -- (BFTask *)appLinksFromURLsInBackground:(NSArray *)urls -{ - 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.cachedBFAppLinks) { - for (NSURL *url in urls) { - if (self.cachedBFAppLinks[url]) { - appLinks[url] = self.cachedBFAppLinks[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. - return [g_BFTaskClass taskWithResult:appLinks]; - } - 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]; - BFTaskCompletionSource *tcs = [g_BFTaskCompletionSourceClass taskCompletionSource]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (error) { - [tcs setError: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:[g_BFAppLinkTargetClass 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 && !shouldFallback.boolValue) { - fallbackUrl = nil; - } - - BFAppLink *link = [g_BFAppLinkClass appLinkWithSourceURL:url - targets:targets - webURL:fallbackUrl]; - @synchronized (self.cachedBFAppLinks) { - self.cachedBFAppLinks[url] = link; - } - appLinks[url] = link; - } - [tcs setResult:appLinks]; - }]; - return tcs.task; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (BFTask *)appLinkFromURLInBackground:(NSURL *)url -{ - // Implement in terms of appLinksFromURLsInBackground - BFTask *resolveTask = [self appLinksFromURLsInBackground:@[url]]; - return [resolveTask continueWithSuccessBlock:^id(BFTask *task) { - return task.result[url]; - }]; -} -#pragma clang diagnostic pop - + (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 index fac242537d..623a644f72 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -28,22 +32,16 @@ NS_ASSUME_NONNULL_BEGIN @param error the error during the request, if any */ -typedef void (^FBSDKAppLinkFromURLHandler)(FBSDKAppLink * _Nullable appLink, NSError * _Nullable error); +typedef void (^FBSDKAppLinkBlock)(FBSDKAppLink * _Nullable appLink, NSError * _Nullable error) +NS_SWIFT_NAME(AppLinkBlock); /** - 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 (^FBSDKAppLinksFromURLArrayHandler)(NSDictionary * appLinks, - NSError * _Nullable error); - -/*! 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 /** @@ -52,9 +50,11 @@ typedef void (^FBSDKAppLinksFromURLArrayHandler)(NSDictionary +#import "TargetConditionals.h" + +#if !TARGET_OS_TV + #import #import "FBSDKAppLinkReturnToRefererView.h" @@ -26,71 +29,80 @@ 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. */ +/** Called when the user has tapped to navigate, but before the navigation has been performed. */ - (void)returnToRefererController:(FBSDKAppLinkReturnToRefererController *)controller - willNavigateToAppLink:(FBSDKAppLink *)appLink; + willNavigateToAppLink:(FBSDKAppLink *)appLink +NS_SWIFT_NAME(return(to:willNavigateTo:)); -/*! Called after the navigation has been attempted, with an indication of whether the referer +/** 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; + 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. - */ -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController; -/*! + @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; +- (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; +- (void)showViewForRefererURL:(NSURL *)url +NS_SWIFT_NAME(showView(forReferer:)); -/*! +/** Closes the view, possibly animating it. */ - (void)closeViewAnimated:(BOOL)animated; @@ -98,3 +110,5 @@ 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.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m index c2268f699c..4e0cf29a60 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -236,3 +240,5 @@ static const CFTimeInterval kFBSDKViewAnimationDuration = 0.25f; } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h index c5378b73cb..7293e751d1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h @@ -16,7 +16,10 @@ // IN AN ACTION OF 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 + #import #import "FBSDKAppLinkNavigation.h" @@ -25,33 +28,35 @@ NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSUInteger, FBSDKIncludeStatusBarInSize) { FBSDKIncludeStatusBarInSizeNever, - FBSDKIncludeStatusBarInSizeIOS7AndLater, 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; +- (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; + 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 @@ -59,32 +64,36 @@ typedef NS_ENUM(NSUInteger, FBSDKIncludeStatusBarInSize) { 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; +@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) BOOL closed; +@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 index 82ede34e6c..227300c82d 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -63,7 +67,7 @@ static const CGFloat FBSDKCloseButtonHeight = 12.0; - (void)commonInit { // Initialization code - _includeStatusBarInSize = FBSDKIncludeStatusBarInSizeIOS7AndLater; + _includeStatusBarInSize = FBSDKIncludeStatusBarInSizeAlways; // iOS 7 system blue color self.backgroundColor = [UIColor colorWithRed:0.0f green:122.0f / 255.0f blue:1.0f alpha:1.0f]; @@ -151,11 +155,6 @@ static const CGFloat FBSDKCloseButtonHeight = 12.0; case FBSDKIncludeStatusBarInSizeAlways: include = YES; break; - case FBSDKIncludeStatusBarInSizeIOS7AndLater: { - float systemVersion = [UIDevice currentDevice].systemVersion.floatValue; - include = (systemVersion >= 7.0); - break; - } case FBSDKIncludeStatusBarInSizeNever: include = NO; break; @@ -269,3 +268,5 @@ static const CGFloat FBSDKCloseButtonHeight = 12.0; } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h index 091d66af61..efcb2441d7 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h @@ -16,30 +16,41 @@ // IN AN ACTION OF 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 -/*! Creates a FBSDKAppLinkTarget with the given app site and target URL. */ -+ (instancetype)appLinkTargetWithURL:(NSURL *)url +- (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; + appName:(NSString *)appName +NS_SWIFT_NAME(init(url:appStoreId:appName:)); -/*! The URL prefix for this app link target */ -@property (nonatomic, strong, readonly) NSURL *URL; +/** The URL prefix for this app link target */ +@property (nonatomic, strong, readonly, nullable) NSURL *URL; -/*! The app ID for the app store */ +/** The app ID for the app store */ @property (nonatomic, copy, readonly, nullable) NSString *appStoreId; -/*! The name of the app */ +/** 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 index 250ed1a1ca..0a98717c1e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 () @@ -39,3 +43,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h index 8a971b23e0..86c5121393 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h @@ -16,8 +16,14 @@ // IN AN ACTION OF 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 @@ -27,21 +33,19 @@ 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 (^FBSDKDeferredAppLinkHandler)(NSURL *url, NSError *error); - - -/** - Describes the callback for fetchOrganicDeferredAppLink. - @param url the url representing the deferred App Link - */ -typedef void (^FBSDKDeferredAppInviteHandler)(NSURL *url); +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). @@ -59,21 +63,10 @@ typedef void (^FBSDKDeferredAppInviteHandler)(NSURL *url); been processed (e.g., you should call this method from your application delegate's applicationDidBecomeActive:). */ -+ (void)fetchDeferredAppLink:(FBSDKDeferredAppLinkHandler)handler; - -/** - -@warning This method is no longer available and will always return NO. - */ -+ (BOOL)fetchDeferredAppInvite:(FBSDKDeferredAppInviteHandler)handler -DEPRECATED_MSG_ATTRIBUTE("This method is no longer available."); ++ (void)fetchDeferredAppLink:(nullable FBSDKURLBlock)handler; /* - Call this method to fetch promotion code from the url, if it's present. This function - requires Bolts framework. - - Note: This throws an exception if Bolts.framework is not linked. Add '[BFURL class]' in intialize method - of your AppDelegate. + 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. @@ -84,6 +77,17 @@ DEPRECATED_MSG_ATTRIBUTE("This method is no longer available."); 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. */ -+ (NSString*)appInvitePromotionCodeFromURL:(NSURL*)url; ++ (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 index 9b180c23d2..5267111a0c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m @@ -16,14 +16,17 @@ // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -#import "FBSDKAppLinkUtility.h" +#import "TargetConditionals.h" -#import +#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%@"; @@ -31,7 +34,7 @@ static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; @implementation FBSDKAppLinkUtility {} -+ (void)fetchDeferredAppLink:(FBSDKDeferredAppLinkHandler)handler ++ (void)fetchDeferredAppLink:(FBSDKURLBlock)handler { NSAssert([NSThread isMainThread], @"FBSDKAppLink fetchDeferredAppLink: must be invoked from main thread."); @@ -49,7 +52,7 @@ static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; parameters:deferredAppLinkParameters tokenString:nil version:nil - HTTPMethod:@"POST"]; + HTTPMethod:FBSDKHTTPMethodPOST]; [deferredAppLinkRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, @@ -80,14 +83,9 @@ static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; }]; } -+ (BOOL)fetchDeferredAppInvite:(FBSDKDeferredAppInviteHandler)handler ++ (NSString *)appInvitePromotionCodeFromURL:(NSURL *)url { - return NO; -} - -+ (NSString*)appInvitePromotionCodeFromURL:(NSURL*)url; -{ - BFURL *parsedUrl = [[FBSDKInternalUtility resolveBoltsClassWithName:@"BFURL"] URLWithURL:url]; + FBSDKURL *parsedUrl = [FBSDKURL URLWithURL:url]; NSDictionary *extras = parsedUrl.appLinkExtras; if (extras) { NSString *deeplinkContextString = extras[@"deeplink_context"]; @@ -95,7 +93,7 @@ static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; // Parse deeplinkContext and extract promo code if (deeplinkContextString.length > 0) { NSError *error = nil; - NSDictionary *deeplinkContextData = [FBSDKInternalUtility objectForJSONString:deeplinkContextString error:&error]; + NSDictionary *deeplinkContextData = [FBSDKBasicUtility objectForJSONString:deeplinkContextString error:&error]; if (!error && [deeplinkContextData isKindOfClass:[NSDictionary class]]) { return deeplinkContextData[@"promo_code"]; } @@ -105,4 +103,23 @@ static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; 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 index 33eba98f90..4ba20ccf02 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h @@ -16,23 +16,31 @@ // IN AN ACTION OF 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 UIWebView +/** + 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. */ -+ (instancetype)sharedInstance; +@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 index 6b6839a1be..c8e7211a5b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m @@ -16,9 +16,14 @@ // IN AN ACTION OF 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" @@ -29,7 +34,8 @@ @param error the error during the request, if any */ -typedef void (^FBSDKURLFollowRedirectsHandler)(NSDictionary *result, NSError * _Nullable error); +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 = @"" @@ -61,40 +67,39 @@ static NSString *const FBSDKWebViewAppLinkResolverIPadKey = @"ipad"; static NSString *const FBSDKWebViewAppLinkResolverWebURLKey = @"url"; static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_fallback"; -@interface FBSDKWebViewAppLinkResolverWebViewDelegate : NSObject +@interface FBSDKWebViewAppLinkResolverWebViewDelegate : NSObject -@property (nonatomic, copy) void (^didFinishLoad)(UIWebView *webView); -@property (nonatomic, copy) void (^didFailLoadWithError)(UIWebView *webView, NSError *error); +@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)webViewDidFinishLoad:(UIWebView *)webView { - if (self.didFinishLoad) { - self.didFinishLoad(webView); - } +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation +{ + if (self.didFinishLoad) { + self.didFinishLoad(webView); + } } -- (void)webViewDidStartLoad:(UIWebView *)webView { +- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error +{ + if (self.didFailLoadWithError) { + self.didFailLoadWithError(webView, error); + } } -- (void)webView:(UIWebView *)webView didFailLoadWithError:(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); + } -- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { - if (self.hasLoaded) { - // Consider loading a second resource to be "success", since it indicates an inner frame - // or redirect is happening. We can run the tag extraction script at this point. - self.didFinishLoad(webView); - return NO; - } - self.hasLoaded = YES; - return YES; + self.hasLoaded = YES; + decisionHandler(WKNavigationActionPolicyAllow); } @end @@ -110,7 +115,7 @@ static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_f return instance; } -- (void)followRedirects:(NSURL *)url handler:(FBSDKURLFollowRedirectsHandler)handler +- (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. @@ -145,7 +150,7 @@ static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_f }] resume]; } -- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkFromURLHandler)handler +- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkBlock)handler { dispatch_async(dispatch_get_main_queue(), ^{ [self followRedirects:url handler:^(NSDictionary *result, NSError * _Nullable error) { @@ -158,32 +163,41 @@ static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_f NSData *responseData = result[@"data"]; NSHTTPURLResponse *response = result[@"response"]; - UIWebView *webView = [[UIWebView alloc] init]; + WKWebView *webView = [[WKWebView alloc] init]; + FBSDKWebViewAppLinkResolverWebViewDelegate *listener = [[FBSDKWebViewAppLinkResolverWebViewDelegate alloc] init]; __block FBSDKWebViewAppLinkResolverWebViewDelegate *retainedListener = listener; - listener.didFinishLoad = ^(UIWebView *view) { + listener.didFinishLoad = ^(WKWebView *view) { if (retainedListener) { - NSDictionary *ogData = [self getALDataFromLoadedPage:view]; - [view removeFromSuperview]; - view.delegate = nil; - retainedListener = nil; - handler([self appLinkFromALData:ogData destination:url], nil); + [self getALDataFromLoadedPage:view handler:^(NSDictionary *ogData) { + [view removeFromSuperview]; + view.navigationDelegate = nil; + retainedListener = nil; + handler([self appLinkFromALData:ogData destination:url], nil); + }]; } }; - listener.didFailLoadWithError = ^(UIWebView* view, NSError *loadError) { + listener.didFailLoadWithError = ^(WKWebView *view, NSError *loadError) { if (retainedListener) { [view removeFromSuperview]; - view.delegate = nil; + view.navigationDelegate = nil; retainedListener = nil; handler(nil, loadError); } }; - webView.delegate = listener; + webView.navigationDelegate = listener; webView.hidden = YES; - [webView loadData:responseData - MIMEType:response.MIMEType - textEncodingName:response.textEncodingName - baseURL:response.URL]; + 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]; }]; @@ -227,15 +241,20 @@ static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_f return al; } -- (NSDictionary *)getALDataFromLoadedPage:(UIWebView *)webView { - // Run some JavaScript in the webview to fetch the meta tags. - NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:FBSDKWebViewAppLinkResolverTagExtractionJavaScript]; - NSError *error = nil; - NSArray *> *arr = - [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] - options:0 - error:&error]; - return [self parseALData:arr]; +- (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]); + }]; } /* @@ -302,3 +321,5 @@ static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_f } @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 new file mode 100644 index 0000000000..1695690343 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.h @@ -0,0 +1,37 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/FBSDKBoltsMeasurementEventListener.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m similarity index 69% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m index 718e23b097..00710d1d4a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m @@ -16,37 +16,41 @@ // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -#import "FBSDKBoltsMeasurementEventListener.h" +#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 BoltsMeasurementEventNotification = @"com.parse.bolts.measurement_event"; +static NSNotificationName const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; #else -static NSString *const BoltsMeasurementEventNotification = @"com.parse.bolts.measurement_event"; +static NSString *const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; #endif -static NSString *const BoltsMeasurementEventName = @"event_name"; -static NSString *const BoltsMeasurementEventArgs = @"event_args"; -static NSString *const BoltsMeasurementEventPrefix = @"bf_"; +static NSString *const FBSDKMeasurementEventName = @"event_name"; +static NSString *const FBSDKMeasurementEventArgs = @"event_args"; +static NSString *const FBSDKMeasurementEventPrefix = @"bf_"; -@implementation FBSDKBoltsMeasurementEventListener +@implementation FBSDKMeasurementEventListener + (instancetype)defaultListener { static dispatch_once_t dispatchOnceLocker = 0; - static FBSDKBoltsMeasurementEventListener *defaultListener = nil; + static FBSDKMeasurementEventListener *defaultListener = nil; dispatch_once(&dispatchOnceLocker, ^{ defaultListener = [[self alloc] init]; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:defaultListener selector:@selector(logFBAppEventForNotification:) - name:BoltsMeasurementEventNotification + name:FBSDKMeasurementEventNotification object:nil]; }); return defaultListener; @@ -55,15 +59,15 @@ static NSString *const BoltsMeasurementEventPrefix = @"bf_"; - (void)logFBAppEventForNotification:(NSNotification *)note { // when catch al_nav_in event, we set source application for FBAppEvents. - if ([note.userInfo[BoltsMeasurementEventName] isEqualToString:@"al_nav_in"]) { - NSString *sourceApplication = note.userInfo[BoltsMeasurementEventArgs][@"sourceApplication"]; + 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[BoltsMeasurementEventArgs]; - NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; - for(NSString *key in eventArgs.allKeys) { + 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 @@ -73,10 +77,9 @@ static NSString *const BoltsMeasurementEventPrefix = @"bf_"; safeKey = [safeKey stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" -"]]; logData[safeKey] = eventArgs[key]; } - [FBSDKAppEvents logImplicitEvent:[BoltsMeasurementEventPrefix stringByAppendingString:note.userInfo[BoltsMeasurementEventName]] - valueToSum:nil + [FBSDKAppEvents logInternalEvent:[FBSDKMeasurementEventPrefix stringByAppendingString:note.userInfo[FBSDKMeasurementEventName]] parameters:logData - accessToken:nil]; + isImplicitlyLogged:YES]; } - (void)dealloc @@ -85,3 +88,5 @@ static NSString *const BoltsMeasurementEventPrefix = @"bf_"; } @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 new file mode 100644 index 0000000000..169abe398e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.h @@ -0,0 +1,35 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..21659bf1d6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.m @@ -0,0 +1,332 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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.0" +#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]; + NSDictionary *methodMapping = [self loadLibData:crashLog]; + 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++) { + NSDictionary *crashLog = [self loadCrashLog:fileNames[i]]; + if (crashLog) { + [crashLogArray addObject:crashLog]; + } + } + return [crashLogArray copy]; +} + ++ (nullable NSDictionary *)loadCrashLog:(NSString *)fileName +{ + return [NSDictionary dictionaryWithContentsOfFile:[directoryPath stringByAppendingPathComponent:fileName]]; +} + ++ (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]; + + [completeCrashLog 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){ + [methodMapping writeToFile:[self getPathToLibDataFile:mappingTableIdentifier] + atomically:YES]; + } +} + ++ (NSDictionary *)loadLibData:(NSDictionary *)crashLog +{ + NSString *identifier = [crashLog objectForKey:kFBSDKMappingTableIdentifier]; + return [NSDictionary dictionaryWithContentsOfFile:[self getPathToLibDataFile:identifier]]; +} + ++ (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 new file mode 100644 index 0000000000..070416cabf --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h @@ -0,0 +1,34 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..e6873adef1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.h @@ -0,0 +1,32 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..5998a6011c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.m @@ -0,0 +1,223 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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]; + } + } + 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) { + [_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 new file mode 100644 index 0000000000..078d3f7335 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.h @@ -0,0 +1,135 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..522b17513a --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.m @@ -0,0 +1,341 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/Internal/FBSDKTypeUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h similarity index 98% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h index 425b8556a2..6e36ed06d0 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(TypeUtility) @interface FBSDKTypeUtility : NSObject - (instancetype)init NS_UNAVAILABLE; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m similarity index 98% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m index fd6c7337f2..baf61c31f2 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m @@ -105,7 +105,7 @@ if ([object isKindOfClass:[NSURL class]]) { return (NSURL *)object; } else if ([object isKindOfClass:[NSString class]]) { - return [[NSURL alloc] initWithString:(NSString *)object]; + return [NSURL URLWithString:(NSString *)object]; } else { return nil; } diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h new file mode 100644 index 0000000000..34707dc4e1 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h @@ -0,0 +1,45 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..cde4f151ab --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.m @@ -0,0 +1,71 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/Internal/Network/FBSDKURLSessionTask.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h similarity index 66% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h index d0f35f762a..252d8b46c5 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h @@ -18,21 +18,28 @@ #import -typedef void (^FBSDKURLSessionTaskHandler)(NSError *error, - NSURLResponse *response, - NSData *responseData); +typedef void (^FBSDKURLSessionTaskBlock)(NSData *responseData, + NSURLResponse *response, + NSError *error) +NS_SWIFT_NAME(URLSessionTaskBlock); +NS_SWIFT_NAME(URLSessionTask) @interface FBSDKURLSessionTask : NSObject -- (instancetype)init NS_UNAVAILABLE; +@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:(FBSDKURLSessionTaskHandler)handler -NS_DESIGNATED_INITIALIZER; + completionHandler:(FBSDKURLSessionTaskBlock)handler; -- (void)cancel; - (void)start; +- (void)cancel; @end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m similarity index 58% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m index 4f1125832d..35f404adb8 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m @@ -16,25 +16,45 @@ // IN AN ACTION OF 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 "FBSDKURLSessionTask.h" -@interface FBSDKViewHierarchy : NSObject +@implementation FBSDKURLSessionTask -+ (NSObject *)getParent:(NSObject *)obj; -+ (NSArray *)getChildren:(NSObject *)obj; -+ (NSArray *)getPath:(NSObject *)obj; -+ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj; +- (instancetype)init +{ + if ((self = [super init])) { + _requestStartDate = [NSDate date]; + } + return self; +} -+ (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; +- (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; +} -+ (BOOL)isUserInputView:(NSObject *)obj; +- (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 index ff73de5d64..ca7156ec01 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h @@ -18,8 +18,15 @@ #import -#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 @@ -30,19 +37,20 @@ `FBSDKAccessTokenChangeOldKey` and `FBSDKAccessTokenChangeNewKey`. */ -FOUNDATION_EXPORT NSNotificationName const FBSDKAccessTokenDidChangeNotification; +FOUNDATION_EXPORT NSNotificationName const FBSDKAccessTokenDidChangeNotification +NS_SWIFT_NAME(AccessTokenDidChange); #else /** - Notification indicating that the `currentAccessToken` has changed. + Notification indicating that the `currentAccessToken` has changed. the userInfo dictionary of the notification will contain keys `FBSDKAccessTokenChangeOldKey` and `FBSDKAccessTokenChangeNewKey`. */ -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeNotification; - +FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeNotification +NS_SWIFT_NAME(AccessTokenDidChangeNotification); #endif /** @@ -58,89 +66,111 @@ FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeNotification; 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; - -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeUserID -DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidChangeUserIDKey`"); +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; +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; +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; - -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpire -DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidExpireKey`"); +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 (readonly, copy, nonatomic) NSString *appID; +@property (nonatomic, copy, readonly) NSString *appID; /** Returns the expiration date for data access */ -@property (readonly, copy, nonatomic) NSDate *dataAccessExpirationDate; +@property (nonatomic, copy, readonly) NSDate *dataAccessExpirationDate; /** Returns the known declined permissions. */ -@property (readonly, copy, nonatomic) NSSet *declinedPermissions; +@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 (readonly, copy, nonatomic) NSDate *expirationDate; +@property (nonatomic, copy, readonly) NSDate *expirationDate; /** Returns the known granted permissions. */ -@property (readonly, copy, nonatomic) NSSet *permissions; +@property (nonatomic, copy, readonly) NSSet *permissions +NS_REFINED_FOR_SWIFT; /** Returns the date the token was last refreshed. */ -@property (readonly, copy, nonatomic) NSDate *refreshDate; +@property (nonatomic, copy, readonly) NSDate *refreshDate; /** Returns the opaque token string. */ -@property (readonly, copy, nonatomic) NSString *tokenString; +@property (nonatomic, copy, readonly) NSString *tokenString; /** Returns the user ID. */ -@property (readonly, copy, nonatomic) NSString *userID; +@property (nonatomic, copy, readonly) NSString *userID; /** Returns whether the access token is expired by checking its expirationDate property */ -@property (readonly, assign, nonatomic, getter = isExpired) BOOL expired; +@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; +@property (readonly, assign, nonatomic, getter=isDataAccessExpired) BOOL dataAccessExpired; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; @@ -152,29 +182,7 @@ DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidExpireKey`"); 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 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). - - 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 - appID:(NSString *)appID - userID:(NSString *)userID - expirationDate:(NSDate *)expirationDate - refreshDate:(NSDate *)refreshDate; - -/** - 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 + @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. @@ -188,20 +196,22 @@ DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidExpireKey`"); along with `+currentAccessToken`. */ - (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions + permissions:(NSArray *)permissions + declinedPermissions:(NSArray *)declinedPermissions + expiredPermissions:(NSArray *)expiredPermissions appID:(NSString *)appID userID:(NSString *)userID - expirationDate:(NSDate *)expirationDate - refreshDate:(NSDate *)refreshDate - dataAccessExpirationDate:(NSDate *)dataAccessExpirationDate + expirationDate:(nullable NSDate *)expirationDate + refreshDate:(nullable NSDate *)refreshDate + dataAccessExpirationDate:(nullable NSDate *)dataAccessExpirationDate NS_DESIGNATED_INITIALIZER; /** Convenience getter to determine if a permission has been granted @param permission The permission to check. */ -- (BOOL)hasGranted:(NSString *)permission; +- (BOOL)hasGranted:(NSString *)permission +NS_SWIFT_NAME(hasGranted(permission:)); /** Compares the receiver to another FBSDKAccessToken @@ -210,28 +220,6 @@ NS_DESIGNATED_INITIALIZER; */ - (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token; -/** - Returns 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`). - */ -+ (FBSDKAccessToken *)currentAccessToken; - -/** - Returns YES if currentAccessToken is not nil AND currentAccessToken is not expired - - */ -+ (BOOL)currentAccessTokenIsActive; - -/** - Sets the "global" access token that represents the currently logged in user. - @param token The access token to set. - - This will broadcast a notification and save the token to the app keychain. - */ -+ (void)setCurrentAccessToken:(FBSDKAccessToken *)token; - /** Refresh the current access token's permission state and extend the token's expiration date, if possible. @@ -242,6 +230,8 @@ NS_DESIGNATED_INITIALIZER; If a token is already expired, it cannot be refreshed. */ -+ (void)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler; ++ (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 index f26a9e2f45..71d215af71 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m @@ -33,18 +33,17 @@ NSString *const FBSDKAccessTokenDidChangeNotification = @"com.facebook.sdk.FBSDK #endif -NSString *const FBSDKAccessTokenDidChangeUserIDKey = @"FBSDKAccessTokenDidChangeUserID"; -NSString *const FBSDKAccessTokenDidChangeUserID = @"FBSDKAccessTokenDidChangeUserID"; +NSString *const FBSDKAccessTokenDidChangeUserIDKey = @"FBSDKAccessTokenDidChangeUserIDKey"; NSString *const FBSDKAccessTokenChangeNewKey = @"FBSDKAccessToken"; NSString *const FBSDKAccessTokenChangeOldKey = @"FBSDKAccessTokenOld"; -NSString *const FBSDKAccessTokenDidExpireKey = @"FBSDKAccessTokenDidExpire"; -NSString *const FBSDKAccessTokenDidExpire = @"FBSDKAccessTokenDidExpire"; +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" @@ -57,41 +56,25 @@ static FBSDKAccessToken *g_currentAccessToken; - (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 { - return [self initWithTokenString:tokenString - permissions:permissions - declinedPermissions:declinedPermissions - appID:appID - userID:userID - expirationDate:expirationDate - refreshDate:refreshDate - dataAccessExpirationDate:[NSDate distantFuture]]; -} - -- (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions - 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]; - _appID = [appID copy]; - _userID = [userID copy]; - _expirationDate = [expirationDate copy] ?: [NSDate distantFuture]; - _refreshDate = [refreshDate copy] ?: [NSDate date]; - _dataAccessExpirationDate = [dataAccessExpirationDate copy] ?: [NSDate distantFuture]; - } - return self; + 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; } - (BOOL)hasGranted:(NSString *)permission @@ -119,10 +102,10 @@ static FBSDKAccessToken *g_currentAccessToken; { if (token != g_currentAccessToken) { NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKInternalUtility dictionary:userInfo setObject:token forKey:FBSDKAccessTokenChangeNewKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:g_currentAccessToken forKey:FBSDKAccessTokenChangeOldKey]; + [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 currentAccessTokenIsActive]) { + if (![g_currentAccessToken.userID isEqualToString:token.userID] || !self.isCurrentAccessTokenActive) { userInfo[FBSDKAccessTokenDidChangeUserIDKey] = @YES; } @@ -141,22 +124,22 @@ static FBSDKAccessToken *g_currentAccessToken; } } -+ (BOOL)currentAccessTokenIsActive ++ (BOOL)isCurrentAccessTokenActive { FBSDKAccessToken *currentAccessToken = [self currentAccessToken]; return currentAccessToken != nil && !currentAccessToken.isExpired; } -+ (void)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler ++ (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, [NSError fbErrorWithCode:FBSDKErrorAccessTokenRequired message:@"No current access token to refresh"]); - } + } else if (completionHandler) { + completionHandler(nil, nil, [FBSDKError + errorWithCode:FBSDKErrorAccessTokenRequired + message:@"No current access token to refresh"]); } } @@ -168,6 +151,7 @@ static FBSDKAccessToken *g_currentAccessToken; self.tokenString.hash, self.permissions.hash, self.declinedPermissions.hash, + self.expiredPermissions.hash, self.appID.hash, self.userID.hash, self.refreshDate.hash, @@ -194,6 +178,7 @@ static FBSDKAccessToken *g_currentAccessToken; [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] && @@ -220,6 +205,7 @@ static FBSDKAccessToken *g_currentAccessToken; { 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]; @@ -230,6 +216,7 @@ static FBSDKAccessToken *g_currentAccessToken; return [self initWithTokenString:tokenString permissions:permissions.allObjects declinedPermissions:declinedPermissions.allObjects + expiredPermissions:expiredPermissions.allObjects appID:appID userID:userID expirationDate:expirationDate @@ -241,6 +228,7 @@ static FBSDKAccessToken *g_currentAccessToken; { [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]; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h index c1eca10f70..f09048014e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h @@ -18,6 +18,8 @@ #import +NS_ASSUME_NONNULL_BEGIN + /** The FBSDKApplicationDelegate is designed to post process the results from Facebook Login @@ -29,12 +31,17 @@ 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. + Gets the singleton instance. */ -+ (instancetype)sharedInstance; +@property (class, nonatomic, readonly, strong) FBSDKApplicationDelegate *sharedInstance +NS_SWIFT_NAME(shared); /** Call this method from the [UIApplicationDelegate application:openURL:sourceApplication:annotation:] method @@ -53,8 +60,8 @@ */ - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; + sourceApplication:(nullable NSString *)sourceApplication + annotation:(nullable id)annotation; #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0 /** @@ -72,7 +79,7 @@ */ - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url - options:(NSDictionary *)options; + options:(NSDictionary *)options; #endif /** @@ -87,6 +94,19 @@ controlled via 'FacebookAutoLogAppEventsEnabled' key in the project info plist f @return YES if the url was intended for the Facebook SDK, NO if not. */ -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; +- (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 index aa6ed583fe..3e00da67dc 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m @@ -25,17 +25,19 @@ #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" -#import "FBSDKUtility.h" #if !TARGET_OS_TV -#import "FBSDKBoltsMeasurementEventListener.h" +#import "FBSDKMeasurementEventListener.h" #import "FBSDKContainerViewController.h" #import "FBSDKProfile+Internal.h" #endif @@ -51,6 +53,9 @@ NSString *const FBSDKApplicationDidBecomeActiveNotification = @"com.facebook.sdk #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 { @@ -62,66 +67,97 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; + (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 { - NSDictionary *launchData = note.userInfo; - - [[self sharedInstance] application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:launchData]; - -#if !TARGET_OS_TV - // Register Listener for Bolts measurement events - [FBSDKBoltsMeasurementEventListener defaultListener]; -#endif - // Set the SourceApplication for time spent data. This is not going to update the value if the app has already launched. - [FBSDKTimeSpentData setSourceApplication:launchData[UIApplicationLaunchOptionsSourceApplicationKey] - openURL:launchData[UIApplicationLaunchOptionsURLKey]]; - // Register on UIApplicationDidEnterBackgroundNotification events to reset source application data when app backgrounds. - [FBSDKTimeSpentData registerAutoResetSourceApplication]; - - [FBSDKInternalUtility validateFacebookReservedURLSchemes]; - // Remove the observer - [[NSNotificationCenter defaultCenter] removeObserver:self]; + [self initializeSDK:note.userInfo]; + // Remove the observer + [[NSNotificationCenter defaultCenter] removeObserver:self + name:UIApplicationDidFinishLaunchingNotification + object:nil]; } -+ (instancetype)sharedInstance ++ (void)initializeSDK:(NSDictionary *)launchOptions { - static FBSDKApplicationDelegate *_sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _sharedInstance = [[self alloc] _init]; - }); - return _sharedInstance; + 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 +- (instancetype)init { if ((self = [super init]) != nil) { - NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; - [defaultCenter addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [defaultCenter addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; - - [[FBSDKAppEvents singleton] registerNotifications]; _applicationObservers = [[NSHashTable alloc] init]; } return self; } -- (instancetype)init -{ - return nil; -} - - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; @@ -190,10 +226,8 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; [FBSDKAccessToken setCurrentAccessToken:cachedToken]; // fetch app settings [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:NULL]; - // fetch gate keepers - [FBSDKGateKeeperManager loadGateKeepers]; - if ([FBSDKSettings autoLogAppEventsEnabled].boolValue) { + if (FBSDKSettings.isAutoLogAppEventsEnabled) { [self _logSDKInitialize]; } #if !TARGET_OS_TV @@ -215,6 +249,7 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; - (void)applicationDidEnterBackground:(NSNotification *)notification { + _applicationState = UIApplicationStateBackground; NSArray> *observers = [_applicationObservers allObjects]; for (id observer in observers) { if ([observer respondsToSelector:@selector(applicationDidEnterBackground:)]) { @@ -225,8 +260,9 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; - (void)applicationDidBecomeActive:(NSNotification *)notification { + _applicationState = UIApplicationStateActive; // Auto log basic events in case autoLogAppEventsEnabled is set - if ([[FBSDKSettings autoLogAppEventsEnabled] boolValue]) { + if (FBSDKSettings.isAutoLogAppEventsEnabled) { [FBSDKAppEvents activateApp]; } @@ -240,6 +276,8 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; #pragma mark - Internal Methods +#pragma mark - FBSDKApplicationObserving + - (void)addObserver:(id)observer { if (![_applicationObservers containsObject:observer]) { @@ -254,72 +292,132 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; } } ++ (UIApplicationState)applicationState +{ + return _applicationState; +} + #pragma mark - Helper Methods - (void)_logIfAppLinkEvent:(NSURL *)url { - if (!url) { - return; - } - NSDictionary *params = [FBSDKUtility dictionaryWithQueryString:url.query]; - NSString *applinkDataString = params[@"al_applink_data"]; - if (!applinkDataString) { - return; - } + if (!url) { + return; + } + NSDictionary *params = [FBSDKBasicUtility dictionaryWithQueryString:url.query]; + NSString *applinkDataString = params[@"al_applink_data"]; + if (!applinkDataString) { + return; + } - NSDictionary *applinkData = [FBSDKInternalUtility objectForJSONString:applinkDataString error:NULL]; - if (!applinkData) { - 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; + NSString *targetURLString = applinkData[@"target_url"]; + NSURL *targetURL = [targetURLString isKindOfClass:[NSString class]] ? [NSURL URLWithString:targetURLString] : nil; - NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; - [FBSDKInternalUtility dictionary:logData setObject:targetURL.absoluteString forKey:@"targetURL"]; - [FBSDKInternalUtility dictionary:logData setObject:targetURL.host forKey:@"targetURLHost"]; + 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) { - [FBSDKInternalUtility dictionary:logData setObject:refererData[@"target_url"] forKey:@"referralTargetURL"]; - [FBSDKInternalUtility dictionary:logData setObject:refererData[@"url"] forKey:@"referralURL"]; - [FBSDKInternalUtility dictionary:logData setObject:refererData[@"app_name"] forKey:@"referralAppName"]; - } - [FBSDKInternalUtility dictionary:logData setObject:url.absoluteString forKey:@"inputURL"]; - [FBSDKInternalUtility dictionary:logData setObject:url.scheme forKey:@"inputURLScheme"]; + 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 logImplicitEvent:FBSDKAppLinkInboundEvent - valueToSum:nil - parameters:logData - accessToken:nil]; + [FBSDKAppEvents logInternalEvent:FBSDKAppLinkInboundEvent + parameters:logData + isImplicitlyLogged:YES]; } - (void)_logSDKInitialize { - NSMutableDictionary *params = [NSMutableDictionary new]; - params[@"core_lib_included"] = @1; - if (objc_lookUpClass("FBSDKShareDialog") != nil) { - params[@"share_lib_included"] = @1; + 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; } - if (objc_lookUpClass("FBSDKLoginManager") != nil) { - params[@"login_lib_included"] = @1; + 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 (objc_lookUpClass("FBSDKPlacesManager") != nil) { - params[@"places_lib_included"] = @1; + }; + + 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); } - if (objc_lookUpClass("FBSDKMessengerButton") != nil) { - params[@"messenger_lib_included"] = @1; - } - if (objc_lookUpClass("FBSDKMessengerButton") != nil) { - params[@"messenger_lib_included"] = @1; - } - if (objc_lookUpClass("FBSDKTVInterfaceFactory.m") != nil) { - params[@"tv_lib_included"] = @1; - } - if (objc_lookUpClass("FBSDKAutoLog") != nil) { - params[@"marketing_lib_included"] = @1; - } - [FBSDKAppEvents logEvent:@"fb_sdk_initialize" parameters:params]; + [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 diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h index ca539660c4..bf5f0047ad 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h @@ -18,9 +18,14 @@ #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 index 834f9e5459..10b073f60f 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m @@ -24,7 +24,6 @@ #import "FBSDKAppEvents.h" #import "FBSDKApplicationDelegate+Internal.h" #import "FBSDKLogo.h" -#import "FBSDKMath.h" #import "FBSDKUIUtility.h" #import "FBSDKViewImpressionTracker.h" @@ -166,10 +165,10 @@ - (void)logTapEventWithEventName:(NSString *)eventName parameters:(NSDictionary *)parameters { - [FBSDKAppEvents logImplicitEvent:eventName - valueToSum:nil - parameters:parameters - accessToken:[FBSDKAccessToken currentAccessToken]]; + [FBSDKAppEvents logInternalEvent:eventName + parameters:parameters + isImplicitlyLogged:YES + accessToken:[FBSDKAccessToken currentAccessToken]]; } - (void)checkImplicitlyDisabled @@ -227,7 +226,7 @@ - (UIColor *)defaultBackgroundColor { - return [UIColor colorWithRed:65.0/255.0 green:93.0/255.0 blue:174.0/255.0 alpha:1.0]; + return [UIColor colorWithRed:24.0/255.0 green:119.0/255.0 blue:242.0/255.0 alpha:1.0]; } - (UIColor *)defaultDisabledColor @@ -242,7 +241,7 @@ - (UIColor *)defaultHighlightedColor { - return [UIColor colorWithRed:47.0/255.0 green:71.0/255.0 blue:122.0/255.0 alpha:1.0]; + return [UIColor colorWithRed:21.0/255.0 green:105.0/255.0 blue:214.0/255.0 alpha:1.0]; } - (FBSDKIcon *)defaultIcon @@ -252,7 +251,12 @@ - (UIColor *)defaultSelectedColor { - return [UIColor colorWithRed:124.0/255.0 green:143.0/255.0 blue:200.0/255.0 alpha:1.0]; + 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 @@ -327,6 +331,9 @@ if (!icon) { icon = [self defaultIcon]; } + if (!selectedIcon) { + selectedIcon = [self defaultIcon]; + } if (!backgroundColor) { backgroundColor = [self defaultBackgroundColor]; } @@ -377,6 +384,7 @@ } [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [self setTitleColor:[self highlightedContentColor] forState: UIControlStateHighlighted | UIControlStateSelected]; [self setTitle:title forState:UIControlStateNormal]; #if TARGET_OS_TV diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h index 098621e4c0..6915368acd 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h @@ -18,6 +18,8 @@ #import +NS_ASSUME_NONNULL_BEGIN + #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 /** @@ -25,7 +27,8 @@ Error codes from the SDK in the range 0-99 are reserved for this domain. */ -FOUNDATION_EXPORT NSErrorDomain const FBSDKErrorDomain; +FOUNDATION_EXPORT NSErrorDomain const FBSDKErrorDomain +NS_SWIFT_NAME(ErrorDomain); #else @@ -34,7 +37,8 @@ FOUNDATION_EXPORT NSErrorDomain const FBSDKErrorDomain; Error codes from the SDK in the range 0-99 are reserved for this domain. */ -FOUNDATION_EXPORT NSString *const FBSDKErrorDomain; +FOUNDATION_EXPORT NSString *const FBSDKErrorDomain +NS_SWIFT_NAME(ErrorDomain); #endif @@ -50,34 +54,40 @@ FOUNDATION_EXPORT NSString *const FBSDKErrorDomain; 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; +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; +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; +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; +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; +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; +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey +NS_SWIFT_NAME(ErrorLocalizedTitleKey); /* @methodgroup FBSDKGraphRequest error userInfo keys @@ -88,36 +98,32 @@ FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey; See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorKey; - -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorCategoryKey -DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorKey instead"); +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorKey +NS_SWIFT_NAME(GraphRequestErrorKey); /* The userInfo key for the Graph API error code. */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey; - -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCode -DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorCodeKey instead"); +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey +NS_SWIFT_NAME(GraphRequestErrorGraphErrorCodeKey); /* The userInfo key for the Graph API error subcode. */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey; - -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcode -DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorSubcodeKey instead"); +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey +NS_SWIFT_NAME(GraphRequestErrorGraphErrorSubcodeKey); /* The userInfo key for the HTTP status code. */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorHTTPStatusCodeKey; +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorHTTPStatusCodeKey +NS_SWIFT_NAME(GraphRequestErrorHTTPStatusCodeKey); /* The userInfo key for the raw JSON response. */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONResponseKey; +FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONResponseKey +NS_SWIFT_NAME(GraphRequestErrorParsedJSONResponseKey); #else @@ -131,34 +137,40 @@ FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONRespo 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; +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; +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; +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; +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; +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; +FOUNDATION_EXPORT NSString *const FBSDKErrorLocalizedTitleKey +NS_SWIFT_NAME(ErrorLocalizedTitleKey); /* @methodgroup FBSDKGraphRequest error userInfo keys @@ -169,36 +181,32 @@ FOUNDATION_EXPORT NSString *const FBSDKErrorLocalizedTitleKey; See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorKey; - -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorCategoryKey -DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorKey instead"); +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorKey +NS_SWIFT_NAME(GraphRequestErrorKey); /* The userInfo key for the Graph API error code. */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey; - -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorCode -DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorCodeKey instead"); +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey +NS_SWIFT_NAME(GraphRequestErrorGraphErrorCodeKey); /* The userInfo key for the Graph API error subcode. */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey; - -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorSubcode -DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorGraphErrorSubcodeKey instead"); +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey +NS_SWIFT_NAME(GraphRequestErrorGraphErrorSubcodeKey); /* The userInfo key for the HTTP status code. */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey; +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey +NS_SWIFT_NAME(GraphRequestErrorHTTPStatusCodeKey); /* The userInfo key for the raw JSON response. */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey; +FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey +NS_SWIFT_NAME(GraphRequestErrorParsedJSONResponseKey); #endif @@ -224,6 +232,10 @@ NS_SWIFT_NAME(ErrorBlock); 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; \ @@ -231,10 +243,10 @@ enum __attribute__((ns_error_domain(_domain))) _name: NSInteger #endif /** - FBSDKError + FBSDKCoreError Error codes for FBSDKErrorDomain. */ -typedef NS_ERROR_ENUM(FBSDKErrorDomain, FBSDKError) +typedef NS_ERROR_ENUM(FBSDKErrorDomain, FBSDKCoreError) { /** Reserved. @@ -311,7 +323,7 @@ typedef NS_ERROR_ENUM(FBSDKErrorDomain, FBSDKError) Indicates an app switch to the browser (typically for a dialog) failed. */ FBSDKErrorBrowserUnavailable, -}; +} NS_SWIFT_NAME(CoreError); /** FBSDKGraphRequestError @@ -325,11 +337,12 @@ typedef NS_ENUM(NSUInteger, FBSDKGraphRequestError) 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 /** @@ -347,37 +360,11 @@ typedef NS_ENUM(NSUInteger, FBSDKGraphRequestError) The value passed for didRecover must be YES if error recovery was completely successful, NO otherwise. */ -- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo; - +- (void)attemptRecoveryFromError:(NSError *)error + optionIndex:(NSUInteger)recoveryOptionIndex + delegate:(nullable id)delegate + didRecoverSelector:(SEL)didRecoverSelector + contextInfo:(nullable void *)contextInfo; @end -/** - Deprecated - */ -typedef NS_ENUM(NSInteger, FBSDKErrorCode) -{ - FBSDKReservedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorReserved instead") = 0, - FBSDKEncryptionErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorEncryption instead"), - FBSDKInvalidArgumentErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorInvalidArgument instead"), - FBSDKUnknownErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorUnknown instead"), - FBSDKNetworkErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorNetwork instead"), - FBSDKAppEventsFlushErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorAppEventsFlush instead"), - FBSDKGraphRequestNonTextMimeTypeReturnedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorGraphRequestNonTextMimeTypeReturned instead"), - FBSDKGraphRequestProtocolMismatchErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorGraphRequestProtocolMismatch instead"), - FBSDKGraphRequestGraphAPIErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorGraphRequestGraphAPI instead"), - FBSDKDialogUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorDialogUnavailable instead"), - FBSDKAccessTokenRequiredErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorAccessTokenRequired instead"), - FBSDKAppVersionUnsupportedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorAppVersionUnsupported instead"), - FBSDKBrowserUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorBrowserUnavailable instead"), - FBSDKBrowswerUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKErrorBrowserUnavailable instead") = FBSDKBrowserUnavailableErrorCode, -} DEPRECATED_MSG_ATTRIBUTE("use FBSDKError instead"); - -/** - Deprecated - */ -typedef NS_ENUM(NSUInteger, FBSDKGraphRequestErrorCategory) -{ - FBSDKGraphRequestErrorCategoryOther DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorOther instead") = 0, - FBSDKGraphRequestErrorCategoryTransient DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorTransient instead") = 1, - FBSDKGraphRequestErrorCategoryRecoverable DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestErrorRecoverable instead") = 2 -} DEPRECATED_MSG_ATTRIBUTE("use FBSDKGraphRequestError instead"); +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m index 24f9d57e99..756a122d7c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m @@ -38,12 +38,10 @@ NSErrorUserInfoKey const FBSDKErrorDeveloperMessageKey = @"com.facebook.sdk:FBSD NSErrorUserInfoKey const FBSDKErrorLocalizedDescriptionKey = @"com.facebook.sdk:FBSDKErrorLocalizedDescriptionKey"; NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey = @"com.facebook.sdk:FBSDKErrorLocalizedErrorTitleKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; +NSErrorUserInfoKey const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorKey"; NSErrorUserInfoKey const FBSDKGraphRequestErrorCategoryKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; +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"; @@ -58,10 +56,8 @@ NSString *const FBSDKErrorLocalizedTitleKey = @"com.facebook.sdk:FBSDKErrorLocal NSString *const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; NSString *const FBSDKGraphRequestErrorCategoryKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; -NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; -NSString *const FBSDKGraphRequestErrorGraphErrorCode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode"; -NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; -NSString *const FBSDKGraphRequestErrorGraphErrorSubcode = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcode"; +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"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h index 039302bcc5..fc938bbd29 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h @@ -18,11 +18,14 @@ #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 /** @@ -32,3 +35,5 @@ - (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 index 1c3a99f0ad..18e5a9818c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h @@ -18,6 +18,8 @@ #import +#ifdef BUCK + #import #import #import @@ -27,7 +29,6 @@ #import #import #import -#import #import #import #import @@ -53,5 +54,43 @@ #import #endif -#define FBSDK_VERSION_STRING @"4.42.0" -#define FBSDK_TARGET_PLATFORM_VERSION @"v3.2" +#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.0" +#define FBSDK_TARGET_PLATFORM_VERSION @"v5.0" diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h deleted file mode 100644 index d749579352..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright notice shall be -// included in all copies or substantial portions of the software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -#import diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h index 3798330988..7bd2da92b5 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h @@ -16,54 +16,66 @@ // IN AN ACTION OF 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; +/** 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; +/** The name of the notification posted by FBSDKMeasurementEvent */ +FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNotification +NS_SWIFT_NAME(MeasurementEventNotification); #endif -FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNotificationName -DEPRECATED_MSG_ATTRIBUTE("Use `FBSDKMeasurementEventNotification` instead"); +/** 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); -/*! 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; -/*! The dictionary field for the arguments of the event */ -FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventArgsKey; - -/*! Events raised by FBSDKMeasurementEvent for Applink */ -/*! +/** 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; +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; +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; +/** 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; +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 index ef96d3ec56..e678777dd6 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m @@ -16,8 +16,15 @@ // IN AN ACTION OF 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"; @@ -33,11 +40,11 @@ NSString *const FBSDKMeasurementEventNotificationName = @"com.facebook.facebook- NSString *const FBSDKMeasurementEventNameKey = @"event_name"; NSString *const FBSDKMeasurementEventArgsKey = @"event_args"; -/* app Link Event raised by this FBSDKURL */ +/** 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 */ +/** AppLink events raised in this class */ NSString *const FBSDKAppLinkNavigateOutEventName = @"al_nav_out"; NSString *const FBSDKAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out"; @@ -48,8 +55,9 @@ NSString *const FBSDKAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out" - (void)postNotification { if (!_name) { - NSLog(@"Warning: Missing event name when logging FBSDK measurement event. \n" - " Ignoring this event in logging."); + [FBSDKLogger + singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors + logEntry:@"Warning: Missing event name when logging FBSDK measurement event.\nIgnoring this event in logging."]; return; } NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; @@ -76,3 +84,5 @@ NSString *const FBSDKAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out" } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h index 3fada941d2..7efaeeb4b1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h @@ -16,15 +16,22 @@ // IN AN ACTION OF 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 +#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 /** @@ -34,3 +41,7 @@ - (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 index d0e245bb47..d1b1551599 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h @@ -16,8 +16,16 @@ // IN AN ACTION OF 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 /** @@ -27,18 +35,20 @@ `FBSDKProfileChangeOldKey` and `FBSDKProfileChangeNewKey`. */ -FOUNDATION_EXPORT NSNotificationName const FBSDKProfileDidChangeNotification; +FOUNDATION_EXPORT NSNotificationName const FBSDKProfileDidChangeNotification +NS_SWIFT_NAME(ProfileDidChange); #else /** - Notification indicating that the `currentProfile` has changed. + Notification indicating that the `currentProfile` has changed. the userInfo dictionary of the notification will contain keys `FBSDKProfileChangeOldKey` and `FBSDKProfileChangeNewKey`. */ -FOUNDATION_EXPORT NSString *const FBSDKProfileDidChangeNotification; +FOUNDATION_EXPORT NSString *const FBSDKProfileDidChangeNotification +NS_SWIFT_NAME(ProfileDidChangeNotification); #endif @@ -46,13 +56,24 @@ FOUNDATION_EXPORT NSString *const FBSDKProfileDidChangeNotification; If there was no old profile, the key will not be present. */ -FOUNDATION_EXPORT NSString *const FBSDKProfileChangeOldKey; +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; +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 @@ -66,6 +87,7 @@ FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey; 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; @@ -82,12 +104,24 @@ FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey; @param refreshDate the optional date this profile was fetched. Defaults to [NSDate date]. */ - (instancetype)initWithUserID:(NSString *)userID - firstName:(NSString *)firstName - middleName:(NSString *)middleName - lastName:(NSString *)lastName - name:(NSString *)name - linkURL:(NSURL *)linkURL - refreshDate:(NSDate *)refreshDate NS_DESIGNATED_INITIALIZER; + 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 */ @@ -95,46 +129,32 @@ FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey; /** The user's first name */ -@property (nonatomic, copy, readonly) NSString *firstName; +@property (nonatomic, copy, readonly, nullable) NSString *firstName; /** The user's middle name */ -@property (nonatomic, copy, readonly) NSString *middleName; +@property (nonatomic, copy, readonly, nullable) NSString *middleName; /** The user's last name */ -@property (nonatomic, copy, readonly) NSString *lastName; +@property (nonatomic, copy, readonly, nullable) NSString *lastName; /** The user's complete name */ -@property (nonatomic, copy, readonly) NSString *name; +@property (nonatomic, copy, readonly, nullable) NSString *name; /** A URL to the user's profile. - Consider using Bolts and `FBSDKAppLinkResolver` to resolve this + 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) NSURL *linkURL; +@property (nonatomic, readonly, nullable) NSURL *linkURL; /** The last time the profile data was fetched. */ @property (nonatomic, readonly) NSDate *refreshDate; -/** - Gets the current FBSDKProfile instance. - */ -+ (FBSDKProfile *)currentProfile; - -/** - Sets the current instance and posts the appropriate notification if the profile parameter is different - than the receiver. - @param profile the profile to set - - This persists the profile to NSUserDefaults. - */ -+ (void)setCurrentProfile:(FBSDKProfile *)profile; - /** Indicates if `currentProfile` will automatically observe `FBSDKAccessTokenDidChangeNotification` notifications @param enable YES is observing @@ -145,7 +165,8 @@ FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey; 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; ++ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable +NS_SWIFT_NAME(enableUpdatesOnAccessTokenChange(_:)); /** Loads the current profile and passes it to the completion block. @@ -154,26 +175,15 @@ FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey; 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:(void(^)(FBSDKProfile *profile, NSError *error))completion; ++ (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. */ -- (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size; - -/** - A convenience method for returning a Graph API path for retrieving the user's profile image. - -@warning use `imageURLForPictureMode:size:` instead - - You can pass this to a `FBSDKGraphRequest` instance to download the image. - @param mode The picture mode - @param size The height and width. This will be rounded to integer precision. - */ -- (NSString *)imagePathForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size -DEPRECATED_MSG_ATTRIBUTE("use imageURLForPictureMode:size: instead"); +- (nullable NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size +NS_SWIFT_NAME(imageURL(forMode:size:)); /** Returns YES if the profile is equivalent to the receiver. @@ -181,3 +191,7 @@ DEPRECATED_MSG_ATTRIBUTE("use imageURLForPictureMode:size: instead"); */ - (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 index c785d1a314..b4fcd87e8c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -79,8 +83,8 @@ static FBSDKProfile *g_currentProfile; [[self class] cacheProfile:profile]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKInternalUtility dictionary:userInfo setObject:profile forKey:FBSDKProfileChangeNewKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:g_currentProfile forKey:FBSDKProfileChangeOldKey]; + [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] @@ -89,29 +93,23 @@ static FBSDKProfile *g_currentProfile; } - (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSString *path = [self imagePathForPictureMode:mode size:size]; -#pragma clang diagnostic pop - return [FBSDKInternalUtility facebookURLWithHostPrefix:@"graph" - path:path - queryParameters:nil - error:NULL]; -} - -- (NSString *)imagePathForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size { NSString *type; switch (mode) { case FBSDKProfilePictureModeNormal: type = @"normal"; break; case FBSDKProfilePictureModeSquare: type = @"square"; break; } - return [NSString stringWithFormat:@"%@/picture?type=%@&width=%d&height=%d", + + 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 @@ -126,7 +124,7 @@ static FBSDKProfile *g_currentProfile; } } -+ (void)loadCurrentProfileWithCompletion:(void (^)(FBSDKProfile *, NSError *))completion ++ (void)loadCurrentProfileWithCompletion:(FBSDKProfileBlock)completion { [self loadProfileWithToken:[FBSDKAccessToken currentAccessToken] completion:completion]; } @@ -214,7 +212,7 @@ static FBSDKProfile *g_currentProfile; #pragma mark - Private -+ (void)loadProfileWithToken:(FBSDKAccessToken *)token completion:(void (^)(FBSDKProfile *, NSError *))completion ++ (void)loadProfileWithToken:(FBSDKAccessToken *)token completion:(FBSDKProfileBlock)completion { static FBSDKGraphRequestConnection *executingRequestConnection = nil; @@ -266,7 +264,7 @@ static FBSDKProfile *g_currentProfile; @implementation FBSDKProfile(Internal) -+ (void)cacheProfile:(FBSDKProfile *) profile ++ (void)cacheProfile:(FBSDKProfile *)profile { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; if (profile) { @@ -293,3 +291,5 @@ static FBSDKProfile *g_currentProfile; } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h index aaf9bcaa78..c5a1672b0e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h @@ -16,8 +16,16 @@ // IN AN ACTION OF 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. @@ -32,13 +40,30 @@ typedef NS_ENUM(NSUInteger, FBSDKProfilePictureMode) 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. */ @@ -58,3 +83,7 @@ typedef NS_ENUM(NSUInteger, FBSDKProfilePictureMode) - (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 index 36e998e26c..c77339daee 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -127,6 +131,22 @@ 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]; @@ -205,40 +225,6 @@ #pragma mark - Helper Methods -+ (void)_downloadImageWithState:(FBSDKProfilePictureViewState *)state - completionBlock:(void(^)(NSData *data))completionBlock; -{ - NSURL *imageURL = [self _imageURLWithState:state]; - if (!imageURL) { - return; - } - - NSURLRequest *request = [[NSURLRequest alloc] initWithURL:imageURL]; - NSURLSession *session = [NSURLSession sharedSession]; - [[session - dataTaskWithRequest:request - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - if (!error && data.length) { - completionBlock(data); - } - }] resume]; -} - -+ (NSURL *)_imageURLWithState:(FBSDKProfilePictureViewState *)state -{ - FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken]; - if ([state.profileID isEqualToString:@"me"] && !accessToken) { - return nil; - } - 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); - [FBSDKInternalUtility dictionary:parameters setObject:accessToken.tokenString forKey:@"access_token"]; - return [FBSDKInternalUtility facebookURLWithHostPrefix:@"graph" path:path queryParameters:parameters error:NULL]; -} - - (void)_accessTokenDidChangeNotification:(NSNotification *)notification { if (![_profileID isEqualToString:@"me"] || !notification.userInfo[FBSDKAccessTokenDidChangeUserIDKey]) { @@ -340,10 +326,30 @@ } _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; - [[self class] _downloadImageWithState:state completionBlock:^(NSData *data) { - [weakSelf _updateImageWithData:data state:state]; - }]; + + 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 @@ -378,3 +384,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h index 4f79de54fc..a6f14644da 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h @@ -18,255 +18,196 @@ #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 NSString *const FBSDKLoggingBehaviorAccessTokens; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorAccessTokens; /** Log performance characteristics */ -FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorPerformanceCharacteristics; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorPerformanceCharacteristics; /** Log FBSDKAppEvents interactions */ -FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorAppEvents; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorAppEvents; /** Log Informational occurrences */ -FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorInformational; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorInformational; /** Log cache errors. */ -FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorCacheErrors; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorCacheErrors; /** Log errors from SDK UI controls */ -FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorUIControlErrors; +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 NSString *const FBSDKLoggingBehaviorGraphAPIDebugWarning; +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 NSString *const FBSDKLoggingBehaviorGraphAPIDebugInfo; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorGraphAPIDebugInfo; /** Log errors from SDK network requests */ -FOUNDATION_EXPORT NSString *const FBSDKLoggingBehaviorNetworkRequests; +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 NSString *const FBSDKLoggingBehaviorDeveloperErrors; +FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorDeveloperErrors; +NS_SWIFT_NAME(Settings) @interface FBSDKSettings : NSObject - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; /** - Get the Facebook App ID used by the SDK. - - If not explicitly set, the default will be read from the application's plist (FacebookAppID). + Retrieve the current iOS SDK version. */ -+ (NSString *)appID; +@property (class, nonatomic, copy, readonly) NSString *sdkVersion; /** - Set the Facebook App ID to be used by the SDK. - @param appID The Facebook App ID to be used by the SDK. + Retrieve the current default Graph API version. */ -+ (void)setAppID:(NSString *)appID; +@property (class, nonatomic, copy, readonly) NSString *defaultGraphAPIVersion; /** - Get the default url scheme suffix used for sessions. - - If not explicitly set, the default will be read from the application's plist (FacebookUrlSchemeSuffix). - */ -+ (NSString *)appURLSchemeSuffix; - -/** - Set the app url scheme suffix used by the SDK. - @param appURLSchemeSuffix The url scheme suffix to be used by the SDK. - */ -+ (void)setAppURLSchemeSuffix:(NSString *)appURLSchemeSuffix; - -/** - Retrieve the Client Token that has been set via [FBSDKSettings setClientToken]. - - If not explicitly set, the default will be read from the application's plist (FacebookClientToken). - */ -+ (NSString *)clientToken; - -/** - Sets the Client Token for the Facebook App. - - This is needed for certain API calls when made anonymously, without a user-based access token. - @param clientToken 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 - */ -+ (void)setClientToken:(NSString *)clientToken; - -/** - A convenient way to toggle error recovery for all FBSDKGraphRequest instances created after this is set. - @param disableGraphErrorRecovery YES or NO. - */ -+ (void)setGraphErrorRecoveryDisabled:(BOOL)disableGraphErrorRecovery; - -/** - Get the Facebook Display Name used by the SDK. - - If not explicitly set, the default will be read from the application's plist (FacebookDisplayName). - */ -+ (NSString *)displayName; - -/** - Set the default Facebook Display Name to be 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. - @param displayName The Facebook Display Name to be used by the SDK. - */ -+ (void)setDisplayName:(NSString *)displayName; - -/** - Get the Facebook domain part. - - If not explicitly set, the default will be read from the application's plist (FacebookDomainPart). - */ -+ (NSString *)facebookDomainPart; - -/** - Set the subpart of the Facebook domain. - - This can be used to change the Facebook domain (e.g. @"beta") so that requests will be sent to - graph.beta.facebook.com - @param facebookDomainPart The domain part to be inserted into facebook.com. - */ -+ (void)setFacebookDomainPart:(NSString *)facebookDomainPart; - -/** - The quality of JPEG images sent to Facebook from the SDK. + 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) */ -+ (CGFloat)JPEGCompressionQuality; +@property (class, nonatomic, assign) CGFloat JPEGCompressionQuality +NS_SWIFT_NAME(jpegCompressionQuality); /** - Set the quality of JPEG images sent to Facebook from the SDK. - @param JPEGCompressionQuality The quality for JPEG images, expressed as a value from 0.0 to 1.0. - - @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ -+ (void)setJPEGCompressionQuality:(CGFloat)JPEGCompressionQuality; - -/** - Flag which controls the auto logging of basic app events, such as activateApp and deactivateApp. - If not explicitly set, the default is 1 - true + Controls sdk auto initailization. + If not explicitly set, the default is true */ -+ (NSNumber *)autoLogAppEventsEnabled; +@property (class, nonatomic, assign, getter=isAutoInitEnabled) BOOL autoInitEnabled; /** - Set the flag which controls the auto logging of basic app events, such as activateApp and deactivateApp. - @param AutoLogAppEventsEnabled Flag value, expressed as a value from 0 - false or 1 - true. + Controls sdk crash report + If not explicitly set, the default is true */ -+ (void)setAutoLogAppEventsEnabled:(NSNumber *)AutoLogAppEventsEnabled; +@property (class, nonatomic, assign, getter=isInstrumentEnabled) BOOL instrumentEnabled +__attribute((deprecated("This attribute is no longer used, use autoLogAppEventsEnabled instead."))); /** - Flag which controls the fb_codeless_debug logging event - If not explicitly set, the default is 1 - true + Controls the auto logging of basic app events, such as activateApp and deactivateApp. + If not explicitly set, the default is true */ -+ (NSNumber *)codelessDebugLogEnabled; +@property (class, nonatomic, assign, getter=isAutoLogAppEventsEnabled) BOOL autoLogAppEventsEnabled; /** - Set the flag which controls the fb_codeless_debug logging event - @param CodelessDebugLogEnabled Flag value, expressed as a value from 0 - false or 1 - true. + Controls the fb_codeless_debug logging event + If not explicitly set, the default is true */ -+ (void)setCodelessDebugLogEnabled:(NSNumber *)CodelessDebugLogEnabled; +@property (class, nonatomic, assign, getter=isCodelessDebugLogEnabled) BOOL codelessDebugLogEnabled; /** - Flag which controls whether advertiserID could be collected. - If not explicitly set, the default is 1 - true + Controls the fb_codeless_debug logging event + If not explicitly set, the default is true */ -+ (NSNumber *)advertiserIDCollectionEnabled; +@property (class, nonatomic, assign, getter=isAdvertiserIDCollectionEnabled) BOOL advertiserIDCollectionEnabled; /** - Set the flag which controls ontrols whether advertiserID could be collected. - @param AdvertiserIDCollectionEnabled Flag value, expressed as a value from 0 - false or 1 - true. + 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. */ -+ (void)setAdvertiserIDCollectionEnabled:(NSNumber *)AdvertiserIDCollectionEnabled; +@property (class, nonatomic, assign, getter=shouldLimitEventAndDataUsage) BOOL limitEventAndDataUsage; /** - Gets 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. + A convenient way to toggle error recovery for all FBSDKGraphRequest instances created after this is set. */ -+ (BOOL)limitEventAndDataUsage; +@property (class, nonatomic, assign, getter=isGraphErrorRecoveryEnabled) BOOL graphErrorRecoveryEnabled; /** - Sets 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. + The Facebook App ID used by the SDK. - @param limitEventAndDataUsage The desired value. + If not explicitly set, the default will be read from the application's plist (FacebookAppID). */ -+ (void)setLimitEventAndDataUsage:(BOOL)limitEventAndDataUsage; +@property (class, nonatomic, copy, nullable) NSString *appID; /** - Retrieve the current iOS SDK version. + The default url scheme suffix used for sessions. + + If not explicitly set, the default will be read from the application's plist (FacebookUrlSchemeSuffix). */ -+ (NSString *)sdkVersion; +@property (class, nonatomic, copy, nullable) NSString *appURLSchemeSuffix; /** - The current Facebook SDK logging behavior. + 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) NSSet *loggingBehaviors; - -+ (NSSet *)loggingBehavior -DEPRECATED_MSG_ATTRIBUTE("Renamed `loggingBehaviors`"); +@property (class, nonatomic, copy, nullable) NSString *clientToken; /** - Set the current Facebook SDK logging behavior. This should consist of strings defined as - constants with FBSDKLoggingBehavior*. + The Facebook Display Name used by the SDK. - @param loggingBehavior A set of strings indicating what information should be logged. If nil is provided, the logging - behavior is reset to the default set of enabled behaviors. Set to an empty set in order to disable all logging. + 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 */ -+ (void)setLoggingBehavior:(NSSet *)loggingBehavior; - -/** - 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:(NSString *)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:(NSString *)loggingBehavior; - -/** - Set the user defaults key used by legacy token caches. - - @param tokenInformationKeyName the key used by legacy token caches. - - - Use this only if you customized FBSessionTokenCachingStrategy in v3.x of - the Facebook SDK for iOS. -*/ -+ (void)setLegacyUserDefaultTokenInformationKeyName:(NSString *)tokenInformationKeyName; - -/** - Get the user defaults key used by legacy token caches. -*/ -+ (NSString *)legacyUserDefaultTokenInformationKeyName; +@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`. */ -+ (void)setGraphAPIVersion:(NSString *)version; +@property (class, nonatomic, copy, null_resettable) NSString *graphAPIVersion; /** - Returns the default Graph API version. Defaults to `FBSDK_TARGET_PLATFORM_VERSION` -*/ -+ (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 index 4790f1c1a1..03af6f1bcf 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m @@ -20,12 +20,16 @@ #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) \ +#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; \ } \ @@ -33,70 +37,90 @@ static TYPE *g_##PLIST_KEY = nil; \ } \ + (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]; \ } -#define FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY @"com.facebook.sdk:autoLogAppEventsEnabled%@" -#define FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY @"com.facebook.sdk:advertiserIDCollectionEnabled%@" - -NSString *const FBSDKLoggingBehaviorAccessTokens = @"include_access_tokens"; -NSString *const FBSDKLoggingBehaviorPerformanceCharacteristics = @"perf_characteristics"; -NSString *const FBSDKLoggingBehaviorAppEvents = @"app_events"; -NSString *const FBSDKLoggingBehaviorInformational = @"informational"; -NSString *const FBSDKLoggingBehaviorCacheErrors = @"cache_errors"; -NSString *const FBSDKLoggingBehaviorUIControlErrors = @"ui_control_errors"; -NSString *const FBSDKLoggingBehaviorDeveloperErrors = @"developer_errors"; -NSString *const FBSDKLoggingBehaviorGraphAPIDebugWarning = @"graph_api_debug_warning"; -NSString *const FBSDKLoggingBehaviorGraphAPIDebugInfo = @"graph_api_debug_info"; -NSString *const FBSDKLoggingBehaviorNetworkRequests = @"network_requests"; +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 *g_legacyUserDefaultTokenInformationKeyName = @"FBAccessTokenInformationKey"; +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; -static NSString *const FBSDKSettingsAutoLogAppEventsEnabled = @"FacebookAutoLogAppEventsEnabled"; -static NSString *const FBSDKSettingsAdvertiserIDCollectionEnabled = @"FacebookAdvertiserIDCollectionEnabled"; -static NSNumber *g_autoLogAppEventsEnabled; -static NSNumber *g_advertiserIDCollectionEnabled; + +// +// 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]) { - NSString *appID = [self appID]; g_tokenCache = [[FBSDKAccessTokenCache alloc] init]; g_accessTokenExpirer = [[FBSDKAccessTokenExpirer alloc] init]; - // Fetch meta data from plist and overwrite the value with NSUserDefaults if possible - g_autoLogAppEventsEnabled = [self appEventSettingsForPlistKey:FBSDKSettingsAutoLogAppEventsEnabled defaultValue:@YES]; - g_autoLogAppEventsEnabled = [self appEventSettingsForUserDefaultsKey:[NSString stringWithFormat:FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY, appID] defaultValue:g_autoLogAppEventsEnabled]; - [[NSUserDefaults standardUserDefaults] setObject:g_autoLogAppEventsEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY, appID]]; - g_advertiserIDCollectionEnabled = [self appEventSettingsForPlistKey:FBSDKSettingsAdvertiserIDCollectionEnabled defaultValue:@YES]; - g_advertiserIDCollectionEnabled = [self appEventSettingsForUserDefaultsKey:[NSString stringWithFormat:FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY, appID] defaultValue:g_advertiserIDCollectionEnabled]; - [[NSUserDefaults standardUserDefaults] setObject:g_advertiserIDCollectionEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY, appID]]; + + [FBSDKSettings _logWarnings]; + [FBSDKSettings _logIfSDKSettingsChanged]; } } #pragma mark - Plist Configuration Settings -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookAppID, appID, setAppID, nil); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookUrlSchemeSuffix, appURLSchemeSuffix, setAppURLSchemeSuffix, nil); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookClientToken, clientToken, setClientToken, nil); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookDisplayName, displayName, setDisplayName, nil); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookDomainPart, facebookDomainPart, setFacebookDomainPart, nil); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookJpegCompressionQuality, _JPEGCompressionQualityNumber, _setJPEGCompressionQualityNumber, @0.9); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLogEnabled, codelessDebugLogEnabled, - setCodelessDebugLogEnabled, @0); +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); -+ (void)setGraphErrorRecoveryDisabled:(BOOL)disableGraphErrorRecovery { - g_disableErrorRecovery = disableGraphErrorRecovery; ++ (BOOL)isGraphErrorRecoveryEnabled +{ + return !g_disableErrorRecovery; } -+ (BOOL)isGraphErrorRecoveryDisabled { - return g_disableErrorRecovery; ++ (void)setGraphErrorRecoveryEnabled:(BOOL)graphErrorRecoveryEnabled +{ + g_disableErrorRecovery = !graphErrorRecoveryEnabled; } + (CGFloat)JPEGCompressionQuality @@ -109,7 +133,60 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo [self _setJPEGCompressionQualityNumber:@(JPEGCompressionQuality)]; } -+ (BOOL)limitEventAndDataUsage ++ (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) { @@ -125,10 +202,10 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo [defaults synchronize]; } -+ (NSSet *)loggingBehaviors ++ (NSSet *)loggingBehaviors { if (!g_loggingBehaviors) { - NSArray *bundleLoggingBehaviors = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookLoggingBehavior"]; + NSArray *bundleLoggingBehaviors = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookLoggingBehavior"]; if (bundleLoggingBehaviors) { g_loggingBehaviors = [[NSMutableSet alloc] initWithArray:bundleLoggingBehaviors]; } else { @@ -140,7 +217,7 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo return [g_loggingBehaviors copy]; } -+ (void)setLoggingBehaviors:(NSSet *)loggingBehaviors ++ (void)setLoggingBehaviors:(NSSet *)loggingBehaviors { if (![g_loggingBehaviors isEqualToSet:loggingBehaviors]) { g_loggingBehaviors = [loggingBehaviors mutableCopy]; @@ -149,17 +226,7 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo } } -+ (NSSet *)loggingBehavior -{ - return [self loggingBehaviors]; -} - -+ (void)setLoggingBehavior:(NSSet *)loggingBehavior -{ - [self setLoggingBehaviors:loggingBehavior]; -} - -+ (void)enableLoggingBehavior:(NSString *)loggingBehavior ++ (void)enableLoggingBehavior:(FBSDKLoggingBehavior)loggingBehavior { if (!g_loggingBehaviors) { [self loggingBehaviors]; @@ -168,7 +235,7 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo [self updateGraphAPIDebugBehavior]; } -+ (void)disableLoggingBehavior:(NSString *)loggingBehavior ++ (void)disableLoggingBehavior:(FBSDKLoggingBehavior)loggingBehavior { if (!g_loggingBehaviors) { [self loggingBehaviors]; @@ -177,18 +244,6 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo [self updateGraphAPIDebugBehavior]; } -+ (void)setLegacyUserDefaultTokenInformationKeyName:(NSString *)tokenInformationKeyName -{ - if (![g_legacyUserDefaultTokenInformationKeyName isEqualToString:tokenInformationKeyName]) { - g_legacyUserDefaultTokenInformationKeyName = tokenInformationKeyName; - } -} - -+ (NSString *)legacyUserDefaultTokenInformationKeyName -{ - return g_legacyUserDefaultTokenInformationKeyName; -} - #pragma mark - Readonly Configuration Settings + (NSString *)sdkVersion @@ -230,9 +285,14 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo } } ++ (NSString *)defaultGraphAPIVersion +{ + return FBSDK_TARGET_PLATFORM_VERSION; +} + + (NSString *)graphAPIVersion { - return g_defaultGraphAPIVersion ?: FBSDK_TARGET_PLATFORM_VERSION; + return g_defaultGraphAPIVersion ?: self.defaultGraphAPIVersion; } + (NSNumber *)appEventSettingsForPlistKey:(NSString *)plistKey @@ -251,34 +311,52 @@ FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLo return defaultValue; } -+ (NSNumber *)autoLogAppEventsEnabled ++ (void)_logWarnings { - return g_autoLogAppEventsEnabled; -} - -+ (void)setAutoLogAppEventsEnabled:(NSNumber *)autoLogAppEventsEnabled -{ - if (autoLogAppEventsEnabled == nil || [g_autoLogAppEventsEnabled isEqual:autoLogAppEventsEnabled]) { - return; + NSBundle *mainBundle = [NSBundle mainBundle]; + // Log warnings for App Event Flags + if (![mainBundle objectForInfoDictionaryKey:@"FacebookAutoLogAppEventsEnabled"]) { + NSLog(autoLogAppEventsEnabledNotSetWarning); } - - g_autoLogAppEventsEnabled = [autoLogAppEventsEnabled copy]; - [[NSUserDefaults standardUserDefaults] setObject:g_autoLogAppEventsEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_AUTOLOG_APPEVENTS_ENABLED_USER_DEFAULTS_KEY, [self appID]]]; -} - -+ (NSNumber *)advertiserIDCollectionEnabled -{ - return g_advertiserIDCollectionEnabled; -} - -+ (void)setAdvertiserIDCollectionEnabled:(NSNumber *)advertiserIDCollectionEnabled -{ - if (advertiserIDCollectionEnabled == nil || [g_advertiserIDCollectionEnabled isEqual:advertiserIDCollectionEnabled]) { - return; + if (![mainBundle objectForInfoDictionaryKey:@"FacebookAdvertiserIDCollectionEnabled"]) { + NSLog(advertiserIDCollectionEnabledNotSetWarning); } + if (![FBSDKSettings isAdvertiserIDCollectionEnabled]) { + NSLog(advertiserIDCollectionEnabledFalseWarning); + } +} - g_advertiserIDCollectionEnabled = [advertiserIDCollectionEnabled copy]; - [[NSUserDefaults standardUserDefaults] setObject:g_advertiserIDCollectionEnabled forKey:[NSString stringWithFormat:FBSDKSETTINGS_ADVERTISERID_COLLECTION_ENABLED_USER_DEFAULTS_KEY, [self appID]]]; ++ (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 diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h index 7373639975..8b5ed3ea3d 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h @@ -18,19 +18,17 @@ #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. + Callback block for returning an array of FBSDKAccessToken instances (and possibly `NSNull` instances); or an error. */ -typedef void (^FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)(NSArray *tokens, NSError *error) ; - -/** - - Callback block for removing a test user. - */ -typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; +typedef void (^FBSDKAccessTokensBlock)(NSArray *tokens, NSError *_Nullable error) +NS_SWIFT_NAME(AccessTokensBlock); /** @@ -46,6 +44,7 @@ typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; 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; @@ -56,14 +55,14 @@ typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; @param appID the Facebook app id @param appSecret the Facebook app secret */ -+ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret; ++ (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. For convenience, passing nil is treated as @[ [NSSet set] ] - for fetching a single test user. + 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`. @@ -74,24 +73,26 @@ typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; `arrayOfPermissionsArrays` so that the most number of permissions come first to minimize creation of new test accounts. */ -- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *)arraysOfPermissions +- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *> *)arraysOfPermissions createIfNotFound:(BOOL)createIfNotFound - completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler; + 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:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)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:(FBSDKTestUsersManagerRemoveTestAccountHandler)handler; +- (void)removeTestAccount:(NSString *)userId + completionHandler:(nullable FBSDKErrorBlock)handler; /** Make two test users friends with each other. @@ -99,6 +100,11 @@ typedef void (^FBSDKTestUsersManagerRemoveTestAccountHandler)(NSError *error) ; @param second the token of the second user @param callback the callback handler */ -- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(void (^)(NSError *))callback; +- (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 index d6e45c75be..1984836cd0 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m @@ -23,7 +23,7 @@ static NSString *const kFBGraphAPITestUsersPathFormat = @"%@/accounts/test-users"; static NSString *const kAccountsDictionaryTokenKey = @"access_token"; static NSString *const kAccountsDictionaryPermissionsKey = @"permissions"; -static NSMutableDictionary *gInstancesDictionary; +static NSMutableDictionary *gInstancesDictionary; @interface FBSDKTestUsersManager() - (instancetype)initWithAppID:(NSString *)appID appSecret:(NSString *)appSecret NS_DESIGNATED_INITIALIZER; @@ -61,16 +61,16 @@ static NSMutableDictionary *gInstancesDictionary; return gInstancesDictionary[instanceKey]; } -- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *)arraysOfPermissions +- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *> *)arraysOfPermissions createIfNotFound:(BOOL)createIfNotFound - completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler { + 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(nil, error); + handler(@[], error); } return; } @@ -86,7 +86,7 @@ static NSMutableDictionary *gInstancesDictionary; completionHandler:^(NSArray *tokens, NSError *addError) { if (addError) { if (handler) { - handler(nil, addError); + handler(@[], addError); } } else { [weakSelf requestTestAccountTokensWithArraysOfPermissions:arraysOfPermissions @@ -123,7 +123,7 @@ static NSMutableDictionary *gInstancesDictionary; } - (void)addTestAccountWithPermissions:(NSSet *)permissions - completionHandler:(FBSDKTestUsersManagerRetrieveTestAccountTokensHandler)handler { + completionHandler:(FBSDKAccessTokensBlock)handler { NSDictionary *params = @{ @"installed" : @"true", @"permissions" : [permissions.allObjects componentsJoinedByString:@","], @@ -133,11 +133,11 @@ static NSMutableDictionary *gInstancesDictionary; parameters:params tokenString:[self appAccessToken] version:nil - HTTPMethod:@"POST"]; + HTTPMethod:FBSDKHTTPMethodPOST]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (error) { if (handler) { - handler(nil, error); + handler(@[], error); } } else { NSMutableDictionary *accountData = [NSMutableDictionary dictionaryWithCapacity:2]; @@ -155,7 +155,7 @@ static NSMutableDictionary *gInstancesDictionary; }]; } -- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(void (^)(NSError *))callback +- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(FBSDKErrorBlock)callback { __block int expectedCount = 2; void (^complete)(NSError *) = ^(NSError *error) { @@ -169,15 +169,15 @@ static NSMutableDictionary *gInstancesDictionary; } }; FBSDKGraphRequest *one = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/friends/%@", first.userID, second.userID] - parameters:nil + parameters:@{} tokenString:first.tokenString version:nil - HTTPMethod:@"POST"]; + HTTPMethod:FBSDKHTTPMethodPOST]; FBSDKGraphRequest *two = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/friends/%@", second.userID, first.userID] - parameters:nil + parameters:@{} tokenString:second.tokenString version:nil - HTTPMethod:@"POST"]; + HTTPMethod:FBSDKHTTPMethodPOST]; FBSDKGraphRequestConnection *conn = [[FBSDKGraphRequestConnection alloc] init]; [conn addRequest:one batchEntryName:@"first" @@ -192,9 +192,9 @@ static NSMutableDictionary *gInstancesDictionary; [conn start]; } -- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKTestUsersManagerRemoveTestAccountHandler)handler { +- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKErrorBlock)handler { FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:userId - parameters:nil + parameters:@{} tokenString:self.appAccessToken version:nil HTTPMethod:@"DELETE"]; @@ -210,7 +210,8 @@ static NSMutableDictionary *gInstancesDictionary; - (FBSDKAccessToken *)tokenDataForTokenString:(NSString *)tokenString permissions:(NSSet *)permissions userId:(NSString *)userId{ return [[FBSDKAccessToken alloc] initWithTokenString:tokenString permissions:permissions.allObjects - declinedPermissions:nil + declinedPermissions:@[] + expiredPermissions:@[] appID:_appID userID:userId expirationDate:nil @@ -244,7 +245,7 @@ static NSMutableDictionary *gInstancesDictionary; return [NSString stringWithFormat:@"%@|%@", _appID, _appSecret]; } -- (void)fetchExistingTestAccountsWithAfterCursor:(NSString *)after handler:(void(^)(NSError *error))handler { +- (void)fetchExistingTestAccountsWithAfterCursor:(NSString *)after handler:(FBSDKErrorBlock)handler { FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; FBSDKGraphRequest *requestForAccountIds = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:kFBGraphAPITestUsersPathFormat, _appID] parameters:@{@"limit" : @"50", @@ -253,7 +254,7 @@ static NSMutableDictionary *gInstancesDictionary; } tokenString:self.appAccessToken version:nil - HTTPMethod:nil]; + HTTPMethod:FBSDKHTTPMethodGET]; __block NSString *afterCursor = nil; __block NSInteger expectedTestAccounts = 0; FBSDKGraphRequestConnection *permissionConnection = [[FBSDKGraphRequestConnection alloc] init]; @@ -274,10 +275,10 @@ static NSMutableDictionary *gInstancesDictionary; self->_accounts[userId][kAccountsDictionaryTokenKey] = token; expectedTestAccounts++; [permissionConnection addRequest:[[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@?fields=permissions", userId] - parameters:nil + parameters:@{} tokenString:self.appAccessToken version:nil - HTTPMethod: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. diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h index e0e3d4c6b0..969d8e0cc4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h @@ -16,72 +16,89 @@ // IN AN ACTION OF 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. */ -+ (FBSDKURL *)URLWithURL:(NSURL *)url; ++ (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: */ -+ (FBSDKURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; ++ (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) NSDictionary *appLinkData; +@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) NSDictionary *appLinkExtras; +@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) FBSDKAppLink *appLinkReferer; +@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 index adc4729eee..958f4f7fda 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m @@ -16,11 +16,19 @@ // IN AN ACTION OF 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 @@ -110,24 +118,27 @@ return self; } -+ (FBSDKURL *)URLWithURL:(NSURL *)url { +- (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]; } -+ (FBSDKURL *)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication { ++ (instancetype)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication { return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:YES sourceApplication:sourceApplication forRenderBackToReferrerBar:NO]; } -+ (FBSDKURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url { ++ (instancetype)URLForRenderBackToReferrerBarURL:(NSURL *)url { return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:YES]; } -+ (NSString *)decodeURLString:(NSString *)string { - return (NSString *)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapes(NULL, - (CFStringRef)string, - CFSTR(""))); -} - + (NSDictionary *)queryParametersForURL:(NSURL *)url { NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; NSString *query = url.query; @@ -139,10 +150,10 @@ NSRange equalsLocation = [component rangeOfString:@"="]; if (equalsLocation.location == NSNotFound) { // There's no equals, so associate the key with NSNull - parameters[[self decodeURLString:component]] = [NSNull null]; + parameters[[FBSDKBasicUtility URLDecode:component]] = [NSNull null]; } else { - NSString *key = [self decodeURLString:[component substringToIndex:equalsLocation.location]]; - NSString *value = [self decodeURLString:[component substringFromIndex:equalsLocation.location + 1]]; + NSString *key = [FBSDKBasicUtility URLDecode:[component substringToIndex:equalsLocation.location]]; + NSString *value = [FBSDKBasicUtility URLDecode:[component substringFromIndex:equalsLocation.location + 1]]; parameters[key] = value; } } @@ -150,3 +161,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h index 560b6b039a..13c4a5dd90 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h @@ -18,9 +18,12 @@ #import +NS_ASSUME_NONNULL_BEGIN + /** Class to contain common utility methods. */ +NS_SWIFT_NAME(Utility) @interface FBSDKUtility : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -31,7 +34,8 @@ @param queryString The query string value. @return A dictionary with the key/value pairs. */ -+ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString; ++ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString +NS_SWIFT_NAME(dictionary(withQuery:)); /** Constructs a query string from a dictionary. @@ -39,21 +43,26 @@ @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 *__autoreleasing *)errorRef; ++ (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; ++ (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; ++ (NSString *)URLEncode:(NSString *)value +NS_SWIFT_NAME(encode(urlString:)); /** Creates a timer using Grand Central Dispatch. @@ -74,6 +83,9 @@ @param input The data that needs to be hashed, it could be NSString or NSData. */ -+ (NSString *)SHA256Hash:(NSObject *)input; ++ (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 index b6af8ab37d..8a32c665e0 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m @@ -26,61 +26,23 @@ + (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; + return [FBSDKBasicUtility dictionaryWithQueryString:queryString]; } -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError *__autoreleasing *)errorRef ++ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError **)errorRef { - return [FBSDKInternalUtility queryStringWithDictionary:dictionary error:errorRef invalidObjectHandler:NULL]; + return [FBSDKBasicUtility queryStringWithDictionary:dictionary error:errorRef invalidObjectHandler:NULL]; } + (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; + return [FBSDKBasicUtility URLDecode: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); + return [FBSDKBasicUtility URLEncode:value]; } -#pragma clang diagnostic pop + (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block { @@ -112,10 +74,10 @@ { NSData *data = nil; - if ([input isKindOfClass:[NSString class]]) { - data = [(NSString *)input dataUsingEncoding:NSUTF8StringEncoding]; - } else if ([input isKindOfClass:[NSData class]]) { + if ([input isKindOfClass:[NSData class]]) { data = (NSData *)input; + } else if ([input isKindOfClass:[NSString class]]) { + data = [(NSString *)input dataUsingEncoding:NSUTF8StringEncoding]; } if (!data) { @@ -124,12 +86,12 @@ uint8_t digest[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(data.bytes, (CC_LONG)data.length, digest); - NSMutableString *encryptedStuff = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { - [encryptedStuff appendFormat:@"%02x", digest[i]]; + [hashed appendFormat:@"%02x", digest[i]]; } - return encryptedStuff; + return [hashed copy]; } @end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h similarity index 82% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h index 820be4b825..e57c797c4c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h @@ -16,9 +16,19 @@ // IN AN ACTION OF 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; @@ -26,6 +36,7 @@ /** Defines a delegate for `FBSDKGraphErrorRecoveryProcessor`. */ +NS_SWIFT_NAME(GraphErrorRecoveryProcessorDelegate) @protocol FBSDKGraphErrorRecoveryProcessorDelegate /** @@ -34,7 +45,9 @@ @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:(NSError *)error; +- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor + didRecover:(BOOL)didRecover + error:(nullable NSError *)error; @optional /** @@ -46,10 +59,15 @@ 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:(NSError *)error; +- (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. @@ -69,17 +87,18 @@ 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 use FBSDKLoginBehaviorNative and will prompt the user + 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) iddelegate; +@property (nonatomic, strong, readonly, nullable) iddelegate; /** Attempts to process the error, return YES if the error can be processed. @@ -87,13 +106,19 @@ @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:(id) delegate; +- (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:(void *)contextInfo; +- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(nullable void *)contextInfo; @end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m similarity index 84% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m index bd21cecde8..cd15ffb731 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m @@ -15,6 +15,11 @@ // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER // IN AN ACTION OF 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" @@ -26,18 +31,13 @@ NSError *_error; } -@property (nonatomic, strong) iddelegate; +@property (nonatomic, strong, nullable) iddelegate; @end @implementation FBSDKGraphErrorRecoveryProcessor -- (void)dealloc -{ - -} - -- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id) delegate +- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id)delegate { self.delegate = delegate; if ([self.delegate respondsToSelector:@selector(processorWillProcessError:error:)]) { @@ -55,7 +55,6 @@ case FBSDKGraphRequestErrorRecoverable : if ([request.tokenString isEqualToString:[FBSDKAccessToken currentAccessToken].tokenString]) { _recoveryAttempter = error.recoveryAttempter; - BOOL isLoginRecoveryAttempter = [_recoveryAttempter isKindOfClass:NSClassFromString(@"_FBSDKLoginRecoveryAttempter")]; // 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). @@ -72,26 +71,6 @@ return NO; }; - if ([request.tokenString isEqualToString:[FBSDKSystemAccountStoreAdapter sharedInstance].accessTokenString] && - isLoginRecoveryAttempter) { - // special system auth case: if user has granted permissions we can simply renew. On a successful - // renew, treat this as immediately recovered without the standard alert prompty. - // (for example, this can repair expired tokens seamlessly) - [[FBSDKSystemAccountStoreAdapter sharedInstance] - renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *renewError) { - dispatch_async(dispatch_get_main_queue(), ^{ - if (result == ACAccountCredentialRenewResultRenewed) { - [self.delegate processorDidAttemptRecovery:self didRecover:YES error:nil]; - self.delegate = nil; - } else if (!standardRecoveryWork()) { - [self.delegate processorDidAttemptRecovery:self didRecover:NO error:self->_error]; - }; - }); - }]; - // short-circuit YES so that the renew callback resumes the control flow. - return YES; - } - return standardRecoveryWork(); } return NO; @@ -170,3 +149,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h similarity index 66% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h index bcb514929b..28f8581149 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h @@ -18,10 +18,24 @@ #import -#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. @@ -41,28 +55,43 @@ @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]`. + 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; + +/** + 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 - parameters:(NSDictionary *)parameters; + 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. - @param HTTPMethod the optional HTTP method. nil defaults to @"GET". */ - (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - HTTPMethod:(NSString *)HTTPMethod; + 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. @@ -70,24 +99,24 @@ @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 HTTPMethod the optional HTTP method (e.g., @"POST"). nil defaults to @"GET". + @param method the HTTP method. Empty String defaults to @"GET". */ - (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - tokenString:(NSString *)tokenString - version:(NSString *)version - HTTPMethod:(NSString *)HTTPMethod + parameters:(NSDictionary *)parameters + tokenString:(nullable NSString *)tokenString + version:(nullable NSString *)version + HTTPMethod:(FBSDKHTTPMethod)method NS_DESIGNATED_INITIALIZER; /** The request parameters. */ -@property (nonatomic, strong, readonly) NSMutableDictionary *parameters; +@property (nonatomic, copy) NSDictionary *parameters; /** The access token string used by the request. */ -@property (nonatomic, copy, readonly) NSString *tokenString; +@property (nonatomic, copy, readonly, nullable) NSString *tokenString; /** The Graph API endpoint to use for the request, for example "me". @@ -97,7 +126,7 @@ NS_DESIGNATED_INITIALIZER; /** The HTTPMethod to use for the request, for example "GET" or "POST". */ -@property (nonatomic, copy, readonly) NSString *HTTPMethod; +@property (nonatomic, copy, readonly) FBSDKHTTPMethod HTTPMethod; /** The Graph API version to use (e.g., "v2.0") @@ -115,12 +144,15 @@ NS_DESIGNATED_INITIALIZER; This will override [FBSDKSettings setGraphErrorRecoveryDisabled:]. */ -- (void)setGraphErrorRecoveryDisabled:(BOOL)disable; +- (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:(FBSDKGraphRequestHandler)handler; +- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(nullable FBSDKGraphRequestBlock)handler; @end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m similarity index 81% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m index 93ad56f524..569357ca42 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m @@ -29,15 +29,28 @@ #import "FBSDKSettings+Internal.h" // constants -static NSString *const kGetHTTPMethod = @"GET"; -static NSString *const kPostHTTPMethod = @"POST"; +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 @@ -47,12 +60,12 @@ static NSString *const kPostHTTPMethod = @"POST"; - (instancetype)initWithGraphPath:(NSString *)graphPath parameters:(NSDictionary *)parameters - HTTPMethod:(NSString *)HTTPMethod { + HTTPMethod:(FBSDKHTTPMethod)method { return [self initWithGraphPath:graphPath parameters:parameters tokenString:[FBSDKAccessToken currentAccessToken].tokenString version:nil - HTTPMethod:HTTPMethod]; + HTTPMethod:method]; } - (instancetype)initWithGraphPath:(NSString *)graphPath @@ -61,20 +74,20 @@ static NSString *const kPostHTTPMethod = @"POST"; return [self initWithGraphPath:graphPath parameters:parameters tokenString:[FBSDKAccessToken currentAccessToken].tokenString - HTTPMethod:nil + HTTPMethod:FBSDKHTTPMethodGET flags:flags]; } - (instancetype)initWithGraphPath:(NSString *)graphPath parameters:(NSDictionary *)parameters tokenString:(NSString *)tokenString - HTTPMethod:(NSString *)HTTPMethod + HTTPMethod:(FBSDKHTTPMethod)method flags:(FBSDKGraphRequestFlags)flags { if ((self = [self initWithGraphPath:graphPath parameters:parameters tokenString:tokenString version:[FBSDKSettings graphAPIVersion] - HTTPMethod:HTTPMethod])) { + HTTPMethod:method])) { self.flags |= flags; } return self; @@ -84,14 +97,14 @@ static NSString *const kPostHTTPMethod = @"POST"; parameters:(NSDictionary *)parameters tokenString:(NSString *)tokenString version:(NSString *)version - HTTPMethod:(NSString *)HTTPMethod { + HTTPMethod:(FBSDKHTTPMethod)method { if ((self = [super init])) { - _tokenString = [tokenString copy]; + _tokenString = tokenString ? [tokenString copy] : nil; _version = version ? [version copy] : [FBSDKSettings graphAPIVersion]; _graphPath = [graphPath copy]; - _HTTPMethod = HTTPMethod ? [HTTPMethod copy] : kGetHTTPMethod; - _parameters = [[NSMutableDictionary alloc] initWithDictionary:parameters]; - if ([FBSDKSettings isGraphErrorRecoveryDisabled]) { + self.HTTPMethod = method.length > 0 ? [method copy] : FBSDKHTTPMethodGET; + _parameters = parameters ?: @{}; + if (!FBSDKSettings.isGraphErrorRecoveryEnabled) { _flags = FBSDKGraphRequestFlagDisableErrorRecovery; } } @@ -134,7 +147,7 @@ static NSString *const kPostHTTPMethod = @"POST"; + (NSString *)serializeURL:(NSString *)baseUrl params:(NSDictionary *)params { - return [self serializeURL:baseUrl params:params httpMethod:kGetHTTPMethod]; + return [self serializeURL:baseUrl params:params httpMethod:FBSDKHTTPMethodGET]; } + (NSString *)serializeURL:(NSString *)baseUrl @@ -154,15 +167,15 @@ static NSString *const kPostHTTPMethod = @"POST"; NSURL *parsedURL = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; #pragma clang pop - if ([httpMethod isEqualToString:kPostHTTPMethod] && !forBatch) { + if ([httpMethod isEqualToString:FBSDKHTTPMethodPOST] && !forBatch) { return baseUrl; } NSString *queryPrefix = parsedURL.query ? @"&" : @"?"; - NSString *query = [FBSDKInternalUtility queryStringWithDictionary:params error:NULL invalidObjectHandler:^id(id object, BOOL *stop) { + NSString *query = [FBSDKBasicUtility queryStringWithDictionary:params error:NULL invalidObjectHandler:^id(id object, BOOL *stop) { if ([self isAttachment:object]) { - if ([httpMethod isEqualToString:kGetHTTPMethod]) { + if ([httpMethod isEqualToString:FBSDKHTTPMethodGET]) { [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"can not use GET to upload a file"]; } return nil; @@ -184,7 +197,7 @@ static NSString *const kPostHTTPMethod = @"POST"; return params; } -- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestHandler)handler +- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestBlock)handler { FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; [connection addRequest:self completionHandler:handler]; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h similarity index 80% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h index af10a85957..bdab4dc722 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h @@ -18,32 +18,45 @@ #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; /** - FBSDKGraphRequestHandler + 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 connection The `FBSDKGraphRequestConnection` that sent the request. - @param result The result of the request. This is a translation of + @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. + @param error The `NSError` representing any error that occurred. */ -typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection, - id result, - NSError *error); +typedef void (^FBSDKGraphRequestBlock)(FBSDKGraphRequestConnection *_Nullable connection, + id _Nullable result, + NSError *_Nullable error) +NS_SWIFT_NAME(GraphRequestBlock); /** @protocol @@ -51,6 +64,7 @@ typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection The `FBSDKGraphRequestConnectionDelegate` protocol defines the methods used to receive network activity progress information from a . */ +NS_SWIFT_NAME(GraphRequestConnectionDelegate) @protocol FBSDKGraphRequestConnectionDelegate @optional @@ -79,7 +93,7 @@ typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection 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 FBSDKGraphRequestHandler + 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 . @@ -97,7 +111,7 @@ typedef void (^FBSDKGraphRequestHandler)(FBSDKGraphRequestConnection *connection 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 - FBSDKGraphRequestHandler block may contain additional information. + 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 @@ -141,12 +155,18 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; 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) id delegate; +@property (nonatomic, weak, nullable) id delegate; /** Gets or sets the timeout interval to wait for a response before giving up. @@ -162,23 +182,22 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; the server. The property is nil until the request completes. If there was a response - then this property will be non-nil during the FBSDKGraphRequestHandler callback. + then this property will be non-nil during the FBSDKGraphRequestBlock callback. */ -@property (nonatomic, retain, readonly) NSHTTPURLResponse *URLResponse; +@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 */ -/** - @method - - This method sets the default timeout on all FBSDKGraphRequestConnection instances. Defaults to 60 seconds. - - @param defaultConnectionTimeout The timeout interval. - */ -+ (void)setDefaultConnectionTimeout:(NSTimeInterval)defaultConnectionTimeout; - /** @methodgroup Adding requests */ @@ -191,13 +210,11 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; @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:(FBSDKGraphRequestHandler)handler; + completionHandler:(FBSDKGraphRequestBlock)handler; /** @method @@ -209,25 +226,18 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; @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 An optional name for this request. This can be used to feed + @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:(FBSDKGraphRequestHandler)handler; - -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler - batchEntryName:(NSString *)name -DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchEntryName:completionHandler:`"); + completionHandler:(FBSDKGraphRequestBlock)handler; /** @method @@ -238,24 +248,17 @@ DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchEntryName:completionHandler:` @param handler A handler to call back when the round-trip completes or times out. - @param batchParameters The optional dictionary of parameters to include for this request + @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:(NSDictionary *)batchParameters - completionHandler:(FBSDKGraphRequestHandler)handler; - -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler - batchParameters:(NSDictionary *)batchParameters -DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchParameters:completionHandler:`"); + batchParameters:(nullable NSDictionary *)batchParameters + completionHandler:(FBSDKGraphRequestBlock)handler; /** @methodgroup Instance methods @@ -267,8 +270,6 @@ DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchParameters:completionHandler: 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 @@ -291,22 +292,11 @@ DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchParameters:completionHandler: */ - (void)start; -/** - Determines the operation queue that is used to call methods on the connection's delegate. - @param queue The operation queue to use when calling delegate methods. - - 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. - */ -- (void)setDelegateQueue:(NSOperationQueue *)queue; - /** @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. @@ -315,18 +305,6 @@ DEPRECATED_MSG_ATTRIBUTE("Renamed `addRequest:batchParameters:completionHandler: */ - (void)overrideGraphAPIVersion:(NSString *)version; -- (void)overrideVersionPartWith:(NSString *)version -DEPRECATED_MSG_ATTRIBUTE("Renamed `overrideGraphAPIVersion`"); - @end -/** - 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_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m similarity index 76% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m index 990be5f440..862a937079 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m @@ -73,6 +73,7 @@ static FBSDKAccessToken *_CreateExpiredAccessToken(FBSDKAccessToken *accessToken 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 @@ -103,8 +104,6 @@ NSURLSessionDataDelegate #endif > -@property (nonatomic, strong) NSURLSession *session; -@property (nonatomic, strong) FBSDKURLSessionTask *task; @property (nonatomic, retain) NSMutableArray *requests; @property (nonatomic, assign) FBSDKGraphRequestConnectionState state; @property (nonatomic, strong) FBSDKLogger *logger; @@ -120,6 +119,7 @@ NSURLSessionDataDelegate NSString *_overrideVersionPart; NSUInteger _expectingResults; NSOperationQueue *_delegateQueue; + FBSDKURLSession *_session; #if !TARGET_OS_TV FBSDKGraphRequestMetadata *_recoveringRequestMetadata; FBSDKGraphErrorRecoveryProcessor *_errorRecoveryProcessor; @@ -133,13 +133,14 @@ NSURLSessionDataDelegate _timeout = g_defaultTimeout; _state = kStateCreated; _logger = [[FBSDKLogger alloc] initWithLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests]; + _session = [[FBSDKURLSession alloc] initWithDelegate:self delegateQueue:_delegateQueue]; } return self; } - (void)dealloc { - [_session invalidateAndCancel]; + [self.session invalidateAndCancel]; } #pragma mark - Public @@ -151,23 +152,27 @@ NSURLSessionDataDelegate } } ++ (NSTimeInterval)defaultConnectionTimeout { + return g_defaultTimeout; +} + - (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler + completionHandler:(FBSDKGraphRequestBlock)handler { - [self addRequest:request batchEntryName:nil completionHandler:handler]; + [self addRequest:request batchEntryName:@"" completionHandler:handler]; } - (void)addRequest:(FBSDKGraphRequest *)request batchEntryName:(NSString *)name - completionHandler:(FBSDKGraphRequestHandler)handler + completionHandler:(FBSDKGraphRequestBlock)handler { - NSDictionary *batchParams = (name)? @{kBatchEntryName : name } : nil; + NSDictionary *batchParams = name.length > 0 ? @{kBatchEntryName : name } : nil; [self addRequest:request batchParameters:batchParams completionHandler:handler]; } - (void)addRequest:(FBSDKGraphRequest *)request batchParameters:(NSDictionary *)batchParameters - completionHandler:(FBSDKGraphRequestHandler)handler + completionHandler:(FBSDKGraphRequestBlock)handler { if (self.state != kStateCreated) { @throw [NSException exceptionWithName:NSInternalInconsistencyException @@ -181,25 +186,10 @@ NSURLSessionDataDelegate [self.requests addObject:metadata]; } -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler - batchEntryName:(NSString *)name -{ - [self addRequest:request batchEntryName:name completionHandler:handler]; -} - -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler - batchParameters:(NSDictionary *)batchParameters -{ - [self addRequest:request batchParameters:batchParameters completionHandler:handler]; -} - - (void)cancel { self.state = kStateCancelled; - [self.task cancel]; - [self cleanUpSession]; + [self.session invalidateAndCancel]; } - (void)overrideGraphAPIVersion:(NSString *)version @@ -209,17 +199,25 @@ NSURLSessionDataDelegate } } -- (void)overrideVersionPartWith:(NSString *)version -{ - [self overrideGraphAPIVersion:version]; -} - - (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; @@ -236,22 +234,22 @@ NSURLSessionDataDelegate [self logRequest:request bodyLength:0 bodyLogger:nil attachmentLogger:nil]; _requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds]; - FBSDKURLSessionTaskHandler handler = ^(NSError *error, - NSURLResponse *response, - NSData *responseData) { - [self completeFBSDKURLSessionWithResponse:response - data:responseData - networkError:error]; + 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]; + } }; - - if (!self.session) { - self.session = [self defaultSession]; - } - - self.task = [[FBSDKURLSessionTask alloc] initWithRequest:request - fromSession:self.session - completionHandler:handler]; - [self.task start]; + [self.session executeURLRequest:request completionHandler:completionHanlder]; id delegate = self.delegate; if ([delegate respondsToSelector:@selector(requestConnectionWillBeginLoading:)]) { @@ -265,11 +263,22 @@ NSURLSessionDataDelegate } } +- (NSOperationQueue *)delegateQueue +{ + return _delegateQueue; +} + - (void)setDelegateQueue:(NSOperationQueue *)queue { + _session.delegateQueue = queue; _delegateQueue = queue; } +- (FBSDKURLSession *)session +{ + return _session; +} + #pragma mark - Private methods (request generation) // @@ -289,7 +298,10 @@ NSURLSessionDataDelegate } if (batchToken) { - metadata.request.parameters[kAccessTokenKey] = batchToken; + NSMutableDictionary *params = [NSMutableDictionary + dictionaryWithDictionary:metadata.request.parameters]; + params[kAccessTokenKey] = batchToken; + metadata.request.parameters = params; [self registerTokenToOmitFromLog:batchToken]; } @@ -322,7 +334,7 @@ NSURLSessionDataDelegate logger:(FBSDKLogger *)logger { [attachments enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - value = [FBSDKInternalUtility convertRequestValue:value]; + value = [FBSDKBasicUtility convertRequestValue:value]; if ([value isKindOfClass:[NSString class]]) { if (addFormData) { [body appendWithKey:key formValue:(NSString *)value logger:logger]; @@ -367,7 +379,7 @@ NSURLSessionDataDelegate batchToken:[batchToken isEqualToString:individualToken] ? nil : individualToken]; } - NSString *jsonBatch = [FBSDKInternalUtility JSONStringForObject:batch error:NULL invalidObjectHandler:NULL]; + NSString *jsonBatch = [FBSDKBasicUtility JSONStringForObject:batch error:NULL invalidObjectHandler:NULL]; [body appendWithKey:kBatchKey formValue:jsonBatch logger:logger]; if (batchToken) { @@ -472,21 +484,31 @@ NSURLSessionDataDelegate addFormData:NO logger:attachmentLogger]; - NSURL *url = [FBSDKInternalUtility facebookURLWithHostPrefix:kGraphURLPrefix path:nil queryParameters:nil defaultVersion:_overrideVersionPart error:NULL]; + NSURL *url = [FBSDKInternalUtility + facebookURLWithHostPrefix:kGraphURLPrefix + path:@"" + queryParameters:@{} + defaultVersion:_overrideVersionPart + error:NULL]; + request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:timeout]; request.HTTPMethod = @"POST"; } - request.HTTPBody = body.data; - NSUInteger bodyLength = body.data.length / 1024; - + 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:bodyLength bodyLogger:bodyLogger attachmentLogger:attachmentLogger]; + [self logRequest:request bodyLength:(request.HTTPBody.length / 1024) bodyLogger:bodyLogger attachmentLogger:attachmentLogger]; return request; } @@ -503,9 +525,12 @@ NSURLSessionDataDelegate // - (NSString *)urlStringForSingleRequest:(FBSDKGraphRequest *)request forBatch:(BOOL)forBatch { - request.parameters[@"format"] = @"json"; - request.parameters[@"sdk"] = kSDK; - request.parameters[@"include_headers"] = @"false"; + NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:request.parameters]; + params[@"format"] = @"json"; + params[@"sdk"] = kSDK; + params[@"include_headers"] = @"false"; + + request.parameters = params; NSString *baseURL; if (forBatch) { @@ -513,7 +538,8 @@ NSURLSessionDataDelegate } else { NSString *token = [self accessTokenWithRequest:request]; if (token) { - [request.parameters setValue:token forKey:kAccessTokenKey]; + [params setValue:token forKey:kAccessTokenKey]; + request.parameters = params; [self registerTokenToOmitFromLog:token]; } @@ -530,7 +556,12 @@ NSURLSessionDataDelegate } } - baseURL = [FBSDKInternalUtility facebookURLWithHostPrefix:prefix path:request.graphPath queryParameters:nil defaultVersion:request.version error:NULL].absoluteString; + baseURL = [FBSDKInternalUtility + facebookURLWithHostPrefix:prefix + path:request.graphPath + queryParameters:@{} + defaultVersion:request.version + error:NULL].absoluteString; } NSString *url = [FBSDKGraphRequest serializeURL:baseURL @@ -554,16 +585,16 @@ NSURLSessionDataDelegate } NSArray *results = nil; - _URLResponse = (NSHTTPURLResponse *)response; + _urlResponse = (NSHTTPURLResponse *)response; if (response) { NSAssert([response isKindOfClass:[NSHTTPURLResponse class]], @"Expected NSHTTPURLResponse, got %@", response); - NSInteger statusCode = _URLResponse.statusCode; + NSInteger statusCode = _urlResponse.statusCode; if (!error && [response.MIMEType hasPrefix:@"image"]) { - error = [NSError fbErrorWithCode:FBSDKErrorGraphRequestNonTextMimeTypeReturned + 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 { @@ -572,13 +603,13 @@ NSURLSessionDataDelegate statusCode:statusCode]; } } else if (!error) { - error = [NSError fbErrorWithCode:FBSDKErrorUnknown + error = [FBSDKError errorWithCode:FBSDKErrorUnknown message:@"Missing NSURLResponse"]; } if (!error) { if (self.requests.count != results.count) { - error = [NSError fbErrorWithCode:FBSDKErrorGraphRequestProtocolMismatch + 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", @@ -599,7 +630,7 @@ NSURLSessionDataDelegate [self completeWithResults:results networkError:error]; - [self cleanUpSession]; + [self.session invalidateAndCancel]; } // @@ -617,7 +648,7 @@ NSURLSessionDataDelegate // - (NSArray *)parseJSONResponse:(NSData *)data error:(NSError **)error - statusCode:(NSInteger)statusCode; + 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. @@ -628,10 +659,8 @@ NSURLSessionDataDelegate if (responseUTF8 == nil) { NSString *base64Data = data.length != 0 ? [data base64EncodedStringWithOptions:0] : @""; if (base64Data != nil) { - [FBSDKAppEvents logImplicitEvent:@"fb_response_invalid_utf8" - valueToSum:nil - parameters:nil - accessToken:nil]; + [FBSDKAppEvents logInternalEvent:@"fb_response_invalid_utf8" + isImplicitlyLogged:YES]; } } @@ -700,7 +729,7 @@ NSURLSessionDataDelegate { id parsed = nil; if (!(*error) && [utf8 isKindOfClass:[NSString class]]) { - parsed = [FBSDKInternalUtility objectForJSONString:utf8 error:error]; + 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) { @@ -708,9 +737,9 @@ NSURLSessionDataDelegate // 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 = [FBSDKInternalUtility JSONStringForObject:original error:NULL invalidObjectHandler:NULL]; + NSString *jsonrep = [FBSDKBasicUtility JSONStringForObject:original error:NULL invalidObjectHandler:NULL]; NSError *reparseError = nil; - parsed = [FBSDKInternalUtility objectForJSONString:jsonrep error:&reparseError]; + parsed = [FBSDKBasicUtility objectForJSONString:jsonrep error:&reparseError]; if (!reparseError) { *error = nil; } @@ -793,43 +822,14 @@ NSURLSessionDataDelegate }; - FBSDKSystemAccountStoreAdapter *adapter = [FBSDKSystemAccountStoreAdapter sharedInstance]; NSString *metadataTokenString = metadata.request.tokenString; NSString *currentTokenString = [FBSDKAccessToken currentAccessToken].tokenString; - NSString *accountStoreTokenString = adapter.accessTokenString; - BOOL isAccountStoreLogin = [metadataTokenString isEqualToString:accountStoreTokenString]; - if ([metadataTokenString isEqualToString:currentTokenString] || isAccountStoreLogin) { + if ([metadataTokenString isEqualToString:currentTokenString]) { NSInteger errorCode = [error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue]; NSInteger errorSubcode = [error.userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] integerValue]; if (errorCode == 190 || errorCode == 102) { - if (isAccountStoreLogin) { - if (errorSubcode == 460) { - // For iOS6, when the password is changed on the server, the system account store - // will continue to issue the old token until the user has changed the - // password AND _THEN_ a renew call is made. To prevent opening - // with an old token which would immediately be closed, we tell our adapter - // that we want to force a blocking renew until success. - adapter.forceBlockingRenew = YES; - } else { - [adapter renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *renewError) { - NSOperationQueue *queue = self->_delegateQueue ?: [NSOperationQueue mainQueue]; - [queue addOperationWithBlock:^{ - clearToken(errorSubcode); - finishAndInvokeCompletionHandler(); - }]; - }]; - return; - } - } clearToken(errorSubcode); - } else if (errorCode >= 200 && errorCode < 300) { - // permission error - [adapter renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *renewError) { - NSOperationQueue *queue = self->_delegateQueue ?: [NSOperationQueue mainQueue]; - [queue addOperationWithBlock:finishAndInvokeCompletionHandler]; - }]; - return; } } #endif @@ -873,17 +873,17 @@ NSURLSessionDataDelegate if ([errorDictionary isKindOfClass:[NSDictionary class]]) { NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_subcode"] forKey:FBSDKGraphRequestErrorGraphErrorSubcodeKey]; + [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. - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_msg"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"message"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_user_title"] forKey:FBSDKErrorLocalizedTitleKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_user_msg"] forKey:FBSDKErrorLocalizedDescriptionKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:errorDictionary[@"error_user_msg"] forKey:NSLocalizedDescriptionKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:result[@"code"] forKey:FBSDKGraphRequestErrorHTTPStatusCodeKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:result forKey:FBSDKGraphRequestErrorParsedJSONResponseKey]; + [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] @@ -892,14 +892,14 @@ NSURLSessionDataDelegate if ([errorDictionary[@"is_transient"] boolValue]) { userInfo[FBSDKGraphRequestErrorKey] = @(FBSDKGraphRequestErrorTransient); } else { - [FBSDKInternalUtility dictionary:userInfo setObject:@(recoveryConfiguration.errorCategory) forKey:FBSDKGraphRequestErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:@(recoveryConfiguration.errorCategory) forKey:FBSDKGraphRequestErrorKey]; } - [FBSDKInternalUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryDescription forKey:NSLocalizedRecoverySuggestionErrorKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryOptionDescriptions forKey:NSLocalizedRecoveryOptionsErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryDescription forKey:NSLocalizedRecoverySuggestionErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryOptionDescriptions forKey:NSLocalizedRecoveryOptionsErrorKey]; FBSDKErrorRecoveryAttempter *attempter = [FBSDKErrorRecoveryAttempter recoveryAttempterFromConfiguration:recoveryConfiguration]; - [FBSDKInternalUtility dictionary:userInfo setObject:attempter forKey:NSRecoveryAttempterErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:attempter forKey:NSRecoveryAttempterErrorKey]; - return [NSError fbErrorWithCode:FBSDKErrorGraphRequestGraphAPI + return [FBSDKError errorWithCode:FBSDKErrorGraphRequestGraphAPI userInfo:userInfo message:nil underlyingError:nil]; @@ -909,7 +909,7 @@ NSURLSessionDataDelegate return nil; } -- (NSError *)errorWithCode:(FBSDKError)code +- (NSError *)errorWithCode:(FBSDKCoreError)code statusCode:(NSInteger)statusCode parsedJSONResponse:(id)response innerError:(NSError *)innerError @@ -937,6 +937,93 @@ NSURLSessionDataDelegate 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 @@ -985,6 +1072,8 @@ NSURLSessionDataDelegate } } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + (NSString *)userAgent { static NSString *agent = nil; @@ -992,26 +1081,21 @@ NSURLSessionDataDelegate dispatch_once(&onceToken, ^{ agent = [NSString stringWithFormat:@"%@.%@", kUserAgentBase, FBSDK_VERSION_STRING]; }); - + NSString *agentWithSuffix = nil; if ([FBSDKSettings userAgentSuffix]) { - return [NSString stringWithFormat:@"%@/%@", agent, [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 agent; -} -- (NSURLSession *)defaultSession -{ - NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; - return [NSURLSession sessionWithConfiguration:config - delegate:self - delegateQueue:_delegateQueue]; -} - -- (void)cleanUpSession -{ - [self.session invalidateAndCancel]; - self.session = nil; + return agentWithSuffix ?: agent; } +#pragma clang diagnostic pop #pragma mark - NSURLSessionDataDelegate diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h similarity index 95% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h index 7ad50dc42f..ea07c7827e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h @@ -18,9 +18,12 @@ #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; @@ -53,3 +56,5 @@ NS_DESIGNATED_INITIALIZER; @property (nonatomic, copy, readonly) NSString *filename; @end + +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m similarity index 100% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h index d90e99e9ab..ccc976e3fa 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(Base64) @interface FBSDKBase64 : NSObject /** diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h index b94cd470cb..6a461dcd08 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h @@ -16,10 +16,17 @@ // IN AN ACTION OF 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 + #import +#if SWIFT_PACKAGE +#import "FBSDKCoreKit.h" +#else #import +#endif #import "FBSDKBridgeAPIProtocol.h" #import "FBSDKBridgeAPIProtocolType.h" @@ -56,3 +63,5 @@ NS_SWIFT_NAME(shared); @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 index 7e4e339621..09324008d4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -27,10 +31,17 @@ typedef void (^FBSDKAuthenticationCompletionHandler)(NSURL *_Nullable callbackUR - (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 @@ -209,11 +220,11 @@ didFinishLaunchingWithOptions:(NSDictionary * self->_pendingRequestCompletionBlock = nil; NSError *openedURLError; if ([request.scheme hasPrefix:@"http"]) { - openedURLError = [NSError fbErrorWithCode:FBSDKErrorBrowserUnavailable - message:@"the app switch failed because the browser is unavailable"]; + openedURLError = [FBSDKError errorWithCode:FBSDKErrorBrowserUnavailable + message:@"the app switch failed because the browser is unavailable"]; } else { - openedURLError = [NSError fbErrorWithCode:FBSDKErrorAppVersionUnsupported - message:@"the app switch failed because the destination app is out of date"]; + openedURLError = [FBSDKError errorWithCode:FBSDKErrorAppVersionUnsupported + message:@"the app switch failed because the destination app is out of date"]; } FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request error:openedURLError]; @@ -314,6 +325,11 @@ didFinishLaunchingWithOptions:(NSDictionary * _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]; } @@ -321,9 +337,9 @@ didFinishLaunchingWithOptions:(NSDictionary * - (void)_setSessionCompletionHandlerFromHandler:(void(^)(BOOL, NSError *))handler { - __weak typeof(self) weakSelf = self; + __weak FBSDKBridgeAPI *weakSelf = self; _authenticationSessionCompletionHandler = ^ (NSURL *aURL, NSError *error) { - typeof(self) strongSelf = weakSelf; + FBSDKBridgeAPI *strongSelf = weakSelf; strongSelf->_isRequestingSFAuthenticationSession = NO; handler(error == nil, error); if (error == nil) { @@ -411,4 +427,15 @@ didFinishLaunchingWithOptions:(NSDictionary * _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/FBSDKBridgeAPICrypto.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m deleted file mode 100644 index 80abc9617a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.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 "FBSDKBridgeAPICrypto.h" - -#import "FBSDKBridgeAPIProtocol.h" -#import "FBSDKConstants.h" -#import "FBSDKCrypto.h" -#import "FBSDKError.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" -#import "FBSDKUtility.h" - -static NSString *const FBSDKBridgeAPICryptoCipherKey = @"cipher"; -static NSString *const FBSDKBridgeAPICryptoCipherKeyKey = @"cipher_key"; -static NSString *g_cipherKey = nil; - -@implementation FBSDKBridgeAPICrypto - -#pragma mark - Class Methods - -+ (void)addCipherKeyToQueryParameters:(NSMutableDictionary *)queryParameters -{ - [FBSDKInternalUtility dictionary:queryParameters setObject:[self _cipherKey] forKey:FBSDKBridgeAPICryptoCipherKeyKey]; -} - -+ (NSDictionary *)decryptResponseForRequest:(FBSDKBridgeAPIRequest *)request - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef -{ - if (errorRef != NULL) { - *errorRef = nil; - } - NSString *cipher = queryParameters[FBSDKBridgeAPICryptoCipherKey]; - if (!cipher) { - return queryParameters ?: @{}; - } - NSString *version = queryParameters[FBSDKBridgeAPIVersionKey]; - NSString *cipherKey = [self _cipherKey]; - if (!version || !cipherKey) { - if (errorRef != NULL) { - NSDictionary *userInfo = @{ - FBSDKErrorArgumentValueKey: queryParameters, - }; - *errorRef = [NSError fbErrorWithCode:FBSDKErrorEncryption - userInfo:userInfo - message:@"Error decrypting incoming query parameters." - underlyingError:nil]; - } - return nil; - } - NSArray *additionalSignedDataArray = @[ - [NSBundle mainBundle].bundleIdentifier, - [FBSDKSettings appID] ?: @"", - @"bridge", - request.methodName ?: @"", - version, - ]; - NSString *additionalSignedDataString = [additionalSignedDataArray componentsJoinedByString:@":"]; - NSData *additionalSignedData = [additionalSignedDataString dataUsingEncoding:NSUTF8StringEncoding]; - FBSDKCrypto *crypto = [[FBSDKCrypto alloc] initWithMasterKey:cipherKey]; - NSData *decryptedData = [crypto decrypt:cipher additionalSignedData:additionalSignedData]; - if (!decryptedData) { - if (errorRef != NULL) { - NSDictionary *userInfo = @{ - FBSDKErrorArgumentValueKey: @{ - @"cipher": cipher, - @"bundleIdentifier": additionalSignedDataArray[0], - @"appID": additionalSignedDataArray[1], - @"host": additionalSignedDataArray[2], - @"methodName": additionalSignedDataArray[3], - @"version": additionalSignedDataArray[4], - }, - }; - *errorRef = [NSError fbErrorWithCode:FBSDKErrorEncryption - userInfo:userInfo - message:@"Error decrypting incoming query parameters." - underlyingError:nil]; - } - return nil; - } - NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding]; - NSDictionary *decryptedDictionary = [FBSDKUtility dictionaryWithQueryString:decryptedString]; - NSMutableDictionary *decryptedQueryParameters = [[NSMutableDictionary alloc] initWithDictionary:decryptedDictionary]; - decryptedQueryParameters[FBSDKBridgeAPIVersionKey] = version; - return [decryptedQueryParameters copy]; -} - -+ (void)reset -{ - [self _resetCipherKey]; -} - -#pragma mark - Helper Methods - -+ (NSString *)_cipherKey -{ - if (g_cipherKey) { - return g_cipherKey; - } - g_cipherKey = [[[NSUserDefaults standardUserDefaults] stringForKey:FBSDKBridgeAPICryptoCipherKeyKey] copy]; - if (g_cipherKey) { - return g_cipherKey; - } - return [self _resetCipherKey]; -} - -+ (NSString *)_resetCipherKey -{ - g_cipherKey = [[FBSDKCrypto makeMasterKey] copy]; - [[NSUserDefaults standardUserDefaults] setObject:g_cipherKey forKey:FBSDKBridgeAPICryptoCipherKeyKey]; - return g_cipherKey; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h index 0a5a9b437e..a109f68266 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -26,6 +30,7 @@ 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 @@ -40,3 +45,5 @@ FOUNDATION_EXPORT NSString *const FBSDKBridgeAPIVersionKey; 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 index b04e3592bb..00f2bc589a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h @@ -16,10 +16,16 @@ // IN AN ACTION OF 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 index 4455e2268b..74c7809af1 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -33,3 +37,5 @@ 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 index 04689a3a7c..bbc25d6455 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h @@ -16,12 +16,21 @@ // IN AN ACTION OF 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; @@ -44,3 +53,5 @@ - (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 index 608bdce4a8..fb8f2ca94a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m @@ -16,16 +16,18 @@ // IN AN ACTION OF 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 "FBSDKBridgeAPICrypto.h" #import "FBSDKBridgeAPIProtocolNativeV1.h" #import "FBSDKBridgeAPIProtocolWebV1.h" #import "FBSDKBridgeAPIProtocolWebV2.h" #import "FBSDKInternalUtility.h" #import "FBSDKSettings.h" -#import "FBSDKUtility.h" NSString *const FBSDKBridgeAPIAppIDKey = @"app_id"; NSString *const FBSDKBridgeAPISchemeSuffixKey = @"scheme_suffix"; @@ -114,13 +116,12 @@ NSString *const FBSDKBridgeAPIVersionKey = @"version"; [FBSDKInternalUtility validateURLSchemes]; - NSDictionary *requestQueryParameters = [FBSDKUtility dictionaryWithQueryString:requestURL.query]; + NSDictionary *requestQueryParameters = [FBSDKBasicUtility dictionaryWithQueryString:requestURL.query]; NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:requestQueryParameters]; - [FBSDKBridgeAPICrypto addCipherKeyToQueryParameters:queryParameters]; - [FBSDKInternalUtility dictionary:queryParameters setObject:[FBSDKSettings appID] forKey:FBSDKBridgeAPIAppIDKey]; - [FBSDKInternalUtility dictionary:queryParameters - setObject:[FBSDKSettings appURLSchemeSuffix] - forKey:FBSDKBridgeAPISchemeSuffixKey]; + [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 @@ -152,3 +153,5 @@ NSString *const FBSDKBridgeAPIVersionKey = @"version"; } @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 index a04cd9086c..8cbe0cd409 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h @@ -16,12 +16,21 @@ // IN AN ACTION OF 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; @@ -40,3 +49,5 @@ @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 index 282d4c3e87..e630cdd714 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m @@ -16,15 +16,17 @@ // IN AN ACTION OF 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 "FBSDKBridgeAPICrypto.h" #import "FBSDKBridgeAPIProtocol.h" #import "FBSDKBridgeAPIProtocolType.h" #import "FBSDKBridgeAPIRequest+Private.h" #import "FBSDKInternalUtility.h" #import "FBSDKTypeUtility.h" -#import "FBSDKUtility.h" @interface FBSDKBridgeAPIResponse () - (instancetype)initWithRequest:(FBSDKBridgeAPIRequest *)request @@ -54,24 +56,23 @@ NS_DESIGNATED_INITIALIZER; FBSDKBridgeAPIProtocolType protocolType = request.protocolType; switch (protocolType) { case FBSDKBridgeAPIProtocolTypeNative:{ - if (![FBSDKInternalUtility isFacebookBundleIdentifier:sourceApplication]) { - [FBSDKBridgeAPICrypto reset]; - return nil; + if (@available(iOS 13, *)) { + break; + } else { + if (![FBSDKInternalUtility isFacebookBundleIdentifier:sourceApplication]) { + return nil; + } + break; } - break; } case FBSDKBridgeAPIProtocolTypeWeb:{ if (![FBSDKInternalUtility isSafariBundleIdentifier:sourceApplication]) { - [FBSDKBridgeAPICrypto reset]; return nil; } break; } } - NSDictionary *queryParameters = [FBSDKUtility dictionaryWithQueryString:responseURL.query]; - queryParameters = [FBSDKBridgeAPICrypto decryptResponseForRequest:request - queryParameters:queryParameters - error:errorRef]; + NSDictionary *const queryParameters = [FBSDKBasicUtility dictionaryWithQueryString:responseURL.query]; if (!queryParameters) { return nil; } @@ -126,3 +127,5 @@ NS_DESIGNATED_INITIALIZER; } @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 index 54cd1674b7..ec52281ec4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h @@ -16,6 +16,11 @@ // IN AN ACTION OF 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 @@ -39,3 +44,5 @@ - (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 index ba001f09b3..48da81df54 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -51,6 +55,7 @@ typedef struct } FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct; FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys; +NS_SWIFT_NAME(BridgeAPIProtocolNativeV1) @interface FBSDKBridgeAPIProtocolNativeV1 : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -65,7 +70,9 @@ NS_DESIGNATED_INITIALIZER; @property (nonatomic, copy, readonly) NSString *appScheme; @property (nonatomic, assign, readonly) NSUInteger dataLengthThreshold; -@property (nonatomic, assign, readonly) BOOL includeAppIcon; +@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 index 00b1b3c2ac..0bdce35336 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -136,8 +140,8 @@ static const struct NSString *const path = [@"/" stringByAppendingString:methodName]; NSMutableDictionary *const queryParameters = [[NSMutableDictionary alloc] init]; - [FBSDKInternalUtility dictionary:queryParameters setObject:methodVersion - forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodVersion]; + [FBSDKBasicUtility dictionary:queryParameters setObject:methodVersion + forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodVersion]; if (parameters.count) { NSString *const parametersString = [self _JSONStringForObject:parameters enablePasteboard:YES error:errorRef]; @@ -149,9 +153,9 @@ static const struct options:NSCaseInsensitiveSearch range:NSMakeRange(0, parametersString.length)]; - [FBSDKInternalUtility dictionary:queryParameters - setObject:escapedParametersString - forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodArgs]; + [FBSDKBasicUtility dictionary:queryParameters + setObject:escapedParametersString + forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodArgs]; } NSDictionary *const bridgeParameters = [self _bridgeParametersWithActionID:actionID error:errorRef]; @@ -162,9 +166,9 @@ static const struct if (!bridgeParametersString) { return nil; } - [FBSDKInternalUtility dictionary:queryParameters - setObject:bridgeParametersString - forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.bridgeArgs]; + [FBSDKBasicUtility dictionary:queryParameters + setObject:bridgeParametersString + forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.bridgeArgs]; return [FBSDKInternalUtility URLWithScheme:self.appScheme @@ -187,11 +191,11 @@ static const struct } NSError *error; NSString *bridgeParametersJSON = queryParameters[FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs]; - NSDictionary *bridgeParameters = [FBSDKInternalUtility objectForJSONString:bridgeParametersJSON error:&error]; + NSDictionary *bridgeParameters = [FBSDKBasicUtility objectForJSONString:bridgeParametersJSON error:&error]; bridgeParameters = [FBSDKTypeUtility dictionaryValue:bridgeParameters]; if (!bridgeParameters) { if (error && (errorRef != NULL)) { - *errorRef = [NSError fbInvalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs + *errorRef = [FBSDKError invalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs value:bridgeParametersJSON message:@"Invalid bridge_args." underlyingError:error]; @@ -213,10 +217,10 @@ static const struct return nil; } NSString *resultParametersJSON = queryParameters[FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults]; - NSDictionary *resultParameters = [FBSDKInternalUtility objectForJSONString:resultParametersJSON error:&error]; + NSDictionary *resultParameters = [FBSDKBasicUtility objectForJSONString:resultParametersJSON error:&error]; if (!resultParameters) { if (errorRef != NULL) { - *errorRef = [NSError fbInvalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults + *errorRef = [FBSDKError invalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults value:resultParametersJSON message:@"Invalid method_results." underlyingError:error]; @@ -249,14 +253,14 @@ static const struct - (NSDictionary *)_bridgeParametersWithActionID:(NSString *)actionID error:(NSError *__autoreleasing *)errorRef { NSMutableDictionary *bridgeParameters = [[NSMutableDictionary alloc] init]; - [FBSDKInternalUtility dictionary:bridgeParameters setObject:actionID - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.actionID]; - [FBSDKInternalUtility dictionary:bridgeParameters setObject:[self _appIcon] - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.appIcon]; - [FBSDKInternalUtility dictionary:bridgeParameters setObject:[FBSDKSettings displayName] - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.appName]; - [FBSDKInternalUtility dictionary:bridgeParameters setObject:[FBSDKSettings sdkVersion] - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.sdkVersion]; + [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; } @@ -276,7 +280,7 @@ static const struct - (NSString *)_JSONStringForObject:(id)object enablePasteboard:(BOOL)enablePasteboard error:(NSError **)errorRef { __block BOOL didAddToPasteboard = NO; - return [FBSDKInternalUtility JSONStringForObject:object error:errorRef invalidObjectHandler:^id(id invalidObject, BOOL *stop) { + 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; @@ -290,9 +294,9 @@ static const struct if (didAddToPasteboard || !enablePasteboard || !self->_pasteboard || (data.length < self->_dataLengthThreshold)) { dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.isBase64] = @YES; dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.tag] = dataTag; - [FBSDKInternalUtility dictionary:dictionary - setObject:[FBSDKBase64 encodeData:data] - forKey:FBSDKBridgeAPIProtocolNativeV1DataKeys.value]; + [FBSDKBasicUtility dictionary:dictionary + setObject:[FBSDKBase64 encodeData:data] + forKey:FBSDKBridgeAPIProtocolNativeV1DataKeys.value]; } else { dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.isPasteboard] = @YES; dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.tag] = dataTag; @@ -333,3 +337,5 @@ static const struct } @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 index c7b28f4f2c..5127fc806f 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h @@ -16,10 +16,17 @@ // IN AN ACTION OF 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 index 51af66fe17..7258808b65 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -43,15 +47,15 @@ { NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:parameters]; queryParameters[@"display"] = @"touch"; - NSString *bridgeArgs = [FBSDKInternalUtility JSONStringForObject:@{ FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY: actionID } - error:NULL - invalidObjectHandler:NULL]; + 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]; - [FBSDKInternalUtility dictionary:queryParameters setObject:redirectURL forKey:@"redirect_uri"]; + [FBSDKBasicUtility dictionary:queryParameters setObject:redirectURL forKey:@"redirect_uri"]; [queryParameters addEntriesFromDictionary:parameters]; return [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" path:[@"/dialog/" stringByAppendingString:methodName] @@ -81,7 +85,7 @@ } default:{ if (errorRef != NULL) { - *errorRef = [NSError fbErrorWithCode:errorCode + *errorRef = [FBSDKError errorWithCode:errorCode message:[FBSDKTypeUtility stringValue:queryParameters[@"error_message"]]]; } return nil; @@ -91,10 +95,10 @@ NSError *error; NSString *bridgeParametersJSON = [FBSDKTypeUtility stringValue:queryParameters[FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY]]; - NSDictionary *bridgeParameters = [FBSDKInternalUtility objectForJSONString:bridgeParametersJSON error:&error]; + NSDictionary *bridgeParameters = [FBSDKBasicUtility objectForJSONString:bridgeParametersJSON error:&error]; if (!bridgeParameters) { if (error && (errorRef != NULL)) { - *errorRef = [NSError fbInvalidArgumentErrorWithName:FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY + *errorRef = [FBSDKError invalidArgumentErrorWithName:FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY value:bridgeParametersJSON message:nil underlyingError:error]; @@ -113,3 +117,5 @@ } @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 index 3d7e340409..19e7a58dd4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h @@ -16,10 +16,17 @@ // IN AN ACTION OF 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 index 36b3bc00fb..9f36ec59e9 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -24,7 +28,6 @@ #import "FBSDKInternalUtility.h" #import "FBSDKServerConfiguration.h" #import "FBSDKServerConfigurationManager.h" -#import "FBSDKUtility.h" @implementation FBSDKBridgeAPIProtocolWebV2 { @@ -51,9 +54,9 @@ NSDictionary *queryParameters = nil; if (actionID) { NSDictionary *bridgeArgs = @{ FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.actionID: actionID }; - NSString *bridgeArgsString = [FBSDKInternalUtility JSONStringForObject:bridgeArgs - error:NULL - invalidObjectHandler:NULL]; + NSString *bridgeArgsString = [FBSDKBasicUtility JSONStringForObject:bridgeArgs + error:NULL + invalidObjectHandler:NULL]; queryParameters = @{ FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs: bridgeArgsString }; } return [FBSDKInternalUtility appURLWithHost:@"bridge" path:methodName queryParameters:queryParameters error:errorRef]; @@ -65,7 +68,7 @@ if (!requestURL.scheme) { requestURL = [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" path:requestURL.path - queryParameters:nil + queryParameters:@{} defaultVersion:@"" error:errorRef]; } @@ -83,7 +86,7 @@ FBSDKDialogConfiguration *dialogConfiguration = [serverConfiguration dialogConfigurationForDialogName:methodName]; if (!dialogConfiguration) { if (errorRef != NULL) { - *errorRef = [NSError fbErrorWithCode:FBSDKErrorDialogUnavailable message:nil]; + *errorRef = [FBSDKError errorWithCode:FBSDKErrorDialogUnavailable message:nil]; } return nil; } @@ -97,7 +100,7 @@ return nil; } - NSMutableDictionary *queryParameters = [[FBSDKUtility dictionaryWithQueryString:requestURL.query] mutableCopy]; + 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) { @@ -128,3 +131,5 @@ } @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 index ae84c5d29f..226bb9b447 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(Crypto) @interface FBSDKCrypto : NSObject /** @@ -33,35 +34,4 @@ */ + (NSString *)randomString:(NSUInteger)numOfBytes; -/** - Generate a fresh master key using SecRandomCopyBytes, the result is encoded in base64/. - */ -+ (NSString *)makeMasterKey; - -/** - Initialize with a base64-encoded master key. - - This key and the current derivation function will be used to generate the encryption key and the mac key. - */ -- (instancetype)initWithMasterKey:(NSString *)masterKey; - -/** - Initialize with base64-encoded encryption key and mac key. - */ -- (instancetype)initWithEncryptionKey:(NSString *)encryptionKey macKey:(NSString *)macKey; - -/** - Encrypt plainText and return the base64 encoded result. - - MAC computation involves additionalDataToSign. - */ -- (NSString *)encrypt:(NSData *)plainText additionalDataToSign:(NSData *)additionalDataToSign; - -/** - Decrypt base64EncodedCipherText. - - MAC computation involves additionalSignedData. - */ -- (NSData *)decrypt:(NSString *)base64EncodedCipherText additionalSignedData:(NSData *)additionalSignedData; - @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 index 7e17cc451a..f9365b8ce2 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m @@ -18,24 +18,9 @@ #import "FBSDKCrypto.h" -#import -#import -#import - #import "FBSDKBase64.h" #import "FBSDKDynamicFrameworkLoader.h" -static const uint8_t kFBSDK_CRYPTO_CURRENT_VERSION = 1; -static const uint8_t kFBSDK_CRYPTO_CURRENT_MASTER_KEY_LENGTH = 16; - -static inline void FBSDKCryptoWriteIntBigEndian(uint8_t *buffer, uint32_t value) -{ - buffer[3] = (uint8_t)(value & 0xff); - buffer[2] = (uint8_t)((value >> 8) & 0xff); - buffer[1] = (uint8_t)((value >> 16) & 0xff); - buffer[0] = (uint8_t)((value >> 24) & 0xff); -} - static inline void FBSDKCryptoBlankData(NSData *data) { if (!data) { @@ -44,47 +29,7 @@ static inline void FBSDKCryptoBlankData(NSData *data) bzero((void *) [data bytes], [data length]); } -// Note: the following simple derivation function is NOT suitable for passwords or weak keys -static inline NSData *FBSDKCryptoMakeSubKey(uint8_t *key, size_t len, uint32_t idx) -{ - if (!key || len < 10) { - return nil; - } - - size_t macBufferLength = 4; - uint8_t macBuffer[4]; - FBSDKCryptoWriteIntBigEndian(macBuffer, idx); - - uint8_t *result = malloc(CC_SHA256_DIGEST_LENGTH); - if (!result) { - return nil; - } - - CCHmac(kCCHmacAlgSHA256, key, len, macBuffer, macBufferLength, result); - - return [NSData dataWithBytesNoCopy:result length:CC_SHA256_DIGEST_LENGTH]; -} - @implementation FBSDKCrypto -{ - NSData *_encryptionKeyData; - NSData *_macKeyData; -} - -#pragma mark - Class Methods - -+ (NSString *)makeMasterKey -{ - NSData *masterKeyData = [FBSDKCrypto randomBytes:kFBSDK_CRYPTO_CURRENT_MASTER_KEY_LENGTH + 1]; - - // force the first byte to be the crypto version - uint8_t *first = (uint8_t *)masterKeyData.bytes; - *first = kFBSDK_CRYPTO_CURRENT_VERSION; - - NSString *masterKey = [FBSDKBase64 encodeData:masterKeyData]; - FBSDKCryptoBlankData(masterKeyData); - return masterKey; -} + (NSData *)randomBytes:(NSUInteger)numOfBytes { @@ -105,183 +50,4 @@ static inline NSData *FBSDKCryptoMakeSubKey(uint8_t *key, size_t len, uint32_t i return randomString; } -#pragma mark - Object Lifecycle - -- (instancetype)initWithMasterKey:(NSString *)masterKey -{ - if ((self = [super init])) { - NSData *masterKeyData = [FBSDKBase64 decodeAsData:masterKey]; - NSUInteger len = masterKeyData.length; - uint8_t *first = (uint8_t *)masterKeyData.bytes; - - if (len == 0 || first == nil || *first != kFBSDK_CRYPTO_CURRENT_VERSION) { - // only one version supported at the moment - return nil; - } - - _encryptionKeyData = FBSDKCryptoMakeSubKey(first+1, len-1, 1); - _macKeyData = FBSDKCryptoMakeSubKey(first+1, len-1, 2); - FBSDKCryptoBlankData(masterKeyData); - return self; - } else { - return nil; - } -} - -- (instancetype)initWithEncryptionKey:(NSString *)encryptionKey macKey:(NSString *)macKey -{ - if ((self = [super init])) { - _macKeyData = [FBSDKBase64 decodeAsData:macKey]; - _encryptionKeyData = [FBSDKBase64 decodeAsData:encryptionKey]; - } - return self; -} - -- (void)dealloc -{ - FBSDKCryptoBlankData(_encryptionKeyData); - FBSDKCryptoBlankData(_macKeyData); -} - -#pragma mark - Public Methods - -/** - * return base64_encode([VERSION 1 byte] + [MAC 32 bytes] + [IV 16 bytes] + [AES256(Padded Data, multiples of 16)] - */ -- (NSString *)encrypt:(NSData *)plainText additionalDataToSign:(NSData *)additionalDataToSign -{ - NSAssert(plainText.length <= INT_MAX, @""); - int plainTextLength = (int)plainText.length; - - uint8_t numPaddingBytes = kCCBlockSizeAES128 - (plainText.length % kCCBlockSizeAES128); // Pad 1 .. 16 bytes - int cipherDataLength = plainTextLength + numPaddingBytes; - size_t bufferSize = 1 + CC_SHA256_DIGEST_LENGTH + kCCBlockSizeAES128 + cipherDataLength; - int offsetMAC = 1; - int offsetIV = offsetMAC + CC_SHA256_DIGEST_LENGTH; - int offsetCipherData = offsetIV + kCCBlockSizeAES128; - - uint8_t *buffer = calloc(bufferSize, sizeof(uint8_t)); - buffer[0] = kFBSDK_CRYPTO_CURRENT_VERSION; // First byte is the version number - NSData *IV = [[self class] randomBytes:kCCBlockSizeAES128]; - memcpy(buffer + offsetIV, IV.bytes, IV.length); - - memcpy(buffer + offsetCipherData, plainText.bytes, plainTextLength); // Copy input in - fbsdkdfl_SecRandomCopyBytes([FBSDKDynamicFrameworkLoader loadkSecRandomDefault], - numPaddingBytes, - buffer + offsetCipherData + plainTextLength); // Random pad - buffer[offsetCipherData + cipherDataLength - 1] = numPaddingBytes; // Record the number of padded bytes at the end - - size_t numOutputBytes = 0; - CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, 0, - _encryptionKeyData.bytes, kCCKeySizeAES256, - IV.bytes, - buffer + offsetCipherData, cipherDataLength, - buffer + offsetCipherData, cipherDataLength, - &numOutputBytes); - - NSData *mac = [self _macForIV:IV - cipherData:[NSData dataWithBytesNoCopy:buffer + offsetCipherData length:cipherDataLength freeWhenDone:NO] - additionalDataToSign:additionalDataToSign]; - memcpy(buffer + offsetMAC, mac.bytes, CC_SHA256_DIGEST_LENGTH); - - if (cryptStatus == kCCSuccess) { - return [FBSDKBase64 encodeData:[NSData dataWithBytesNoCopy:buffer length:bufferSize]]; - } - free(buffer); - return nil; -} - -- (NSData *)decrypt:(NSString *)base64EncodedCipherText additionalSignedData:(NSData *)additionalSignedData -{ - NSData *cipherText = [FBSDKBase64 decodeAsData:base64EncodedCipherText]; - NSAssert(cipherText.length <= INT_MAX, @""); - int cipherTextLength = (int)cipherText.length; - - if (!cipherText || cipherTextLength < 1 + CC_SHA256_DIGEST_LENGTH + kCCBlockSizeAES128) { - return nil; - } - int cipherDataLength = cipherTextLength - (1 + CC_SHA256_DIGEST_LENGTH + kCCBlockSizeAES128); - if (cipherDataLength % kCCBlockSizeAES128 != 0) { - return nil; - } - uint8_t *buffer = (uint8_t *)cipherText.bytes; - - int offsetMAC = 1; - int offsetIV = offsetMAC + CC_SHA256_DIGEST_LENGTH; - int offsetCipherData = offsetIV + kCCBlockSizeAES128; - - if (buffer[0] != kFBSDK_CRYPTO_CURRENT_VERSION) { - return nil; // Version does not match - } - - NSData *IV = [NSData dataWithBytesNoCopy:buffer + offsetIV length:kCCBlockSizeAES128 freeWhenDone:NO]; - NSData *cipherData = [NSData dataWithBytesNoCopy:buffer + offsetCipherData length:cipherDataLength freeWhenDone:NO]; - NSData *mac = [self _macForIV:IV cipherData:cipherData additionalDataToSign:additionalSignedData]; - NSData *macFromStream = [NSData dataWithBytesNoCopy:buffer + offsetMAC length:CC_SHA256_DIGEST_LENGTH freeWhenDone:NO]; - if (![mac isEqualToData:macFromStream]) { - return nil; // MAC does not match - } - - - uint8_t *outputBuffer = malloc(cipherDataLength); - size_t numOutputBytes = 0; - CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0, - _encryptionKeyData.bytes, kCCKeySizeAES256, - IV.bytes, - buffer + offsetCipherData, cipherDataLength, - outputBuffer, cipherDataLength, - &numOutputBytes); - if (cryptStatus == kCCSuccess) { - int numPaddingBytes = outputBuffer[cipherDataLength - 1]; - if (!(numPaddingBytes >= 1 && numPaddingBytes <= kCCBlockSizeAES128)) { - numPaddingBytes = 0; - } - return [NSData dataWithBytesNoCopy:outputBuffer length:cipherDataLength - numPaddingBytes]; - } - free(outputBuffer); - return nil; -} - -#pragma mark - Helper Methods - -/** - * - * [IV 16 bytes] . [length of ciphertext 4 bytes] . [ciphertext] . [length of additionalDataToSign, 4 bytes] . [additionalDataToSign]) - * length is written in big-endian - */ -- (NSData *)_macForIV:(NSData *)IV cipherData:(NSData *)cipherData additionalDataToSign:(NSData *)additionalDataToSign -{ - NSAssert(cipherData.length <= INT_MAX, @""); - int cipherDataLength = (int)cipherData.length; - - NSAssert(additionalDataToSign.length <= INT_MAX, @""); - int additionalDataToSignLength = (int)additionalDataToSign.length; - - size_t macBufferLength = kCCBlockSizeAES128 + 4 + cipherData.length + 4 + additionalDataToSign.length; - uint8_t *macBuffer = malloc(macBufferLength); - int offsetIV = 0; - int offsetCipherTextLength = offsetIV + kCCBlockSizeAES128; - int offsetCipherText = offsetCipherTextLength + 4; - - int offsetAdditionalDataLength = offsetCipherText + cipherDataLength; - int offsetAdditionalData = offsetAdditionalDataLength + 4; - - // [IV 16 bytes] - memcpy(macBuffer + offsetIV, IV.bytes, kCCBlockSizeAES128); - // [length of ciphertext 4 bytes] - FBSDKCryptoWriteIntBigEndian(macBuffer + offsetCipherTextLength, cipherDataLength); - // [ciphertext] - memcpy(macBuffer + offsetCipherText, cipherData.bytes, cipherDataLength); - // [length of additionalDataToSign, 4 bytes] - FBSDKCryptoWriteIntBigEndian(macBuffer + offsetAdditionalDataLength, additionalDataToSignLength); - memcpy(macBuffer + offsetAdditionalData, additionalDataToSign.bytes, additionalDataToSignLength); - - uint8_t *result = malloc(CC_SHA256_DIGEST_LENGTH); - - CCHmac(kCCHmacAlgSHA256, _macKeyData.bytes, _macKeyData.length, macBuffer, macBufferLength, result); - free(macBuffer); - - return [NSData dataWithBytesNoCopy:result length:CC_SHA256_DIGEST_LENGTH]; -} - @end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h index 65d5e58bcf..af47bbc00d 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h @@ -18,10 +18,15 @@ #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. diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h index 96997007fa..6c5d3283e5 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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) @@ -23,3 +27,5 @@ - (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 index c4d40cb58e..78cfe3c301 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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; @@ -34,7 +38,9 @@ FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererUrl; webURL:(NSURL *)webURL isBackToReferrer:(BOOL)isBackToReferrer; -/*! return if this AppLink is to go back to referrer. */ +/** 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 index 062aba8dae..d194a2d058 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h @@ -18,10 +18,16 @@ #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; @@ -36,5 +42,9 @@ FOUNDATION_EXPORT NSString *const FBSDKApplicationDidBecomeActiveNotification; - (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/FBSDKAudioResourceLoader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h index 2c0557524a..a9875042d3 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h @@ -16,21 +16,31 @@ // IN AN ACTION OF 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 **)error; +- (BOOL)loadSound:(NSError *__autoreleasing *)errorRef; - (void)playSound; @end @interface FBSDKAudioResourceLoader (Subclass) -+ (NSString *)name; -+ (NSUInteger)version; -+ (NSData *)data; +@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 index b7ea5d7d21..2d1cafe28d 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -149,3 +153,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h index 5feed4f0f3..17fa527a1e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h @@ -16,20 +16,32 @@ // IN AN ACTION OF 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) id delegate; +@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 index e1c2e6d93a..b5a62eb062 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -76,3 +80,5 @@ } @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 index 2dfc683a4f..cd5a902c71 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h @@ -18,18 +18,97 @@ #import +#if SWIFT_PACKAGE +#import "FBSDKCoreKit.h" +#else #import +#endif + +#if defined FBSDKCOCOAPODS || defined BUCK #if !TARGET_OS_TV -#import "../AppEvents/Internal/Codeless/FBSDKViewHierarchy.h" -#import "../AppEvents/Internal/Codeless/FBSDKCodelessMacros.h" +#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 "FBSDKSystemAccountStoreAdapter.h" #import "FBSDKTriStateBOOL.h" #import "UI/FBSDKCloseIcon.h" #import "UI/FBSDKColor.h" @@ -49,7 +128,9 @@ #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" @@ -63,7 +144,13 @@ #import "FBSDKMath.h" #import "FBSDKSettings+Internal.h" #import "FBSDKSwizzler.h" -#import "FBSDKTypeUtility.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" @@ -72,6 +159,7 @@ #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" @@ -79,3 +167,5 @@ #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 index 20d0f778ec..04f821f20a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h @@ -16,9 +16,10 @@ // IN AN ACTION OF 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 + #define FBSDK_DEVICE_INFO_PARAM @"device_info" /* @@ -27,12 +28,13 @@ 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 */ -+ (NSString *)getDeviceInfo; +@property (class, nonatomic, copy, readonly) NSString *getDeviceInfo; /** Start the mDNS advertisement service for a device request @@ -56,3 +58,5 @@ + (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 index 4bc1bd9aaa..c2f5d538ae 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m @@ -53,7 +53,7 @@ static NSMapTable *g_mdnsAdvertisementServices; { struct utsname systemInfo; uname(&systemInfo); - NSDictionary *deviceInfo = @{ + NSDictionary *deviceInfo = @{ FBSDK_DEVICE_INFO_DEVICE: @(systemInfo.machine), FBSDK_DEVICE_INFO_MODEL: [UIDevice currentDevice].model, }; @@ -65,7 +65,7 @@ static NSMapTable *g_mdnsAdvertisementServices; return [[NSString alloc] initWithData:jsonDeviceInfo encoding:NSUTF8StringEncoding]; } -+ (BOOL)startAdvertisementService:(NSString *)loginCode withDelegate:(id)delegate; ++ (BOOL)startAdvertisementService:(NSString *)loginCode withDelegate:(id)delegate { static NSString *sdkVersion = nil; static dispatch_once_t onceToken; @@ -95,10 +95,8 @@ static NSMapTable *g_mdnsAdvertisementServices; port:0]; mdnsAdvertisementService.delegate = delegate; [mdnsAdvertisementService publishWithOptions:NSNetServiceNoAutoRename | NSNetServiceListenForConnections]; - [FBSDKAppEvents logImplicitEvent:FBSDKAppEventNameFBSDKSmartLoginService - valueToSum:nil - parameters:nil - accessToken:nil]; + [FBSDKAppEvents logInternalEvent:FBSDKAppEventNameFBSDKSmartLoginService + isImplicitlyLogged:YES]; [g_mdnsAdvertisementServices setObject:mdnsAdvertisementService forKey:delegate]; return YES; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h index d89d733e85..35d002c16e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h @@ -20,113 +20,7 @@ #import #import -/** - - 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. - */ -@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_BEGIN #pragma mark - Security APIs @@ -135,8 +29,8 @@ FOUNDATION_EXPORT int fbsdkdfl_SecRandomCopyBytes(SecRandomRef rnd, size_t count // These are local wrappers around Keychain API FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate); -FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemAdd(CFDictionaryRef attributes, CFTypeRef *result); -FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result); +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 @@ -237,3 +131,114 @@ FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTypePNG(void); 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 index e6b73f462a..6a01e44f1b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h @@ -18,76 +18,81 @@ #import -@interface NSError (FBSDKError) +NS_ASSUME_NONNULL_BEGIN -+ (NSError *)fbErrorWithCode:(NSInteger)code message:(NSString *)message; -+ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - message:(NSString *)message; +NS_SWIFT_NAME(SDKError) +@interface FBSDKError : NSObject -+ (NSError *)fbErrorWithCode:(NSInteger)code - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)errorWithCode:(NSInteger)code message:(nullable NSString *)message; -+ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)errorWithDomain:(NSErrorDomain)domain code:(NSInteger)code message:(nullable NSString *)message; -+ (NSError *)fbErrorWithCode:(NSInteger)code - userInfo:(NSDictionary *)userInfo - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)errorWithCode:(NSInteger)code + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - userInfo:(NSDictionary *)userInfo - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)errorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name - value:(id)value - message:(NSString *)message; ++ (NSError *)errorWithCode:(NSInteger)code + userInfo:(nullable NSDictionary *)userInfo + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(id)value - message:(NSString *)message; ++ (NSError *)errorWithDomain:(NSErrorDomain)domain + code:(NSInteger)code + userInfo:(nullable NSDictionary *)userInfo + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name - value:(id)value - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)invalidArgumentErrorWithName:(NSString *)name + value:(nullable id)value + message:(nullable NSString *)message; -+ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(id)value - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)invalidArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + value:(nullable id)value + message:(nullable NSString *)message; -+ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(NSString *)message; ++ (NSError *)invalidArgumentErrorWithName:(NSString *)name + value:(nullable id)value + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)invalidArgumentErrorWithDomain:(NSErrorDomain)domain + name:(NSString *)name + value:(nullable id)value + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name message:(NSString *)message; -+ (NSError *)fbRequiredArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - message:(NSString *)message; ++ (NSError *)invalidCollectionErrorWithName:(NSString *)name + collection:(id)collection + item:(id)item + message:(nullable NSString *)message; -+ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name - message:(NSString *)message - underlyingError:(NSError *)underlyingError; ++ (NSError *)invalidCollectionErrorWithName:(NSString *)name + collection:(id)collection + item:(id)item + message:(nullable NSString *)message + underlyingError:(nullable NSError *)underlyingError; -+ (NSError *)fbUnknownErrorWithMessage:(NSString *)message; ++ (NSError *)requiredArgumentErrorWithName:(NSString *)name message:(nullable NSString *)message; -@property (nonatomic, assign, readonly, getter=isNetworkError) BOOL networkError -NS_SWIFT_NAME(isNetworkError); ++ (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 index bad2aae914..10bbafea3e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m @@ -19,21 +19,176 @@ #import "FBSDKError.h" #import "FBSDKConstants.h" +#import "FBSDKErrorReport.h" +#import "FBSDKFeatureManager.h" #import "FBSDKInternalUtility.h" -#import "FBSDKTypeUtility.h" +#import "FBSDKSettings.h" -@implementation NSError (FBSDKError) +@implementation FBSDKError + +static BOOL isErrorReportEnabled = NO; #pragma mark - Class Methods -- (BOOL)isNetworkError ++ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message { - NSError *innerError = self.userInfo[NSUnderlyingErrorKey]; - if (innerError && innerError.isNetworkError) { + 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 (self.code) { + switch (error.code) { case NSURLErrorTimedOut: case NSURLErrorCannotFindHost: case NSURLErrorCannotConnectToHost: @@ -49,157 +204,9 @@ } } -+ (NSError *)fbErrorWithCode:(NSInteger)code message:(NSString *)message ++ (void)enableErrorReport { - return [self fbErrorWithCode:code message:message underlyingError:nil]; -} - -+ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - message:(NSString *)message -{ - return [self fbErrorWithDomain:domain code:code message:message underlyingError:nil]; -} - -+ (NSError *)fbErrorWithCode:(NSInteger)code message:(NSString *)message underlyingError:(NSError *)underlyingError -{ - return [self fbErrorWithCode:code userInfo:nil message:message underlyingError:underlyingError]; -} - -+ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - return [self fbErrorWithDomain:domain code:code userInfo:@{} message:message underlyingError:underlyingError]; -} - -+ (NSError *)fbErrorWithCode:(NSInteger)code - userInfo:(NSDictionary *)userInfo - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - return [self fbErrorWithDomain:FBSDKErrorDomain code:code userInfo:userInfo message:message underlyingError:underlyingError]; -} - -+ (NSError *)fbErrorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - userInfo:(NSDictionary *)userInfo - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - NSMutableDictionary *fullUserInfo = [[NSMutableDictionary alloc] initWithDictionary:userInfo]; - [FBSDKInternalUtility dictionary:fullUserInfo setObject:message forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKInternalUtility dictionary:fullUserInfo setObject:underlyingError forKey:NSUnderlyingErrorKey]; - userInfo = fullUserInfo.count ? [fullUserInfo copy] : nil; - return [[NSError alloc] initWithDomain:domain code:code userInfo:userInfo]; -} - -+ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name value:(id)value message:(NSString *)message -{ - return [self fbInvalidArgumentErrorWithName:name value:value message:message underlyingError:nil]; -} - -+ (NSError *)fbInvalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(id)value - message:(NSString *)message -{ - return [self fbInvalidArgumentErrorWithDomain:domain - name:name - value:value - message:message - underlyingError:nil]; -} - -+ (NSError *)fbInvalidArgumentErrorWithName:(NSString *)name - value:(id)value - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - return [self fbInvalidArgumentErrorWithDomain:FBSDKErrorDomain - name:name - value:value - message:message - underlyingError:underlyingError]; -} -+ (NSError *)fbInvalidArgumentErrorWithDomain:(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]; - [FBSDKInternalUtility dictionary:userInfo setObject:name forKey:FBSDKErrorArgumentNameKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:value forKey:FBSDKErrorArgumentValueKey]; - return [self fbErrorWithDomain:domain - code:FBSDKErrorInvalidArgument - userInfo:userInfo - message:message - underlyingError:underlyingError]; -} - -+ (NSError *)fbInvalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(NSString *)message -{ - return [self fbInvalidCollectionErrorWithName:name collection:collection item:item message:message underlyingError:nil]; -} - -+ (NSError *)fbInvalidCollectionErrorWithName:(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]; - [FBSDKInternalUtility dictionary:userInfo setObject:name forKey:FBSDKErrorArgumentNameKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:item forKey:FBSDKErrorArgumentValueKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:collection forKey:FBSDKErrorArgumentCollectionKey]; - return [self fbErrorWithCode:FBSDKErrorInvalidArgument - userInfo:userInfo - message:message - underlyingError:underlyingError]; -} - -+ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name message:(NSString *)message -{ - return [self fbRequiredArgumentErrorWithName:name message:message underlyingError:nil]; -} - -+ (NSError *)fbRequiredArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - message:(NSString *)message -{ - if (!message) { - message = [[NSString alloc] initWithFormat:@"Value for %@ is required.", name]; - } - return [self fbInvalidArgumentErrorWithDomain:domain name:name value:nil message:message underlyingError:nil]; -} - -+ (NSError *)fbRequiredArgumentErrorWithName:(NSString *)name - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - if (!message) { - message = [[NSString alloc] initWithFormat:@"Value for %@ is required.", name]; - } - return [self fbInvalidArgumentErrorWithName:name value:nil message:message underlyingError:underlyingError]; -} - -+ (NSError *)fbUnknownErrorWithMessage:(NSString *)message -{ - return [self fbErrorWithCode:FBSDKErrorUnknown - userInfo:nil - message:message - underlyingError:nil]; + 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 new file mode 100644 index 0000000000..4ca6f68c0b --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.h @@ -0,0 +1,85 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..b3cf57c86f --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.m @@ -0,0 +1,130 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 index aa98cd27d5..6e4ed1d09b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h @@ -16,17 +16,26 @@ // IN AN ACTION OF 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 + +/** + 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 -+ (instancetype)sharedInstance; +@property (class, nonatomic, strong, readonly) FBSDKImageDownloader *sharedInstance; /* download an image or retrieve it from cache @@ -34,8 +43,12 @@ @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:(void(^)(UIImage* image))completion; +- (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 index 5c9de889cc..9b8f428439 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m @@ -25,7 +25,7 @@ static NSString *const kCachedResponseUserInfoKeyTimestamp = @"timestamp"; NSURLCache *_urlCache; } -+ (instancetype)sharedInstance ++ (FBSDKImageDownloader *)sharedInstance { static FBSDKImageDownloader *instance; static dispatch_once_t onceToken; @@ -38,9 +38,15 @@ static NSString *const kCachedResponseUserInfoKeyTimestamp = @"timestamp"; - (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; } @@ -50,7 +56,9 @@ static NSString *const kCachedResponseUserInfoKeyTimestamp = @"timestamp"; [_urlCache removeAllCachedResponses]; } -- (void)downloadImageWithURL:(NSURL *)url ttl:(NSTimeInterval)ttl completion:(void(^)(UIImage* image))completion +- (void)downloadImageWithURL:(NSURL *)url + ttl:(NSTimeInterval)ttl + completion:(FBSDKImageDownloadBlock)completion { NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSCachedURLResponse *cachedResponse = [_urlCache cachedResponseForRequest:request]; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h index 6a5e0f53b0..c84f6c1d5d 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h @@ -17,7 +17,10 @@ // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #import -#import + +#import "FBSDKCoreKit+Internal.h" + +NS_ASSUME_NONNULL_BEGIN #define FBSDK_CANOPENURL_FACEBOOK @"fbauth2" #define FBSDK_CANOPENURL_FBAPI @"fbapi" @@ -32,8 +35,20 @@ typedef NS_ENUM(int32_t, FBSDKUIKitVersion) 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; @@ -42,7 +57,46 @@ typedef NS_ENUM(int32_t, FBSDKUIKitVersion) /** Constructs the scheme for apps that come to the current app through the bridge. */ -+ (NSString *)appURLScheme; +@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. @@ -54,7 +108,7 @@ typedef NS_ENUM(int32_t, FBSDKUIKitVersion) */ + (NSURL *)appURLWithHost:(NSString *)host path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters + queryParameters:(NSDictionary *)queryParameters error:(NSError *__autoreleasing *)errorRef; /** @@ -64,57 +118,6 @@ typedef NS_ENUM(int32_t, FBSDKUIKitVersion) */ + (NSDictionary *)dictionaryFromFBURL:(NSURL *)url; -/** - 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:(id)object; - -/** - Returns bundle for returning localized strings - - We assume a convention of a bundle named FBSDKStrings.bundle, otherwise we - return the main bundle. -*/ -+ (NSBundle *)bundleForStrings; - -/** - 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; - -/** - 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. - */ -+ (uint64_t)currentTimeInMilliseconds; - -/** - 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; - -/** - 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:(id)object forKey:(id)key; - /** Constructs a Facebook URL. @param hostPrefix The prefix for the host, such as 'm', 'graph', etc. @@ -125,7 +128,7 @@ setJSONStringForObject:(id)object */ + (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters + queryParameters:(NSDictionary *)queryParameters error:(NSError *__autoreleasing *)errorRef; /** @@ -139,7 +142,7 @@ setJSONStringForObject:(id)object */ + (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters + queryParameters:(NSDictionary *)queryParameters defaultVersion:(NSString *)defaultVersion error:(NSError *__autoreleasing *)errorRef; @@ -185,17 +188,6 @@ setJSONStringForObject:(id)object */ + (BOOL)isUIKitRunTimeVersionAtLeast:(FBSDKUIKitVersion)version; -/** - 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. - */ -+ (NSString *)JSONStringForObject:(id)object - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler; - /** Checks equality between 2 objects. @@ -206,44 +198,6 @@ setJSONStringForObject:(id)object */ + (BOOL)object:(id)object isEqualToObject:(id)other; -/** - 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. - */ -+ (id)objectForJSONString:(NSString *)string error:(NSError *__autoreleasing *)errorRef; - -/** - The version of the operating system on which the process is executing. - */ -+ (NSOperatingSystemVersion)operatingSystemVersion; - -/** - 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:(id(^)(id object, BOOL *stop))invalidObjectHandler; - -/** - 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. - */ -+ (BOOL)shouldManuallyAdjustOrientation; - /** Constructs an NSURL. @param scheme The scheme for the URL. @@ -253,11 +207,11 @@ setJSONStringForObject:(id)object @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. @return The URL. */ -+ (NSURL *)URLWithScheme:(NSString *)scheme - host:(NSString *)host - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef; ++ (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 @@ -272,7 +226,8 @@ setJSONStringForObject:(id)object */ + (void)extractPermissionsFromResponse:(NSDictionary *)responseObject grantedPermissions:(NSMutableSet *)grantedPermissions - declinedPermissions:(NSMutableSet *)declinedPermissions; + declinedPermissions:(NSMutableSet *)declinedPermissions + expiredPermissions:(NSMutableSet *)expiredPermissions; /** Registers a transient object so that it will not be deallocated until unregistered @@ -310,7 +265,7 @@ setJSONStringForObject:(id)object /** Attempts to find the first UIViewController in the view's responder chain. Returns nil if not found. */ -+ (UIViewController *)viewControllerForView:(UIView *)view; ++ (nullable UIViewController *)viewControllerForView:(UIView *)view; /** returns true if the url scheme is registered in the CFBundleURLTypes @@ -320,43 +275,29 @@ setJSONStringForObject:(id)object /** returns the current key window */ -+ (UIWindow *)findWindow; ++ (nullable UIWindow *)findWindow; /** returns currently displayed top view controller. */ -+ (UIViewController *)topMostViewController; ++ (nullable UIViewController *)topMostViewController; /** Converts NSData to a hexadecimal UTF8 String. */ -+ (NSString *)hexadecimalStringFromData:(NSData *)data; ++ (nullable NSString *)hexadecimalStringFromData:(NSData *)data; /* Checks if the permission is a publish permission. */ + (BOOL)isPublishPermission:(NSString *)permission; -/* - Checks if the set of permissions are all read permissions. - */ -+ (BOOL)areAllPermissionsReadPermissions:(NSSet *)permissions; - -/* - Checks if the set of permissions are all publish permissions. - */ -+ (BOOL)areAllPermissionsPublishPermissions:(NSSet *)permissions; - -/* - Checks if the app is Unity. - */ -+ (BOOL)isUnity; - #pragma mark - FB Apps Installed -+ (BOOL)isFacebookAppInstalled; -+ (BOOL)isMessengerAppInstalled; -+ (BOOL)isMSQRDPlayerAppInstalled; +@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; @@ -370,5 +311,6 @@ setJSONStringForObject:(id)object #define FB_BASE_URL @"facebook.com" -+ (Class)resolveBoltsClassWithName:(NSString *)className; @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 index 71c2fe8b10..1919415d5e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m @@ -26,7 +26,6 @@ #import "FBSDKError.h" #import "FBSDKSettings+Internal.h" #import "FBSDKSettings.h" -#import "FBSDKUtility.h" typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionMask) { @@ -71,22 +70,15 @@ typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionShift) // version 3.3 and above encode the parameters in the fragment; // merge them together with fragment taking priority. NSMutableDictionary *params = [NSMutableDictionary dictionary]; - [params addEntriesFromDictionary:[FBSDKUtility dictionaryWithQueryString:url.query]]; + [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:[FBSDKUtility dictionaryWithQueryString:url.fragment]]; + [params addEntriesFromDictionary:[FBSDKBasicUtility dictionaryWithQueryString:url.fragment]]; } return params; } -+ (void)array:(NSMutableArray *)array addObject:(id)object -{ - if (object) { - [array addObject:object]; - } -} - + (NSBundle *)bundleForStrings { static NSBundle *bundle; @@ -100,16 +92,6 @@ typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionShift) return bundle; } -+ (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; -} - + (uint64_t)currentTimeInMilliseconds { struct timeval time; @@ -117,32 +99,10 @@ typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionShift) return ((uint64_t)time.tv_sec * 1000) + (time.tv_usec / 1000); } -+ (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; -} - -+ (void)dictionary:(NSMutableDictionary *)dictionary setObject:(id)object forKey:(id)key -{ - if (object && key) { - dictionary[key] = object; - } -} - + (void)extractPermissionsFromResponse:(NSDictionary *)responseObject grantedPermissions:(NSMutableSet *)grantedPermissions declinedPermissions:(NSMutableSet *)declinedPermissions + expiredPermissions:(NSMutableSet *)expiredPermissions { NSArray *resultData = responseObject[@"data"]; if (resultData.count > 0) { @@ -154,6 +114,8 @@ setJSONStringForObject:(id)object [grantedPermissions addObject:permissionName]; } else if ([status isEqualToString:@"declined"]) { [declinedPermissions addObject:permissionName]; + } else if ([status isEqualToString:@"expired"]) { + [expiredPermissions addObject:permissionName]; } } } @@ -167,7 +129,7 @@ setJSONStringForObject:(id)object return [self facebookURLWithHostPrefix:hostPrefix path:path queryParameters:queryParameters - defaultVersion:nil + defaultVersion:@"" error:errorRef]; } @@ -188,7 +150,7 @@ setJSONStringForObject:(id)object } host = [NSString stringWithFormat:@"%@%@", hostPrefix ?: @"", host ?: @""]; - NSString *version = defaultVersion ?: [FBSDKSettings graphAPIVersion]; + NSString *version = (defaultVersion.length > 0) ? defaultVersion : [FBSDKSettings graphAPIVersion]; if (version.length) { version = [@"/" stringByAppendingString:version]; } @@ -276,29 +238,7 @@ setJSONStringForObject:(id)object } } -+ (NSString *)JSONStringForObject:(id)object - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(id(^)(id object, BOOL *stop))invalidObjectHandler -{ - if (invalidObjectHandler || ![NSJSONSerialization isValidJSONObject:object]) { - object = [self _convertObjectToJSONObject:object invalidObjectHandler:invalidObjectHandler stop:NULL]; - if (![NSJSONSerialization isValidJSONObject:object]) { - if (errorRef != NULL) { - *errorRef = [NSError fbInvalidArgumentErrorWithName:@"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)object:(id)object isEqualToObject:(id)other; ++ (BOOL)object:(id)object isEqualToObject:(id)other { if (object == other) { return YES; @@ -309,18 +249,6 @@ setJSONStringForObject:(id)object return [object isEqual:other]; } -+ (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]; -} - + (NSOperatingSystemVersion)operatingSystemVersion { static NSOperatingSystemVersion operatingSystemVersion = { @@ -354,47 +282,6 @@ setJSONStringForObject:(id)object return operatingSystemVersion; } -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(id(^)(id object, BOOL *stop))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 = [FBSDKUtility 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); -} - + (BOOL)shouldManuallyAdjustOrientation { return (![self isUIKitLinkTimeVersionAtLeast:FBSDKUIKitVersion_8_0] || @@ -414,11 +301,12 @@ setJSONStringForObject:(id)object NSString *queryString = nil; if (queryParameters.count) { NSError *queryStringError; - queryString = [@"?" stringByAppendingString:[FBSDKUtility queryStringWithDictionary:queryParameters - error:&queryStringError]]; + queryString = [@"?" stringByAppendingString:[FBSDKBasicUtility queryStringWithDictionary:queryParameters + error:&queryStringError + invalidObjectHandler:NULL]]; if (!queryString) { if (errorRef != NULL) { - *errorRef = [NSError fbInvalidArgumentErrorWithName:@"queryParameters" + *errorRef = [FBSDKError invalidArgumentErrorWithName:@"queryParameters" value:queryParameters message:nil underlyingError:queryStringError]; @@ -427,17 +315,17 @@ setJSONStringForObject:(id)object } } - NSURL *URL = [[NSURL alloc] initWithString:[NSString stringWithFormat: - @"%@://%@%@%@", - scheme ?: @"", - host ?: @"", - path ?: @"", - queryString ?: @""]]; + NSURL *const URL = [NSURL URLWithString:[NSString stringWithFormat: + @"%@://%@%@%@", + scheme ?: @"", + host ?: @"", + path ?: @"", + queryString ?: @""]]; if (errorRef != NULL) { if (URL) { *errorRef = nil; } else { - *errorRef = [NSError fbUnknownErrorWithMessage:@"Unknown error building URL."]; + *errorRef = [FBSDKError unknownErrorWithMessage:@"Unknown error building URL."]; } } return URL; @@ -448,7 +336,7 @@ setJSONStringForObject:(id)object NSHTTPCookieStorage *cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray *facebookCookies = [cookies cookiesForURL:[self facebookURLWithHostPrefix:@"m." path:@"/dialog/" - queryParameters:nil + queryParameters:@{} error:NULL]]; for (NSHTTPCookie *cookie in facebookCookies) { @@ -549,45 +437,6 @@ static NSMapTable *_transientObjects; } } -+ (id)_convertObjectToJSONObject:(id)object - invalidObjectHandler:(id(^)(id object, BOOL *stop))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; -} - + (BOOL)_canOpenURLScheme:(NSString *)scheme { NSURLComponents *components = [[NSURLComponents alloc] init]; @@ -645,6 +494,32 @@ static NSMapTable *_transientObjects; } } } + + // 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]; @@ -656,7 +531,7 @@ static NSMapTable *_transientObjects; { UIWindow *keyWindow = [self findWindow]; // SDK expects a key window at this point, if it is not, make it one - if (keyWindow != nil && !keyWindow.isKeyWindow) { + if (keyWindow != nil && !keyWindow.isKeyWindow) { [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors formatString:@"Unable to obtain a key window, marking %@ as keyWindow", keyWindow.description]; [keyWindow makeKeyWindow]; @@ -744,39 +619,6 @@ static NSMapTable *_transientObjects; [permission isEqualToString:@"rsvp_event"]; } -+ (BOOL)areAllPermissionsReadPermissions:(NSSet *)permissions -{ - for (NSString *permission in permissions) { - if ([[self class] isPublishPermission:permission]) { - return NO; - } - } - return YES; -} - -+ (BOOL)areAllPermissionsPublishPermissions:(NSSet *)permissions -{ - for (NSString *permission in permissions) { - if (![[self class] isPublishPermission:permission]) { - return NO; - } - } - return YES; -} - -+ (Class)resolveBoltsClassWithName:(NSString *)className; -{ - Class clazz = NSClassFromString(className); - if (clazz == nil) { - NSString *message = [NSString stringWithFormat:@"Unable to load class %@. Did you link Bolts.framework?", className]; - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:message - userInfo:nil]; - } - - return clazz; -} - + (BOOL)isUnity { NSString *userAgentSuffix = [FBSDKSettings userAgentSuffix]; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h index 1672a8b580..04f5fc8bd4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h @@ -18,6 +18,8 @@ #import +NS_ASSUME_NONNULL_BEGIN + /** Simple logging utility for conditionally logging strings and then emitting them @@ -25,6 +27,7 @@ @unsorted */ +NS_SWIFT_NAME(Logger) @interface FBSDKLogger : NSObject // Access current accumulated contents of the logger. @@ -37,7 +40,7 @@ @property (copy, nonatomic, readonly) NSString *loggingBehavior; // Is the current logger instance active, based on its loggingBehavior? -@property (nonatomic, readonly) BOOL isActive; +@property (nonatomic, readonly, getter=isActive) BOOL active; // // Instance methods @@ -84,3 +87,5 @@ 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 index 6b638fb756..d5169b1c52 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m @@ -38,9 +38,9 @@ static NSMutableDictionary *g_startTimesWithTags = nil; - (instancetype)initWithLoggingBehavior:(NSString *)loggingBehavior { if ((self = [super init])) { - _isActive = [FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]; + _active = [FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]; _loggingBehavior = loggingBehavior; - if (_isActive) { + if (_active) { _internalContents = [[NSMutableString alloc] init]; _loggerSerialNumber = [FBSDKLogger generateSerialNumber]; } @@ -58,7 +58,7 @@ static NSMutableDictionary *g_startTimesWithTags = nil; - (void)setContents:(NSString *)contents { - if (_isActive) { + if (_active) { _internalContents = [NSMutableString stringWithString:contents]; } } @@ -67,14 +67,14 @@ static NSMutableDictionary *g_startTimesWithTags = nil; - (void)appendString:(NSString *)string { - if (_isActive) { + if (_active) { [_internalContents appendString:string]; } } - (void)appendFormat:(NSString *)formatString, ... { - if (_isActive) { + if (_active) { va_list vaArguments; va_start(vaArguments, formatString); NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; @@ -87,14 +87,14 @@ static NSMutableDictionary *g_startTimesWithTags = nil; - (void)appendKey:(NSString *)key value:(NSString *)value { - if (_isActive && value.length) { + if (_active && value.length) { [_internalContents appendFormat:@" %@:\t%@\n", key, value]; } } - (void)emitToNSLog { - if (_isActive) { + if (_active) { for (NSString *key in [g_stringsToReplace keyEnumerator]) { [_internalContents replaceOccurrencesOfString:key @@ -162,7 +162,7 @@ static NSMutableDictionary *g_startTimesWithTags = nil; NSNumber *startTimeNumber = g_startTimesWithTags[tagAsNumber]; // Only log if there's been an associated start time. - if (startTimeNumber) { + if (startTimeNumber != nil) { uint64_t elapsed = [FBSDKInternalUtility currentTimeInMilliseconds] - startTimeNumber.unsignedLongLongValue; [g_startTimesWithTags removeObjectForKey:tagAsNumber]; // served its purpose, remove diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h index 5414e38281..e4eb673f60 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h @@ -19,6 +19,9 @@ #import #import +NS_ASSUME_NONNULL_BEGIN + +NS_SWIFT_NAME(Math) @interface FBSDKMath : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -39,3 +42,5 @@ + (NSUInteger)hashWithPointer:(const void *)value; @end + +NS_ASSUME_NONNULL_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 index e3b039fd82..f90322ad2b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h @@ -16,12 +16,16 @@ // IN AN ACTION OF 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 the Bolts framework +/** + Provides methods for posting notifications from App Links */ @interface FBSDKMeasurementEvent (Internal) @@ -31,3 +35,5 @@ NS_ASSUME_NONNULL_BEGIN @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 index d504d9733e..6717c91035 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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; @@ -65,3 +69,5 @@ FBSDKMachAbsoluteTimeUnits FBSDKMonotonicTimeConvertSecondsToMachUnits(FBSDKMono * 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 index 1a52c81ef9..362834c199 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m @@ -16,13 +16,18 @@ // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -#include -#include -#include -#include +#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 @@ -84,3 +89,5 @@ FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeConvertMachUnitsToSeconds(FBSDKMachA 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 index d2298d53f6..12b07a9a2a 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h @@ -16,11 +16,21 @@ // IN AN ACTION OF 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:(FBSDKProfile *) profile; -+ (FBSDKProfile *)fetchCachedProfile; ++ (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 index 0751f7a5db..9e28c27e13 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h @@ -16,7 +16,11 @@ // IN AN ACTION 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; @@ -26,12 +30,9 @@ + (void)setAccessTokenCache:(NSObject *)accessTokenCache; -+ (NSString *)graphAPIDebugParamValue; - -+ (BOOL)isGraphErrorRecoveryDisabled; +@property (class, nonatomic, copy, readonly) NSString *graphAPIDebugParamValue; // used by Unity. -+ (NSString *)userAgentSuffix; -+ (void)setUserAgentSuffix:(NSString *)suffix; +@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 index 7e9f29c488..9e7b57dfc6 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h @@ -29,6 +29,7 @@ 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; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m index 9bf54c72a9..45686c9f1e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m @@ -32,11 +32,11 @@ @property (nonatomic, copy) NSMapTable *blocks; - (instancetype)initWithBlock:(swizzleBlock)aBlock - named:(NSString *)aName - forClass:(Class)aClass - selector:(SEL)aSelector - originalMethod:(IMP)aMethod - withNumArgs:(uint)numArgs; + named:(NSString *)aName + forClass:(Class)aClass + selector:(SEL)aSelector + originalMethod:(IMP)aMethod + withNumArgs:(uint)numArgs; @end @@ -45,7 +45,7 @@ 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 = [FBSDKSwizzler class]; + Class this_class = [self class]; while (!swizzle && class_getSuperclass(this_class)){ this_class = class_getSuperclass(this_class); aMethod = class_getInstanceMethod(this_class, _cmd); @@ -56,65 +56,37 @@ static FBSDKSwizzle* fb_findSwizzle(id self, SEL _cmd){ static void fb_swizzledMethod_2(id self, SEL _cmd) { - FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); - if (swizzle) { - ((void(*)(id, SEL))swizzle.originalMethod)(self, _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); - } + 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); + 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); - } + 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); + ((void(*)(id, SEL, id, id))swizzle.originalMethod)(self, _cmd, arg, arg2); NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; swizzleBlock block; @@ -124,6 +96,34 @@ static void fb_swizzleMethod_4_io(id self, SEL _cmd, NSInteger arg, id 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" @@ -135,8 +135,10 @@ static void (*fb_swizzledMethods[MAX_ARGS - MIN_ARGS + 1])() = {fb_swizzledMetho + (void)initialize { - swizzles = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality) - valueOptions:(NSPointerFunctionsStrongMemory | NSPointerFunctionsObjectPointerPersonality)]; + swizzles = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsOpaqueMemory | + NSPointerFunctionsOpaquePersonality) + valueOptions:(NSPointerFunctionsStrongMemory | + NSPointerFunctionsObjectPointerPersonality)]; [FBSDKSwizzler resolveConflict]; } @@ -152,107 +154,107 @@ static void (*fb_swizzledMethods[MAX_ARGS - MIN_ARGS + 1])() = {fb_swizzledMetho + (void)printSwizzles { - NSEnumerator *en = [swizzles objectEnumerator]; - FBSDKSwizzle *swizzle; - while ((swizzle = (FBSDKSwizzle *)[en nextObject])) { - NSLog(@"%@", swizzle); - } + NSEnumerator *en = [swizzles objectEnumerator]; + FBSDKSwizzle *swizzle; + while ((swizzle = (FBSDKSwizzle *)[en nextObject])) { + NSLog(@"%@", swizzle); + } } + (FBSDKSwizzle *)swizzleForMethod:(Method)aMethod { - return (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; + return (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; } + (void)removeSwizzleForMethod:(Method)aMethod { - [swizzles removeObjectForKey:MAPTABLE_ID(aMethod)]; + [swizzles removeObjectForKey:MAPTABLE_ID(aMethod)]; } + (void)setSwizzle:(FBSDKSwizzle *)swizzle forMethod:(Method)aMethod { - [swizzles setObject:swizzle forKey:MAPTABLE_ID(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; - } + 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; + } + 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) { + 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]; - } + 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]; - } + Method aMethod = class_getInstanceMethod(aClass, aSelector); + FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; + if (swizzle) { + method_setImplementation(aMethod, swizzle.originalMethod); + [FBSDKSwizzler removeSwizzleForMethod:aMethod]; + } } /* @@ -261,17 +263,17 @@ static void (*fb_swizzledMethods[MAX_ARGS - MIN_ARGS + 1])() = {fb_swizzledMetho */ + (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]; - } + 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 @@ -281,41 +283,42 @@ static void (*fb_swizzledMethods[MAX_ARGS - MIN_ARGS + 1])() = {fb_swizzledMetho - (instancetype)init { - if ((self = [super init])) { - self.blocks = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsStrongMemory - | NSPointerFunctionsObjectPersonality) - valueOptions:(NSPointerFunctionsStrongMemory - | NSPointerFunctionsObjectPointerPersonality)]; - } - return self; + 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 + 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; + 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]; + 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/FBSDKSystemAccountStoreAdapter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h deleted file mode 100644 index b547dabcb9..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h +++ /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 -#import - -typedef void (^FBSDKGraphRequestAccessToAccountsHandler)(NSString *oauthToken, NSError *accountStoreError); - -/* - @class - - Adapter around system account store APIs. Note this is only intended for internal - consumption. If publicized, consider moving declarations to an internal only header and - reconsider dispatching semantics. - */ -@interface FBSDKSystemAccountStoreAdapter : NSObject - -/* - s gets the oauth token stored in the account store credential, if available. If not empty, - this implies user has granted access. - */ -@property (nonatomic, readonly, copy) NSString *accessTokenString; - -/* - Gets or sets the flag indicating if the next requestAccess call should block - on a renew call. - */ -@property (nonatomic, assign) BOOL forceBlockingRenew; - -/* - A convenience getter to the Facebook account type in the account store, if available. - */ -@property (strong, nonatomic, readonly) ACAccountType *accountType; - -/* - The singleton instance. - */ -@property (class, nonatomic, strong) FBSDKSystemAccountStoreAdapter *sharedInstance; - -/* - Requests access to the device's Facebook account for the given parameters. - @param permissions the permissions - @param defaultAudience the default audience - @param isReauthorize a flag describing if this is a reauth request - @param appID the app id - @param handler the handler that will be invoked on completion (dispatched to the main thread). the oauthToken is nil on failure. - */ -- (void)requestAccessToFacebookAccountStore:(NSSet *)permissions - defaultAudience:(NSString *)defaultAudience - isReauthorize:(BOOL)isReauthorize - appID:(NSString *)appID - handler:(FBSDKGraphRequestAccessToAccountsHandler)handler; - -/* - Sends a message to the device account store to renew the Facebook account credentials - - @param handler the handler that is invoked on completion - */ -- (void)renewSystemAuthorization:(void(^)(ACAccountCredentialRenewResult result, NSError *error))handler; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m deleted file mode 100644 index 4c1601fa1f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright notice shall be -// included in all copies or substantial portions of the software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -#import "FBSDKSystemAccountStoreAdapter.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKConstants.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKError.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings+Internal.h" - -@interface FBSDKSystemAccountStoreAdapter () - -@property (retain, nonatomic, readonly) ACAccountStore *accountStore; - -@end - -static NSString *const FBForceBlockingRenewKey = @"com.facebook.sdk:ForceBlockingRenewKey"; -static FBSDKSystemAccountStoreAdapter *_singletonInstance = nil; - -@implementation FBSDKSystemAccountStoreAdapter -{ - ACAccountStore *_accountStore; - ACAccountType *_accountType; -} - -+ (void)initialize -{ - if (self == [FBSDKSystemAccountStoreAdapter class]) { - _singletonInstance = [[self alloc] init]; - } -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - _forceBlockingRenew = [[NSUserDefaults standardUserDefaults] boolForKey:FBForceBlockingRenewKey]; - } - return self; -} - -#pragma mark - Properties - -- (ACAccountStore *)accountStore -{ - if (_accountStore == nil) { - _accountStore = [[fbsdkdfl_ACAccountStoreClass() alloc] init]; - } - return _accountStore; -} - -- (ACAccountType *)accountType -{ - if (_accountType == nil) { - _accountType = [self.accountStore accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"]; - } - return _accountType; -} - -- (void)setForceBlockingRenew:(BOOL)forceBlockingRenew -{ - if (_forceBlockingRenew != forceBlockingRenew) { - _forceBlockingRenew = forceBlockingRenew; - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - [userDefaults setBool:forceBlockingRenew forKey:FBForceBlockingRenewKey]; - [userDefaults synchronize]; - } -} - -+ (FBSDKSystemAccountStoreAdapter *)sharedInstance -{ - return _singletonInstance; -} - -+ (void)setSharedInstance:(FBSDKSystemAccountStoreAdapter *)instance -{ - _singletonInstance = instance; -} - -- (NSString *)accessTokenString -{ - if (self.accountType && self.accountType.accessGranted) { - NSArray *fbAccounts = [self.accountStore accountsWithAccountType:self.accountType]; - if (fbAccounts.count > 0) { - id account = fbAccounts[0]; - id credential = [account credential]; - - return [credential oauthToken]; - } - } - return nil; -} - -#pragma mark - Public properties and methods - -- (void)requestAccessToFacebookAccountStore:(NSSet *)permissions - defaultAudience:(NSString *)defaultAudience - isReauthorize:(BOOL)isReauthorize - appID:(NSString *)appID - handler:(FBSDKGraphRequestAccessToAccountsHandler)handler -{ - if (appID == nil) { - @throw [NSException exceptionWithName:NSInvalidArgumentException - reason:@"appID cannot be nil" - userInfo:nil]; - } - - // no publish_* permissions are permitted with a nil audience - if (!defaultAudience && isReauthorize) { - for (NSString *p in permissions) { - if ([p hasPrefix:@"publish"]) { - [[NSException exceptionWithName:NSInvalidArgumentException - reason:@"FBSDKLoginManager: One or more publish permission was requested " - @"without specifying an audience; use FBSDKDefaultAudienceOnlyMe, " - @"FBSDKDefaultAudienceFriends, or FBSDKDefaultAudienceEveryone" - userInfo:nil] - raise]; - } - } - } - - // Construct access options. Constructing this way is tolerant for nil values. - NSMutableDictionary *optionsMutable = [[NSMutableDictionary alloc] initWithCapacity:3]; - optionsMutable[fbsdkdfl_ACFacebookAppIdKey()] = appID; - optionsMutable[fbsdkdfl_ACFacebookPermissionsKey()] = permissions.allObjects; - optionsMutable[fbsdkdfl_ACFacebookAudienceKey()] = defaultAudience; - NSDictionary *options = [optionsMutable copy]; - - if (self.forceBlockingRenew - && [self.accountStore accountsWithAccountType:self.accountType].count > 0) { - // If the force renew flag is set and an iOS FB account is still set, - // chain the requestAccessBlock to a successful renew result - [self renewSystemAuthorization:^(ACAccountCredentialRenewResult result, NSError *error) { - if (result == ACAccountCredentialRenewResultRenewed) { - self.forceBlockingRenew = NO; - [self requestAccessToFacebookAccountStore:options retrying:NO handler:handler]; - } else if (handler) { - // Otherwise, invoke the caller's handler back on the main thread with an - // error that will trigger the password change user message. - dispatch_async(dispatch_get_main_queue(), ^{ - handler(nil, error); - }); - } - }]; - } else { - // Otherwise go ahead and invoke normal request. - [self requestAccessToFacebookAccountStore:options retrying:NO handler:handler]; - } -} - -- (void)requestAccessToFacebookAccountStore:(NSDictionary *)options - retrying:(BOOL)retrying - handler:(FBSDKGraphRequestAccessToAccountsHandler)handler -{ - if (!self.accountType) { - if (handler) { - handler(nil, [NSError fbErrorWithCode:FBSDKErrorUnknown message:@"Invalid request to account store"]); - } - return; - } - // we will attempt an iOS integrated facebook login - [self.accountStore - requestAccessToAccountsWithType:self.accountType - options:options - completion:^(BOOL granted, NSError *error) { - if (!granted && - error.code == ACErrorPermissionDenied && - [error.description rangeOfString:@"remote_app_id does not match stored id"].location != NSNotFound) { - - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors formatString: - @"System authorization failed:'%@'. This may be caused by a mismatch between" - @" the bundle identifier and your app configuration on the server" - @" at developers.facebook.com/apps.", - error.localizedDescription]; - } - - // requestAccessToAccountsWithType:options:completion: completes on an - // arbitrary thread; let's process this back on our main thread - dispatch_async(dispatch_get_main_queue(), ^{ - NSError *accountStoreError = error; - NSString *oauthToken = nil; - id account = nil; - if (granted) { - NSArray *fbAccounts = [self.accountStore accountsWithAccountType:self.accountType]; - if (fbAccounts.count > 0) { - account = fbAccounts[0]; - - id credential = [account credential]; - - oauthToken = [credential oauthToken]; - } - self.forceBlockingRenew = NO; - } - - if (!accountStoreError && !oauthToken) { - if (!retrying) { - // This can happen as a result of, e.g., restoring from iCloud to a different device. Try once to renew. - [self renewSystemAuthorization:^(ACAccountCredentialRenewResult renewResult, NSError *renewError) { - // Call block again, regardless of result -- either we'll get credentials or we'll fail with the - // exception below. We want to treat failure here the same regardless of whether it was before or after the refresh attempt. - [self requestAccessToFacebookAccountStore:options retrying:YES handler:handler]; - }]; - return; - } - // else call handler with nils. - } - handler(oauthToken, accountStoreError); - }); - }]; -} - -- (void)renewSystemAuthorization:(void(^)(ACAccountCredentialRenewResult, NSError *))handler -{ - // if the slider has been set to off, renew calls to iOS simply hang, so we must - // preemptively check for that condition. - if (self.accountStore && self.accountType && self.accountType.accessGranted) { - NSArray *fbAccounts = [self.accountStore accountsWithAccountType:self.accountType]; - id account; - if (fbAccounts && fbAccounts.count > 0 && - (account = fbAccounts[0])) { - - FBSDKAccessToken *currentToken = [FBSDKAccessToken currentAccessToken]; - if (![currentToken.tokenString isEqualToString:self.accessTokenString]) { - currentToken = nil; - } - [self.accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) { - if (error) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAccessTokens - logEntry:[NSString stringWithFormat:@"renewCredentialsForAccount result:%ld, error: %@", - (long)renewResult, - error]]; - } - if (renewResult == ACAccountCredentialRenewResultRenewed && - currentToken && - [currentToken isEqual:[FBSDKAccessToken currentAccessToken]]) { - // account store renewals can change the stored oauth token so we need to update the currentAccessToken - // so future comparisons to -[ accessTokenString] work correctly (e.g., error recovery). - FBSDKAccessToken *updatedToken = [[FBSDKAccessToken alloc] initWithTokenString:self.accessTokenString - permissions:currentToken.permissions.allObjects - declinedPermissions:currentToken.declinedPermissions.allObjects - appID:currentToken.appID - userID:currentToken.userID - expirationDate:[NSDate distantFuture] - refreshDate:[NSDate date] - dataAccessExpirationDate:[NSDate distantFuture]]; - [FBSDKAccessToken setCurrentAccessToken:updatedToken]; - } - if (handler) { - handler(renewResult, error); - } - }]; - return; - } - } - - if (handler) { - handler(ACAccountCredentialRenewResultFailed, nil); - } -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h index af06684de9..d5c1dbe12c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h @@ -16,6 +16,10 @@ // IN AN ACTION OF 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) @@ -23,8 +27,10 @@ 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 index aafcb39355..727752a8d8 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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) @@ -41,3 +45,5 @@ BOOL BOOLFromFBSDKTriStateBOOL(FBSDKTriStateBOOL value, BOOL defaultValue) 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 index bb452f771a..e5da05163c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h @@ -16,8 +16,14 @@ // IN AN ACTION OF 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/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h similarity index 87% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h index c42431b808..f7ea35bced 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h @@ -18,6 +18,14 @@ #import -@interface FBSDKBoltsMeasurementEventListener : NSObject -+ (FBSDKBoltsMeasurementEventListener *)defaultListener; +#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 new file mode 100644 index 0000000000..f571196fa6 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.m @@ -0,0 +1,87 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/TokenCaching/FBSDKAccessTokenCacheV3_17.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h similarity index 87% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h index 7f486f3574..987b3ce035 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h @@ -18,8 +18,12 @@ #import -#import "FBSDKAccessTokenCaching.h" +NS_ASSUME_NONNULL_BEGIN -@interface FBSDKAccessTokenCacheV3_17 : NSObject +@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 new file mode 100644 index 0000000000..309a7c4dd7 --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.m @@ -0,0 +1,128 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..16d1c6604e --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.h @@ -0,0 +1,36 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 new file mode 100644 index 0000000000..64739019cb --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.m @@ -0,0 +1,137 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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/TokenCaching/FBSDKAccessTokenCacheV3_21.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h similarity index 91% rename from iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h rename to iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h index da1ac64dfc..86415e09f9 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h @@ -18,8 +18,12 @@ #import -#import "FBSDKAccessTokenCaching.h" +NS_ASSUME_NONNULL_BEGIN -@interface FBSDKAccessTokenCacheV3_21 : NSObject +@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 new file mode 100644 index 0000000000..091658dd4c --- /dev/null +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.m @@ -0,0 +1,46 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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 index 4d8ba91cd8..11aff98515 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h @@ -18,7 +18,11 @@ #import +#if SWIFT_PACKAGE +#import "FBSDKGraphRequest.h" +#else #import +#endif typedef NS_OPTIONS(NSUInteger, FBSDKGraphRequestFlags) { @@ -45,7 +49,6 @@ typedef NS_OPTIONS(NSUInteger, FBSDKGraphRequestFlags) // 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; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h index c9a0b2b454..37bf777e45 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h @@ -22,6 +22,7 @@ @class FBSDKGraphRequestDataAttachment; @class FBSDKLogger; +NS_SWIFT_NAME(GraphRequestBody) @interface FBSDKGraphRequestBody : NSObject @property (nonatomic, retain, readonly) NSData *data; @@ -44,4 +45,6 @@ - (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 index c454f95b37..e35b9fa014 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m @@ -18,8 +18,10 @@ #import "FBSDKGraphRequestBody.h" +#import "FBSDKConstants.h" #import "FBSDKCrypto.h" #import "FBSDKGraphRequestDataAttachment.h" +#import "FBSDKInternalUtility.h" #import "FBSDKLogger.h" #import "FBSDKSettings.h" @@ -131,7 +133,7 @@ - (void)_appendWithKey:(NSString *)key filename:(NSString *)filename contentType:(NSString *)contentType - contentBlock:(void(^)(void))contentBlock + contentBlock:(FBSDKCodeBlock)contentBlock { NSMutableArray *disposition = [[NSMutableArray alloc] init]; [disposition addObject:@"Content-Disposition: form-data"]; @@ -152,4 +154,13 @@ [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 index c63688cd41..56d32239f8 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h @@ -16,10 +16,17 @@ // IN AN ACTION 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 index 75aa3dd83f..32b8040b74 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h @@ -18,22 +18,27 @@ #import +#if SWIFT_PACKAGE +#import "FBSDKGraphRequestConnection.h" +#else #import +#endif // Internal only class to facilitate FBSDKGraphRequest processing, specifically -// associating FBSDKGraphRequest and FBSDKGraphRequestHandler instances and necessary +// 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) FBSDKGraphRequestHandler completionHandler; +@property (nonatomic, copy) FBSDKGraphRequestBlock completionHandler; @property (nonatomic, copy) NSDictionary *batchParameters; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; - (instancetype)initWithRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler + completionHandler:(FBSDKGraphRequestBlock)handler batchParameters:(NSDictionary *)batchParameters NS_DESIGNATED_INITIALIZER; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m index e87f9b4437..2f09f8cd23 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m @@ -23,7 +23,7 @@ @implementation FBSDKGraphRequestMetadata - (instancetype)initWithRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestHandler)handler + completionHandler:(FBSDKGraphRequestBlock)handler batchParameters:(NSDictionary *)batchParameters { if ((self = [super init])) { diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h index 567f8ecdba..6e56cee5d3 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h @@ -18,11 +18,12 @@ #import "FBSDKCoreKit+Internal.h" +NS_SWIFT_NAME(GraphRequestPiggybackManager) @interface FBSDKGraphRequestPiggybackManager : NSObject + (void)addPiggybackRequests:(FBSDKGraphRequestConnection *)connection; -+ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestHandler)permissionHandler; ++ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestBlock)permissionHandler; + (void)addRefreshPiggybackIfStale:(FBSDKGraphRequestConnection *)connection; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m index bb85741832..0fe4fa4ca6 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m @@ -43,11 +43,12 @@ static int const FBSDKTokenRefreshRetrySeconds = 60 * 60; // hour } } -+ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestHandler)permissionHandler ++ (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; @@ -56,13 +57,13 @@ static int const FBSDKTokenRefreshRetrySeconds = 60 * 60; // hour if (--expectingCallbacksCount == 0) { FBSDKAccessToken *currentToken = [FBSDKAccessToken currentAccessToken]; NSDate *expirationDate = currentToken.expirationDate; - if (expirationDateNumber) { + if (expirationDateNumber != nil) { expirationDate = (expirationDateNumber.doubleValue > 0 ? [NSDate dateWithTimeIntervalSince1970:expirationDateNumber.doubleValue] : [NSDate distantFuture]); } NSDate *dataExpirationDate = currentToken.dataAccessExpirationDate; - if (dataAccessExpirationDateNumber) { + if (dataAccessExpirationDateNumber != nil) { dataExpirationDate = (dataAccessExpirationDateNumber.doubleValue > 0 ? [NSDate dateWithTimeIntervalSince1970:dataAccessExpirationDateNumber.doubleValue] : [NSDate distantFuture]); @@ -70,6 +71,7 @@ static int const FBSDKTokenRefreshRetrySeconds = 60 * 60; // hour 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 @@ -100,10 +102,12 @@ static int const FBSDKTokenRefreshRetrySeconds = 60 * 60; // hour if (!error) { permissions = [NSMutableSet set]; declinedPermissions = [NSMutableSet set]; + expiredPermissions = [NSMutableSet set]; [FBSDKInternalUtility extractPermissionsFromResponse:result grantedPermissions:permissions - declinedPermissions:declinedPermissions]; + declinedPermissions:declinedPermissions + expiredPermissions:expiredPermissions]; } expectingCallbackComplete(); if (permissionHandler) { diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m deleted file mode 100644 index 10019c30b1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m +++ /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 "FBSDKURLSessionTask.h" - -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -@interface FBSDKURLSessionTask () - -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic, copy) FBSDKURLSessionTaskHandler handler; -@property (nonatomic, assign) uint64_t requestStartTime; -@property (nonatomic, assign, readonly) NSUInteger loggerSerialNumber; - -@end - -@implementation FBSDKURLSessionTask - -- (instancetype)initWithRequest:(NSURLRequest *)request - fromSession:(NSURLSession *)session - completionHandler:(FBSDKURLSessionTaskHandler)handler -{ - if ((self = [super init])) { - _requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds]; - _loggerSerialNumber = [FBSDKLogger generateSerialNumber]; - _handler = [handler copy]; - __weak FBSDKURLSessionTask *weakSelf = self; - _task = [session dataTaskWithRequest:request - completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - if (error) { - [weakSelf taskDidCompleteWithError:error]; - } else { - [weakSelf taskDidCompleteWithResponse:response data:data]; - } - }]; - } - return self; -} - -#pragma mark - Logging and Completion - -- (void)logAndInvokeHandler:(FBSDKURLSessionTaskHandler)handler - error:(NSError *)error { - if (error) { - NSString *logEntry = [NSString - stringWithFormat:@"FBSDKURLSessionTask <#%lu>:\n Error: '%@'\n%@\n", - (unsigned long)self.loggerSerialNumber, - error.localizedDescription, - error.userInfo]; - - [self logMessage:logEntry]; - } - - [self invokeHandler:handler error:error response:nil responseData:nil]; -} - -- (void)logAndInvokeHandler:(FBSDKURLSessionTaskHandler)handler - response:(NSURLResponse *)response - responseData:(NSData *)responseData { - // Basic FBSDKURLSessionTask logging just prints out the URL. FBSDKGraphRequest logging provides more details. - NSString *mimeType = response.MIMEType; - NSMutableString *mutableLogEntry = [NSMutableString stringWithFormat:@"FBSDKURLSessionTask <#%lu>:\n Duration: %llu msec\nResponse Size: %lu kB\n MIME type: %@\n", - (unsigned long)self.loggerSerialNumber, - [FBSDKInternalUtility currentTimeInMilliseconds] - self.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:(FBSDKURLSessionTaskHandler)handler - error:(NSError *)error - response:(NSURLResponse *)response - responseData:(NSData *)responseData { - if (handler != nil) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(error, response, responseData); - }); - } -} - -- (void)logMessage:(NSString *)message -{ - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorNetworkRequests formatString:@"%@", message]; -} - -- (void)taskDidCompleteWithResponse:(NSURLResponse *)response data:(NSData *)data -{ - @try { - [self logAndInvokeHandler:self.handler response:response responseData:data]; - } @finally { - self.handler = nil; - } -} - -- (void)taskDidCompleteWithError:(NSError *)error -{ - @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:self.handler error:error]; - } @finally { - self.handler = nil; - } -} - -#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/Internal/ServerConfiguration/FBSDKDialogConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h index f32959428f..37ad8861a5 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h @@ -18,8 +18,13 @@ #import +#if SWIFT_PACKAGE +#import "FBSDKCopying.h" +#else #import +#endif +NS_SWIFT_NAME(DialogConfiguration) @interface FBSDKDialogConfiguration : NSObject - (instancetype)init NS_UNAVAILABLE; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h index 0c75bb8ccf..af3524c370 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h @@ -21,6 +21,7 @@ @class FBSDKGraphRequest; // maps codes and subcodes pairs to FBSDKErrorRecoveryConfiguration instances. +NS_SWIFT_NAME(ErrorConfiguration) @interface FBSDKErrorConfiguration : NSObject - (instancetype)init NS_UNAVAILABLE; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m index fb98e36770..cb94dd809d 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m @@ -19,6 +19,7 @@ #import "FBSDKErrorConfiguration.h" #import "FBSDKCoreKit+Internal.h" + #import "FBSDKErrorRecoveryConfiguration.h" static NSString *const kErrorCategoryOther = @"other"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h index 9785985729..6cb8e43055 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h @@ -18,9 +18,14 @@ #import +#if SWIFT_PACKAGE +#import "FBSDKConstants.h" +#else #import +#endif //immutable +NS_SWIFT_NAME(ErrorRecoveryConfiguration) @interface FBSDKErrorRecoveryConfiguration : NSObject @property (nonatomic, readonly) NSString *localizedRecoveryDescription; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h index e2a922823f..fa8a5b6593 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h @@ -22,6 +22,11 @@ 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; @@ -29,14 +34,12 @@ NS_ASSUME_NONNULL_BEGIN /** Returns the locally cached configuration. */ -+ (BOOL)boolForKey:(NSString *)key - appID:(NSString *)appID - defaultValue:(BOOL)defaultValue; ++ (BOOL)boolForKey:(NSString *)key defaultValue:(BOOL)defaultValue; /** Load the gate keeper configurations from server */ -+ (void)loadGateKeepers; ++ (void)loadGateKeepers:(nullable FBSDKGKManagerBlock)completionBlock; @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 index 59224c7ac4..dede1ae6bd 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m @@ -26,67 +26,82 @@ #import "FBSDKAppEventsUtility.h" #import "FBSDKGraphRequest+Internal.h" #import "FBSDKGraphRequest.h" +#import "FBSDKInternalUtility.h" #import "FBSDKSettings.h" #import "FBSDKTypeUtility.h" -#define FBSDK_GATEKEEPER_USER_DEFAULTS_KEY @"com.facebook.sdk:gateKeeper%@" +#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 NSMutableDictionary *_gateKeepers; +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 - -+ (BOOL)boolForKey:(NSString *)key - appID:(NSString *)appID - defaultValue:(BOOL)defaultValue ++ (void)initialize { - [self loadGateKeepers]; - if (appID == nil || _gateKeepers == nil || _gateKeepers[appID] == nil) { - return defaultValue; + if (self == [FBSDKGateKeeperManager class]) { + _completionBlocks = [NSMutableArray array]; } - NSDictionary *gateKeeper = [FBSDKTypeUtility dictionaryValue:_gateKeepers[appID]]; - return gateKeeper[key] == nil ? defaultValue : [gateKeeper[key] boolValue]; } -+ (void)loadGateKeepers ++ (BOOL)boolForKey:(NSString *)key defaultValue:(BOOL)defaultValue +{ + [self loadGateKeepers:nil]; + + return _gateKeepers[key] ? [_gateKeepers[key] boolValue] : defaultValue; +} + ++ (void)loadGateKeepers:(FBSDKGKManagerBlock)completionBlock { - NSString *appID = [FBSDKSettings appID]; @synchronized(self) { - if (_gateKeepers == nil) { - _gateKeepers = [[NSMutableDictionary alloc] init]; + NSString *appID = [FBSDKSettings appID]; + if (!appID) { + _gateKeepers = nil; + if (completionBlock != NULL) { + completionBlock(nil); + } + return; } - // load the defaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultKey = [NSString stringWithFormat:FBSDK_GATEKEEPER_USER_DEFAULTS_KEY, - appID]; - NSData *data = [defaults objectForKey:defaultKey]; - if ([data isKindOfClass:[NSData class]]) { - NSMutableDictionary *gatekeeper = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if (gatekeeper != nil && [gatekeeper isKindOfClass:[NSMutableDictionary class]] && appID != nil) { - _gateKeepers[appID] = gatekeeper; + + 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 ([self _gateKeeperIsValid]) { + if (completionBlock) { + completionBlock(nil); + } + } else { + [FBSDKBasicUtility array:_completionBlocks addObject:completionBlock]; if (!_loadingGateKeepers) { _loadingGateKeepers = YES; - FBSDKGraphRequest *request = [[self class] requestToLoadGateKeepers:appID]; + 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 appID:appID]; + [self processLoadRequestResponse:result error:error]; }]; [requestConnection start]; } @@ -96,7 +111,7 @@ static BOOL _requeryFinishedForAppStart; #pragma mark - Internal Class Methods -+ (FBSDKGraphRequest *)requestToLoadGateKeepers:(NSString *)appID ++ (FBSDKGraphRequest *)requestToLoadGateKeepers { NSString *sdkVersion = [FBSDKSettings sdkVersion]; @@ -105,7 +120,7 @@ static BOOL _requeryFinishedForAppStart; @"fields": FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS}; FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/%@", - appID, FBSDK_GATEKEEPER_APP_GATEKEEPER_EDGE] + [FBSDKSettings appID], FBSDK_GATEKEEPER_APP_GATEKEEPER_EDGE] parameters:parameters tokenString:nil HTTPMethod:nil @@ -115,45 +130,54 @@ static BOOL _requeryFinishedForAppStart; #pragma mark - Helper Class Methods -+ (void)processLoadRequestResponse:(id)result error:(NSError *)error appID:(NSString *)appID ++ (void)processLoadRequestResponse:(id)result error:(NSError *)error { @synchronized(self) { _loadingGateKeepers = NO; - if (error) { - return; - } + if (!error) { + // Update the timestamp only when there is no error + _timestamp = [NSDate date]; - // Update the timestamp only when there is no error - _timestamp = [NSDate date]; - - NSMutableDictionary *gateKeeper = _gateKeepers[appID]; - if (gateKeeper == nil) { - 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; - } + NSMutableDictionary *gateKeeper = [_gateKeepers mutableCopy]; + if (!gateKeeper) { + gateKeeper = [[NSMutableDictionary alloc] init]; } - _gateKeepers[appID] = gateKeeper; + 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]; } - // update the cached copy in user defaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultKey = [NSString stringWithFormat:FBSDK_GATEKEEPER_USER_DEFAULTS_KEY, - 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); } } diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h index b4e17baedd..73a5abd2bc 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h @@ -18,7 +18,11 @@ #import +#if SWIFT_PACKAGE +#import "FBSDKCopying.h" +#else #import +#endif #import "FBSDKDialogConfiguration.h" #import "FBSDKErrorConfiguration.h" @@ -43,6 +47,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationSmartLoginOptions) FBSDKServerConfigurationSmartLoginOptionsRequireConfirmation = 1 << 1, }; +NS_SWIFT_NAME(ServerConfiguration) @interface FBSDKServerConfiguration : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -57,8 +62,6 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationSmartLoginOptions) implicitLoggingEnabled:(BOOL)implicitLoggingEnabled implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled codelessEventsEnabled:(BOOL)codelessEventsEnabled - systemAuthenticationEnabled:(BOOL)systemAuthenticationEnabled - nativeAuthFlowEnabled:(BOOL)nativeAuthFlowEnabled uninstallTrackingEnabled:(BOOL)uninstallTrackingEnabled dialogConfigurations:(NSDictionary *)dialogConfigurations dialogFlows:(NSDictionary *)dialogFlows @@ -72,6 +75,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled 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; @@ -84,8 +90,6 @@ NS_DESIGNATED_INITIALIZER; @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=isNativeAuthFlowEnabled) BOOL nativeAuthFlowEnabled; -@property (nonatomic, assign, readonly, getter=isSystemAuthenticationEnabled) BOOL systemAuthenticationEnabled; @property (nonatomic, assign, readonly, getter=isUninstallTrackingEnabled) BOOL uninstallTrackingEnabled; @property (nonatomic, copy, readonly) NSString *loginTooltipText; @property (nonatomic, copy, readonly) NSDate *timestamp; @@ -96,6 +100,9 @@ NS_DESIGNATED_INITIALIZER; @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; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m index d437d728ed..0130d4ebfc 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m @@ -33,8 +33,6 @@ #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_SYSTEM_AUTHENTICATION_ENABLED_KEY @"systemAuthenticationEnabled" -#define FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY @"nativeAuthFlowEnabled" #define FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY @"timestamp" #define FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL @"sessionTimeoutInterval" #define FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN @"loggingToken" @@ -43,6 +41,9 @@ #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" @@ -86,8 +87,6 @@ const NSInteger FBSDKServerConfigurationVersion = 2; implicitLoggingEnabled:(BOOL)implicitLoggingEnabled implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled codelessEventsEnabled:(BOOL)codelessEventsEnabled - systemAuthenticationEnabled:(BOOL)systemAuthenticationEnabled - nativeAuthFlowEnabled:(BOOL)nativeAuthFlowEnabled uninstallTrackingEnabled:(BOOL)uninstallTrackingEnabled dialogConfigurations:(NSDictionary *)dialogConfigurations dialogFlows:(NSDictionary *)dialogFlows @@ -101,6 +100,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled 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]; @@ -112,9 +114,7 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled _implicitLoggingEnabled = implicitLoggingEnabled; _implicitPurchaseLoggingEnabled = implicitPurchaseLoggingEnabled; _codelessEventsEnabled = codelessEventsEnabled; - _systemAuthenticationEnabled = systemAuthenticationEnabled; _uninstallTrackingEnabled = uninstallTrackingEnabled; - _nativeAuthFlowEnabled = nativeAuthFlowEnabled; _dialogConfigurations = [dialogConfigurations copy]; _dialogFlows = [dialogFlows copy]; _timestamp = [timestamp copy]; @@ -127,6 +127,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled _smartLoginBookmarkIconURL = [smartLoginBookmarkIconURL copy]; _updateMessage = [updateMessage copy]; _eventBindings = eventBindings; + _restrictiveParams = restrictiveParams; + _AAMRules = AAMRules; + _suggestedEventsSetting = suggestedEventsSetting; _version = FBSDKServerConfigurationVersion; } return self; @@ -185,12 +188,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY]; BOOL codelessEventsEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY]; - BOOL systemAuthenticationEnabled = - [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_KEY]; BOOL uninstallTrackingEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY]; FBSDKServerConfigurationSmartLoginOptions smartLoginOptions = [decoder decodeIntegerForKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY]; - BOOL nativeAuthFlowEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY]; NSDate *timestamp = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY]; NSSet *dialogConfigurationsClasses = [[NSSet alloc] initWithObjects: [NSDictionary class], @@ -212,6 +212,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled 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 @@ -222,8 +225,6 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled implicitLoggingEnabled:implicitLoggingEnabled implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled codelessEventsEnabled:codelessEventsEnabled - systemAuthenticationEnabled:systemAuthenticationEnabled - nativeAuthFlowEnabled:nativeAuthFlowEnabled uninstallTrackingEnabled:uninstallTrackingEnabled dialogConfigurations:dialogConfigurations dialogFlows:dialogFlows @@ -237,6 +238,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled smartLoginMenuIconURL:smartLoginMenuIconURL updateMessage:updateMessage eventBindings:eventBindings + restrictiveParams:restrictiveParams + AAMRules:AAMRules + suggestedEventsSetting:suggestedEventsSetting ]; configuration->_version = version; return configuration; @@ -260,8 +264,6 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled [encoder encodeBool:_uninstallTrackingEnabled forKey:FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY]; [encoder encodeObject:_loginTooltipText forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY]; - [encoder encodeBool:_nativeAuthFlowEnabled forKey:FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY]; - [encoder encodeBool:_systemAuthenticationEnabled forKey:FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_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]; @@ -270,6 +272,9 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled [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]; } diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h index d5b9240e6a..78557e5cfc 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h @@ -21,8 +21,10 @@ #import "FBSDKServerConfiguration.h" #define FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT (60 * 60) -typedef void(^FBSDKServerConfigurationManagerLoadBlock)(FBSDKServerConfiguration *serverConfiguration, NSError *error); +typedef void (^FBSDKServerConfigurationBlock)(FBSDKServerConfiguration *serverConfiguration, NSError *error) +NS_SWIFT_NAME(ServerConfigurationBlock); +NS_SWIFT_NAME(ServerConfigurationManager) @interface FBSDKServerConfigurationManager : NSObject /** @@ -38,6 +40,6 @@ typedef void(^FBSDKServerConfigurationManagerLoadBlock)(FBSDKServerConfiguration This method will use a cached configuration if it is valid and not expired. */ -+ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationManagerLoadBlock)completionBlock; ++ (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 index 5b0e548659..efc4b5e788 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m @@ -21,18 +21,20 @@ #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 hour +// one minute #define DEFAULT_SESSION_TIMEOUT_INTERVAL 60 #define FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY @"com.facebook.sdk:serverConfiguration%@" @@ -46,8 +48,6 @@ #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_NATIVE_PROXY_AUTH_FLOW_ENABLED_FIELD @"ios_supports_native_proxy_auth_flow" -#define FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_FIELD @"ios_supports_system_auth" #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" @@ -55,6 +55,9 @@ #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 @@ -101,16 +104,16 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) NSString *appID = [FBSDKSettings appID]; @synchronized(self) { // load the server configuration if we don't have it already - [self loadServerConfigurationWithCompletionBlock:NULL]; + [self loadServerConfigurationWithCompletionBlock:nil]; // use whatever configuration we have or the default return _serverConfiguration ?: [self _defaultServerConfigurationForAppID:appID]; } } -+ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationManagerLoadBlock)completionBlock ++ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationBlock)completionBlock { - void (^loadBlock)(void) = NULL; + void (^loadBlock)(void) = nil; NSString *appID = [FBSDKSettings appID]; @synchronized(self) { // validate the cached configuration has the correct appID @@ -139,13 +142,12 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) } if (_requeryFinishedForAppStart && - ((_serverConfiguration && [self _serverConfigurationTimestampIsValid:_serverConfiguration.timestamp] && _serverConfiguration.version >= FBSDKServerConfigurationVersion) || - (_serverConfigurationErrorTimestamp && [self _serverConfigurationTimestampIsValid:_serverConfigurationErrorTimestamp]))) { + ((_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 - [FBSDKInternalUtility array:_completionBlocks addObject:[completionBlock copy]]; + [FBSDKBasicUtility array:_completionBlocks addObject:[completionBlock copy]]; // check if we are already loading if (!_loadingServerConfiguration) { @@ -165,12 +167,12 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) } } - if (loadBlock != NULL) { + if (loadBlock) { loadBlock(); } // Fetch app gatekeepers - [FBSDKGateKeeperManager loadGateKeepers]; + [FBSDKGateKeeperManager loadGateKeepers:nil]; } #pragma mark - Internal Class Methods @@ -193,8 +195,6 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) 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]]; - BOOL systemAuthenticationEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_FIELD]]; - BOOL nativeAuthFlowEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_NATIVE_PROXY_AUTH_FLOW_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]]; @@ -207,6 +207,9 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) 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 @@ -216,8 +219,6 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) implicitLoggingEnabled:implicitLoggingEnabled implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled codelessEventsEnabled:codelessEventsEnabled - systemAuthenticationEnabled:systemAuthenticationEnabled - nativeAuthFlowEnabled:nativeAuthFlowEnabled uninstallTrackingEnabled:uninstallTrackingEnabled dialogConfigurations:dialogConfigurations dialogFlows:dialogFlows @@ -231,7 +232,14 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) 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; @@ -243,10 +251,10 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) smartLoginBookmarkIconURL) { [[FBSDKImageDownloader sharedInstance] downloadImageWithURL:serverConfiguration.smartLoginBookmarkIconURL ttl:kSmartLoginIconsTTL - completion:NULL]; + completion:nil]; [[FBSDKImageDownloader sharedInstance] downloadImageWithURL:serverConfiguration.smartLoginMenuIconURL ttl:kSmartLoginIconsTTL - completion:NULL]; + completion:nil]; } #endif [self _didProcessConfigurationFromNetwork:serverConfiguration appID:appID error:nil]; @@ -269,10 +277,11 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD, FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD, FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD, - FBSDK_SERVER_CONFIGURATION_NATIVE_PROXY_AUTH_FLOW_ENABLED_FIELD, - FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_FIELD, FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD, - FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_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 @@ -327,8 +336,6 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) implicitLoggingEnabled:NO implicitPurchaseLoggingEnabled:NO codelessEventsEnabled:NO - systemAuthenticationEnabled:NO - nativeAuthFlowEnabled:NO uninstallTrackingEnabled:NO dialogConfigurations:nil dialogFlows:dialogFlows @@ -342,6 +349,9 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) smartLoginMenuIconURL:nil updateMessage:nil eventBindings:nil + restrictiveParams:nil + AAMRules:nil + suggestedEventsSetting:nil ]; } return _defaultServerConfiguration; @@ -376,9 +386,13 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) NSString *updateMessage = _serverConfiguration.updateMessage; if (updateMessage && updateMessage.length > 0 && !_printedUpdateMessage) { _printedUpdateMessage = YES; - NSLog(@"%@", updateMessage); + [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational logEntry:updateMessage]; } #endif + + if (!_printedUpdateMessage) { + _printedUpdateMessage = _printedUpdateMessage; + } } // update the cached copy in NSUserDefaults @@ -390,7 +404,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) } // wrap the completion blocks - for (FBSDKServerConfigurationManagerLoadBlock completionBlock in _completionBlocks) { + for (FBSDKServerConfigurationBlock completionBlock in _completionBlocks) { [completionBlocks addObject:[self _wrapperBlockForLoadBlock:completionBlock]]; } [_completionBlocks removeAllObjects]; @@ -428,10 +442,10 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) return ([[NSDate date] timeIntervalSinceDate:timestamp] < FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT); } -+ (void(^)(void))_wrapperBlockForLoadBlock:(FBSDKServerConfigurationManagerLoadBlock)loadBlock ++ (FBSDKCodeBlock)_wrapperBlockForLoadBlock:(FBSDKServerConfigurationBlock)loadBlock { - if (loadBlock == NULL) { - return NULL; + 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 diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h index 0d7a49290f..2176928b4e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h @@ -18,10 +18,15 @@ #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 index b9acabb559..8d1ca02843 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m @@ -18,65 +18,82 @@ #import "FBSDKAccessTokenCache.h" -#import "FBSDKAccessTokenCacheV3.h" -#import "FBSDKAccessTokenCacheV3_17.h" -#import "FBSDKAccessTokenCacheV3_21.h" -#import "FBSDKAccessTokenCacheV4.h" +#import "FBSDKDynamicFrameworkLoader.h" +#import "FBSDKInternalUtility.h" +#import "FBSDKKeychainStore.h" -static BOOL g_tryDeprecatedCaches = YES; +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 - -- (FBSDKAccessToken*)accessToken { - FBSDKAccessToken *token = [[FBSDKAccessTokenCacheV4 alloc] init].accessToken; - if (token || !g_tryDeprecatedCaches) { - return token; - } + FBSDKKeychainStore *_keychainStore; +} - g_tryDeprecatedCaches = NO; - NSArray *oldCacheClasses = [[self class] deprecatedCacheClasses]; - __block FBSDKAccessToken *oldToken = nil; - [oldCacheClasses enumerateObjectsUsingBlock:^(Class obj, NSUInteger idx, BOOL *stop) { - id cache = [[obj alloc] init]; - oldToken = cache.accessToken; - if (oldToken) { - *stop = YES; - [cache clearCache]; - } - }]; - if (oldToken) { - self.accessToken = oldToken; +- (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 oldToken; + 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 { - [[FBSDKAccessTokenCacheV4 alloc] init].accessToken = token; - if (g_tryDeprecatedCaches) { - g_tryDeprecatedCaches = NO; - NSArray *oldCacheClasses = [[self class] deprecatedCacheClasses]; - [oldCacheClasses enumerateObjectsUsingBlock:^(Class obj, NSUInteger idx, BOOL *stop) { - id cache = [[obj alloc] init]; - [cache clearCache]; - }]; + 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 { - [[[FBSDKAccessTokenCacheV4 alloc] init] clearCache]; -} - -// used by FBSDKAccessTokenCacheIntegrationTests -+ (void)resetV3CacheChecks -{ - g_tryDeprecatedCaches = YES; -} - -+ (NSArray *)deprecatedCacheClasses -{ - return @[ [FBSDKAccessTokenCacheV3_21 class], [FBSDKAccessTokenCacheV3_17 class], [FBSDKAccessTokenCacheV3 class]]; + [_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/FBSDKAccessTokenCacheV3.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m deleted file mode 100644 index f118b009c9..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright notice shall be -// included in all copies or substantial portions of the software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -#import "FBSDKAccessTokenCacheV3.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" - -NSString *const FBSDKTokenInformationUUIDKey = @"com.facebook.sdk:TokenInformationUUIDKey"; - -#define FBSDK_TOKEN_INFORMATION_TOKEN_KEY @"com.facebook.sdk:TokenInformationTokenKey" -#define FBSDK_TOKEN_INFORMATION_EXPIRATION_DATE_KEY @"com.facebook.sdk:TokenInformationExpirationDateKey" -#define FBSDK_TOKEN_INFORMATION_USER_FBID_KEY @"com.facebook.sdk:TokenInformationUserFBIDKey" -#define FBSDK_TOKEN_INFORMATION_PERMISSIONS_KEY @"com.facebook.sdk:TokenInformationPermissionsKey" -#define FBSDK_TOKEN_INFORMATION_DECLINED_PERMISSIONS_KEY @"com.facebook.sdk:TokenInformationDeclinedPermissionsKey" -#define FBSDK_TOKEN_INFORMATION_APP_ID_KEY @"com.facebook.sdk:TokenInformationAppIDKey" -#define FBSDK_TOKEN_INFORMATION_REFRESH_DATE_KEY @"com.facebook.sdk:TokenInformationRefreshDateKey" - - -@implementation FBSDKAccessTokenCacheV3 - -- (FBSDKAccessToken *)accessToken -{ - // Check NSUserDefaults ( <= v3.16 ) - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSDictionary *tokenDictionary = [defaults objectForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; - return [[self class] accessTokenForV3Dictionary:tokenDictionary]; -} - -- (void)clearCache -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults removeObjectForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; - [defaults synchronize]; -} - -- (void)setAccessToken:(FBSDKAccessToken *)token -{ - //no-op. - NSAssert(NO, @"deprecated cache FBSDKAccessTokenCacheV3 should not be used to cache a token"); -} - -+ (FBSDKAccessToken *)accessTokenForV3Dictionary:(NSDictionary *)dictionary -{ - NSString *tokenString = [FBSDKTypeUtility stringValue:dictionary[FBSDK_TOKEN_INFORMATION_TOKEN_KEY]]; - if (tokenString.length > 0) { - NSDate *expirationDate = dictionary[FBSDK_TOKEN_INFORMATION_EXPIRATION_DATE_KEY]; - // Note we default to valid in cases where expiration date is missing. - BOOL isExpired = ([expirationDate compare:[NSDate date]] == NSOrderedAscending); - if (isExpired) { - return nil; - } - return [[FBSDKAccessToken alloc] initWithTokenString:tokenString - permissions:dictionary[FBSDK_TOKEN_INFORMATION_PERMISSIONS_KEY] - declinedPermissions:dictionary[FBSDK_TOKEN_INFORMATION_DECLINED_PERMISSIONS_KEY] - appID:dictionary[FBSDK_TOKEN_INFORMATION_APP_ID_KEY] - userID:dictionary[FBSDK_TOKEN_INFORMATION_USER_FBID_KEY] - expirationDate:expirationDate - refreshDate:dictionary[FBSDK_TOKEN_INFORMATION_REFRESH_DATE_KEY] - dataAccessExpirationDate:nil]; - } - return nil; -} -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m deleted file mode 100644 index 83f2cceb4d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m +++ /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 "FBSDKAccessTokenCacheV3_17.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKAccessTokenCacheV3.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKKeychainStoreViaBundleID.h" -#import "FBSDKSettings.h" - -@implementation FBSDKAccessTokenCacheV3_17 -{ - FBSDKKeychainStoreViaBundleID *_keychainStore; -} - -- (instancetype)init -{ - if ((self = [super init])) { - _keychainStore = [[FBSDKKeychainStoreViaBundleID alloc] init]; - } - return self; -} -- (FBSDKAccessToken *)accessToken -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *uuidKey = [[FBSDKSettings legacyUserDefaultTokenInformationKeyName] stringByAppendingString:@"UUID"]; - NSString *uuid = [defaults objectForKey:uuidKey]; - NSDictionary *tokenDictionary = [_keychainStore dictionaryForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; - if (![tokenDictionary[FBSDKTokenInformationUUIDKey] isEqualToString:uuid]) { - [self clearCache]; - } - - return [FBSDKAccessTokenCacheV3 accessTokenForV3Dictionary:tokenDictionary]; -} - -- (void)clearCache -{ - [_keychainStore setDictionary:nil forKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName] accessibility:nil]; -} - -- (void)setAccessToken:(FBSDKAccessToken *)token -{ - //no-op. - NSAssert(NO, @"deprecated cache FBSDKAccessTokenCacheV3_17 should not be used to cache a token"); -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m deleted file mode 100644 index 6b25f0af90..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m +++ /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 "FBSDKAccessTokenCacheV3_21.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKAccessTokenCacheV3.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKKeychainStore.h" -#import "FBSDKSettings.h" - -@implementation FBSDKAccessTokenCacheV3_21 -{ - 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 *uuidKey = [[FBSDKSettings legacyUserDefaultTokenInformationKeyName] stringByAppendingString:@"UUID"]; - NSString *uuid = [defaults objectForKey:uuidKey]; - NSDictionary *tokenDictionary = [_keychainStore dictionaryForKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName]]; - if (![tokenDictionary[FBSDKTokenInformationUUIDKey] isEqualToString:uuid]) { - [self clearCache]; - } - - return [FBSDKAccessTokenCacheV3 accessTokenForV3Dictionary:tokenDictionary]; -} - -- (void)clearCache -{ - [_keychainStore setDictionary:nil forKey:[FBSDKSettings legacyUserDefaultTokenInformationKeyName] accessibility:nil]; -} - -- (void)setAccessToken:(FBSDKAccessToken *)token -{ - //no-op. - NSAssert(NO, @"deprecated cache FBSDKAccessTokenCacheV3_21 should not be used to cache a token"); -} - - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m deleted file mode 100644 index 0de90e4f15..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.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 "FBSDKAccessTokenCacheV4.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 FBSDKAccessTokenCacheV4 -{ - 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 index ae780e30a1..e5595db760 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h @@ -20,6 +20,7 @@ @class FBSDKAccessToken; +NS_SWIFT_NAME(AccessTokenCaching) @protocol FBSDKAccessTokenCaching @property (nonatomic, copy) FBSDKAccessToken *accessToken; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h index 5754037fa9..5b9636d915 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h @@ -18,6 +18,7 @@ #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 index 2744439258..05cda6191f 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m @@ -59,8 +59,8 @@ { FBSDKAccessToken *accessToken = FBSDKAccessToken.currentAccessToken; NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKInternalUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeNewKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeOldKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeNewKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeOldKey]; userInfo[FBSDKAccessTokenDidExpireKey] = @YES; [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAccessTokenDidChangeNotification diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h index a99d5b3fba..15fc40b7e3 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(KeychainStore) @interface FBSDKKeychainStore : NSObject @property (nonatomic, readonly, copy) NSString *service; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m index 81141ad7c2..78bc9d6598 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m @@ -1,168 +1,166 @@ -/** - * Contains code from UICKeyChainStore - * - * Copyright (c) 2011 kishikawa katsumi - * - * 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. - */ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. +// +// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +// copy, modify, and distribute this software in source code or binary form for use +// in connection with the web services and APIs provided by Facebook. +// +// As with any software that integrates with the Facebook platform, your use of +// this software is subject to the Facebook Developer Principles and Policies +// [http://developers.facebook.com/policy/]. This copyright notice shall be +// included in all copies or substantial portions of the software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF 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"); - } + if ((self = [super init])) { + _service = service ? [service copy] : [NSBundle mainBundle].bundleIdentifier; + _accessGroup = [accessGroup copy]; + NSAssert(_service, @"Keychain must be initialized with service"); + } - return self; + 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]; + 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; - } + NSData *data = [self dataForKey:key]; + if (!data) { + return nil; + } - NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if (![dict isKindOfClass:[NSDictionary class]]) { - return nil; - } + NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + if (![dict isKindOfClass:[NSDictionary class]]) { + return nil; + } - return dict; + 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]; + 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; - } + NSData *data = [self dataForKey:key]; + if (!data) { + return nil; + } - return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } - (BOOL)setData:(NSData *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility { - if (!key) { - return NO; - } + if (!key) { + return NO; + } #if TARGET_OS_SIMULATOR - NSLog(@"Falling back to storing access token in NSUserDefaults because of simulator bug"); - [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; + [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]; + return [[NSUserDefaults standardUserDefaults] synchronize]; #else - NSMutableDictionary *query = [self queryForKey:key]; + NSMutableDictionary *query = [self queryForKey:key]; - OSStatus status; - if (value) { - NSMutableDictionary *attributesToUpdate = [NSMutableDictionary dictionary]; - [attributesToUpdate setObject:value forKey:[FBSDKDynamicFrameworkLoader loadkSecValueData]]; + 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) { + 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]]; - } + if (@available(macOS 10.9, iOS 8, *)) { + if (accessibility) { + [query setObject:(__bridge id)(accessibility) forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessible]]; } + } #endif - [query setObject:value forKey:[FBSDKDynamicFrameworkLoader loadkSecValueData]]; + [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; - } + status = fbsdkdfl_SecItemAdd((__bridge CFDictionaryRef)query, NULL); } + } else { + status = fbsdkdfl_SecItemDelete((__bridge CFDictionaryRef)query); + if (status == errSecItemNotFound) { + status = errSecSuccess; + } + } - return (status == errSecSuccess); + return (status == errSecSuccess); #endif } - (NSData *)dataForKey:(NSString *)key { - if (!key) { - return nil; - } + if (!key) { + return nil; + } #if TARGET_OS_SIMULATOR - NSLog(@"Falling back to loading access token from NSUserDefaults because of simulator bug"); - return [[NSUserDefaults standardUserDefaults] dataForKey:key]; + [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]]; + 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; - } + CFTypeRef data = nil; + OSStatus status = fbsdkdfl_SecItemCopyMatching((__bridge CFDictionaryRef)query, &data); + if (status != errSecSuccess) { + return nil; + } - if (!data || CFGetTypeID(data) != CFDataGetTypeID()) { - return nil; - } + if (!data || CFGetTypeID(data) != CFDataGetTypeID()) { + return nil; + } - NSData *ret = [NSData dataWithData:(__bridge NSData *)(data)]; - CFRelease(data); + NSData *ret = [NSData dataWithData:(__bridge NSData *)(data)]; + CFRelease(data); - return ret; + 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]]; + 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]]; - } + if (_accessGroup) { + [query setObject:_accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; + } #endif - return query; + 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 index 0a0fb86bc0..85ae2d0796 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h @@ -20,6 +20,7 @@ // 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, diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m index 78ed26f61f..6fdc12b340 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m @@ -41,7 +41,7 @@ query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecAttrGeneric]] = key; #if !TARGET_IPHONE_SIMULATOR - [FBSDKInternalUtility dictionary:query setObject:self.accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; + [FBSDKBasicUtility dictionary:query setObject:self.accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; #endif return query; 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 index cd5afc85eb..6bb7db4112 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h @@ -18,10 +18,15 @@ #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; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h index ec55385a77..79ab329fe4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h @@ -16,10 +16,17 @@ // IN AN ACTION OF 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 index 93b3ee192c..244efcaad8 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -85,3 +89,5 @@ } @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 index 54825b6075..f18c98db8f 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h @@ -16,7 +16,13 @@ // IN AN ACTION OF 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 index 71b3d80e88..2d27478f41 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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; @@ -29,3 +33,5 @@ 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 index 5be344554a..ca78c86442 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(Icon) @interface FBSDKIcon : NSObject - (instancetype)initWithColor:(UIColor *)color NS_DESIGNATED_INITIALIZER; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h index 76affe6806..b7432a690e 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h @@ -20,6 +20,7 @@ #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 index 47d0dc4650..f13364f061 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m @@ -22,38 +22,50 @@ - (CGPathRef)pathWithSize:(CGSize)size { - CGAffineTransform transformValue = CGAffineTransformMakeScale(size.width / 136.0, size.height / 136.0); - const CGAffineTransform *transform = &transformValue; - CGMutablePathRef path = CGPathCreateMutable(); - CGPathMoveToPoint(path, transform, 127.856, 0.676); - CGPathAddLineToPoint(path, transform, 7.469, 0.676); - CGPathAddCurveToPoint(path, transform, 3.344, 0.676, 0.0, 4.02, 0.0, 8.145); - CGPathAddLineToPoint(path, transform, 0.0, 128.531); - CGPathAddCurveToPoint(path, transform, 0.0, 132.656, 3.344, 136.0, 7.469, 136.0); - CGPathAddLineToPoint(path, transform, 72.282, 136.0); - CGPathAddLineToPoint(path, transform, 72.282, 83.596); - CGPathAddLineToPoint(path, transform, 54.646, 83.596); - CGPathAddLineToPoint(path, transform, 54.646, 63.173); - CGPathAddLineToPoint(path, transform, 72.282, 63.173); - CGPathAddLineToPoint(path, transform, 72.282, 48.112); - CGPathAddCurveToPoint(path, transform, 72.282, 30.633, 82.957, 21.116, 98.549, 21.116); - CGPathAddCurveToPoint(path, transform, 106.018, 21.116, 112.438, 21.671, 114.309, 21.92); - CGPathAddLineToPoint(path, transform, 114.309, 40.187); - CGPathAddLineToPoint(path, transform, 103.495, 40.191); - CGPathAddCurveToPoint(path, transform, 95.014, 40.191, 93.372, 44.221, 93.372, 50.133); - CGPathAddLineToPoint(path, transform, 93.372, 63.173); - CGPathAddLineToPoint(path, transform, 113.596, 63.173); - CGPathAddLineToPoint(path, transform, 110.963, 83.596); - CGPathAddLineToPoint(path, transform, 93.372, 83.596); - CGPathAddLineToPoint(path, transform, 93.372, 136.0); - CGPathAddLineToPoint(path, transform, 127.856, 136.0); - CGPathAddCurveToPoint(path, transform, 131.981, 136.0, 135.325, 132.656, 135.325, 128.531); - CGPathAddLineToPoint(path, transform, 135.325, 8.145); - CGPathAddCurveToPoint(path, transform, 135.325, 4.02, 131.981, 0.676, 127.856, 0.676); - CGPathCloseSubpath(path); - CGPathRef result = CGPathCreateCopy(path); - CGPathRelease(path); - return CFAutorelease(result); + 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 index 1a44797403..cad25b6bde 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h @@ -16,10 +16,17 @@ // IN AN ACTION OF 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 index 6e0e1ede84..bdd5912524 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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 @@ -49,3 +53,5 @@ } @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 index 29e2912df0..dfa023356c 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h @@ -18,8 +18,6 @@ #import -#import "../FBSDKMath.h" - /** Insets a CGSize with the insets in a UIEdgeInsets. */ @@ -70,10 +68,10 @@ static inline CGSize FBSDKTextSize(NSString *text, NSParagraphStyleAttributeName: paragraphStyle, }; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:attributes]; - CGSize size = [FBSDKMath ceilForSize:[attributedString boundingRectWithSize:constrainedSize - options:(NSStringDrawingUsesDeviceMetrics | - NSStringDrawingUsesLineFragmentOrigin | - NSStringDrawingUsesFontLeading) - context:NULL].size]; - return [FBSDKMath ceilForSize:size]; + 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 index f280228c42..d69ee86af0 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h @@ -18,6 +18,7 @@ #import +NS_SWIFT_NAME(ViewImpressionTracker) @interface FBSDKViewImpressionTracker : NSObject + (instancetype)impressionTrackerWithEventName:(NSString *)eventName; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m index 4f95ad7be5..f20f584443 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m @@ -79,9 +79,9 @@ } [_trackedImpressions addObject:impressionKey]; - [FBSDKAppEvents logImplicitEvent:self.eventName - valueToSum:nil + [FBSDKAppEvents logInternalEvent:self.eventName parameters:parameters + isImplicitlyLogged:YES accessToken:[FBSDKAccessToken currentAccessToken]]; } diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h index 84dcd6272f..10daa67f7b 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h @@ -16,17 +16,23 @@ // IN AN ACTION OF 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) BOOL deferVisibility; +@property (nonatomic, assign, getter=shouldDeferVisibility) BOOL deferVisibility; @property (nonatomic, weak) id delegate; @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSDictionary *parameters; @@ -35,6 +41,7 @@ @end +NS_SWIFT_NAME(WebDialogDelegate) @protocol FBSDKWebDialogDelegate - (void)webDialog:(FBSDKWebDialog *)webDialog didCompleteWithResults:(NSDictionary *)results; @@ -42,3 +49,5 @@ - (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 index aa177b35c3..66935ab5c7 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -29,6 +33,8 @@ #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 () @@ -216,10 +222,10 @@ static FBSDKWebDialog *g_currentDialog = nil; parameters[@"display"] = @"touch"; parameters[@"sdk"] = [NSString stringWithFormat:@"ios-%@", [FBSDKSettings sdkVersion]]; parameters[@"redirect_uri"] = @"fbconnect://success"; - [FBSDKInternalUtility dictionary:parameters setObject:[FBSDKSettings appID] forKey:@"app_id"]; - [FBSDKInternalUtility dictionary:parameters - setObject:[FBSDKAccessToken currentAccessToken].tokenString - forKey:@"access_token"]; + [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] @@ -314,7 +320,7 @@ static FBSDKWebDialog *g_currentDialog = nil; - (void)_updateViewsWithScale:(CGFloat)scale alpha:(CGFloat)alpha animationDuration:(CFTimeInterval)animationDuration - completion:(void(^)(BOOL finished))completion + completion:(FBSDKBoolBlock)completion { CGAffineTransform transform; CGRect applicationFrame = [self _applicationFrameForOrientation]; @@ -340,3 +346,5 @@ static FBSDKWebDialog *g_currentDialog = nil; } @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 index 08f17f6732..e24704e9f4 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h @@ -16,10 +16,15 @@ // IN AN ACTION OF 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; @@ -29,6 +34,7 @@ @end +NS_SWIFT_NAME(WebDialogViewDelegate) @protocol FBSDKWebDialogViewDelegate - (void)webDialogView:(FBSDKWebDialogView *)webDialogView didCompleteWithResults:(NSDictionary *)results; @@ -37,3 +43,5 @@ - (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 index 2836daf65c..46f380b3fd 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m @@ -16,23 +16,29 @@ // IN AN ACTION OF 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" -#import "FBSDKUtility.h" #define FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH 10.0 -@interface FBSDKWebDialogView () +@interface FBSDKWebDialogView () @end @implementation FBSDKWebDialogView { UIButton *_closeButton; UIActivityIndicatorView *_loadingView; - UIWebView *_webView; + WKWebView *_webView; } #pragma mark - Object Lifecycle @@ -43,8 +49,8 @@ self.backgroundColor = [UIColor clearColor]; self.opaque = NO; - _webView = [[UIWebView alloc] initWithFrame:CGRectZero]; - _webView.delegate = self; + _webView = [[WKWebView alloc] initWithFrame:CGRectZero]; + _webView.navigationDelegate = self; [self addSubview:_webView]; _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; @@ -69,7 +75,7 @@ - (void)dealloc { - _webView.delegate = nil; + _webView.navigationDelegate = nil; } #pragma mark - Public Methods @@ -137,9 +143,9 @@ [_delegate webDialogViewDidCancel:self]; } -#pragma mark - UIWebViewDelegate +#pragma mark - WKNavigationDelegate -- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error +- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error { [_loadingView stopAnimating]; @@ -154,20 +160,20 @@ } } -- (BOOL)webView:(UIWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType +- (void)webView:(WKWebView *)webView +decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction +decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { - NSURL *URL = request.URL; + NSURL *URL = navigationAction.request.URL; if ([URL.scheme isEqualToString:@"fbconnect"]) { - NSMutableDictionary *parameters = [[FBSDKUtility dictionaryWithQueryString:URL.query] mutableCopy]; - [parameters addEntriesFromDictionary:[FBSDKUtility dictionaryWithQueryString:URL.fragment]]; + 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 = [NSError fbErrorWithCode:errorCode message:errorMessage]; + NSError *error = [FBSDKError errorWithCode:errorCode message:errorMessage]; [_delegate webDialogView:self didFailWithError:error]; } else { [_delegate webDialogViewDidCancel:self]; @@ -175,19 +181,21 @@ shouldStartLoadWithRequest:(NSURLRequest *)request } else { [_delegate webDialogView:self didCompleteWithResults:parameters]; } - return NO; - } else if (navigationType == UIWebViewNavigationTypeLinkClicked) { - [[UIApplication sharedApplication] openURL:request.URL]; - return NO; + decisionHandler(WKNavigationActionPolicyCancel); + } else if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { + [[UIApplication sharedApplication] openURL:URL]; + decisionHandler(WKNavigationActionPolicyCancel); } else { - return YES; + decisionHandler(WKNavigationActionPolicyAllow); } } -- (void)webViewDidFinishLoad:(UIWebView *)webView +- (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 index 234979dcc6..291cc83622 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m +++ b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m @@ -85,7 +85,7 @@ static void fbsdkdfl_load_symbol_once(void *context) #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 }; \ + 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 @@ -235,12 +235,12 @@ _fbsdkdfl_handle_get_impl_(Social) NSString *fbsdkdfl_SLServiceTypeFacebook(void) { - _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeFacebook); + __weak _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeFacebook); } NSString *fbsdkdfl_SLServiceTypeTwitter(void) { - _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeTwitter); + __weak _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeTwitter); } #pragma mark - Social Classes @@ -390,7 +390,7 @@ Class fbsdkdfl_ASWebAuthenticationSessionClass(void) _fbsdkdfl_load_framework_once_impl_(Accounts) _fbsdkdfl_handle_get_impl_(Accounts) -#define _fbsdkdfl_Accounts_get_and_return_NSString(SYMBOL) _fbsdkdfl_get_and_return_NSString(Accounts, SYMBOL) +#define _fbsdkdfl_Accounts_get_and_return_NSString(SYMBOL) __weak _fbsdkdfl_get_and_return_NSString(Accounts, SYMBOL) NSString *fbsdkdfl_ACFacebookAppIdKey(void) { @@ -500,17 +500,17 @@ Class fbsdkdfl_CIFilterClass(void) NSString *fbsdkdfl_kCIInputImageKey(void) { - _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputImageKey); + __weak _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputImageKey); } NSString *fbsdkdfl_kCIInputRadiusKey(void) { - _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputRadiusKey); + __weak _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputRadiusKey); } NSString *fbsdkdfl_kCIOutputImageKey(void) { - _fbsdkdfl_CoreImage_get_and_return_NSString(kCIOutputImageKey); + __weak _fbsdkdfl_CoreImage_get_and_return_NSString(kCIOutputImageKey); } #pragma mark - Photos.framework 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 index 12df4c2757..6e6afcf99e 100644 Binary files a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings and b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings differ diff --git a/iphone/Maps/Pods/FBSDKCoreKit/README.md b/iphone/Maps/Pods/FBSDKCoreKit/README.md index 1d8dcaefa0..a200d7a196 100644 --- a/iphone/Maps/Pods/FBSDKCoreKit/README.md +++ b/iphone/Maps/Pods/FBSDKCoreKit/README.md @@ -1,7 +1,7 @@ # 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-objc-sdk.svg?branch=master)](https://travis-ci.org/facebook/facebook-objc-sdk) +[![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) @@ -15,9 +15,34 @@ NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookS ## TRY IT OUT -1. Download the SDK at or via CocoaPods by adding the 'FBSDKCoreKit', - 'FBSDKLoginKit', and 'FBSDKShareKit' pods. -2. Test your install: build and run the project at `~/Documents/FacebookSDK/Samples/Scrumptious/Scrumptious.xcodeproj` +### 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. @@ -31,15 +56,21 @@ NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookS ## GIVE FEEDBACK -Please report bugs or issues to +Please report bugs or issues to our designated developer support team -- -- as this will help us resolve them more quickly. -You can also join the [Facebook Developers Group on Facebook](https://www.facebook.com/groups/fbdevelopers/) or ask -questions on [Stack Overflow](http://facebook.stackoverflow.com) +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 diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h index 52c1de7600..36665b96ae 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h @@ -24,6 +24,7 @@ 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 /*! diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m index edb94b3d00..4f22fce519 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m @@ -20,7 +20,7 @@ @implementation FBSDKDeviceLoginCodeInfo -- (instancetype) initWithIdentifier:(NSString *)identifier +- (instancetype)initWithIdentifier:(NSString *)identifier loginCode:(NSString *)loginCode verificationURL:(NSURL *)verificationURL expirationDate:(NSDate *)expirationDate diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h index 3f6f0360b2..b4e483ab42 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h @@ -18,8 +18,8 @@ #import -#import -#import +#import "FBSDKDeviceLoginCodeInfo.h" +#import "FBSDKDeviceLoginManagerResult.h" NS_ASSUME_NONNULL_BEGIN @@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN /*! @abstract A delegate for `FBSDKDeviceLoginManager`. */ +NS_SWIFT_NAME(DeviceLoginManagerDelegate) @protocol FBSDKDeviceLoginManagerDelegate /*! @@ -36,7 +37,8 @@ NS_ASSUME_NONNULL_BEGIN @param loginManager the login manager instance. @param codeInfo the code info data. */ -- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager startedWithCodeInfo:(FBSDKDeviceLoginCodeInfo *)codeInfo; +- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager + startedWithCodeInfo:(FBSDKDeviceLoginCodeInfo *)codeInfo; /*! @abstract Indicates the device login flow has finished. @@ -60,13 +62,14 @@ NS_ASSUME_NONNULL_BEGIN 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:(nullable NSArray *)permissions +- (instancetype)initWithPermissions:(NSArray *)permissions enableSmartLogin:(BOOL)enableSmartLogin NS_DESIGNATED_INITIALIZER; @@ -81,7 +84,7 @@ NS_DESIGNATED_INITIALIZER; /*! @abstract the requested permissions. */ -@property (nullable, nonatomic, copy, readonly) NSArray *permissions; +@property (nonatomic, copy, readonly) NSArray *permissions; /*! @abstract the optional URL to redirect the user to after they complete the login. diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m index f293c260f6..ddf0779033 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m @@ -19,9 +19,13 @@ #import "FBSDKDeviceLoginManager.h" #import "FBSDKDeviceLoginManagerResult+Internal.h" -#import - +#ifdef FBSDKCOCOAPODS +#import +#import +#else #import "FBSDKCoreKit+Internal.h" +#endif + #import "FBSDKDeviceLoginCodeInfo+Internal.h" #import "FBSDKLoginConstants.h" @@ -130,27 +134,30 @@ static NSMutableArray *g_loginManagerInstances; !userID || !permissionResult) { #if TARGET_TV_OS - NSError *wrappedError = [NSError fbErrorWithDomain:FBSDKShareErrorDomain - code:FBSDKErrorTVOSUnknown - message:@"Unable to fetch permissions for token" - underlyingError:error]; + NSError *wrappedError = [FBSDKError errorWithDomain:FBSDKShareErrorDomain + code:FBSDKErrorTVOSUnknown + message:@"Unable to fetch permissions for token" + underlyingError:error]; #else - NSError *wrappedError = [NSError fbErrorWithDomain:FBSDKLoginErrorDomain - code:FBSDKErrorUnknown - message:@"Unable to fetch permissions for token" - underlyingError:error]; + 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]; + 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 @@ -212,9 +219,9 @@ static NSMutableArray *g_loginManagerInstances; if (tokenString) { [self _notifyToken:tokenString]; } else { - NSError *unknownError = [NSError fbErrorWithDomain:FBSDKLoginErrorDomain - code:FBSDKErrorUnknown - message:@"Device Login poll failed. No token nor error was found."]; + NSError *unknownError = [FBSDKError errorWithDomain:FBSDKLoginErrorDomain + code:FBSDKErrorUnknown + message:@"Device Login poll failed. No token nor error was found."]; [self _notifyError:unknownError]; } } diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h index ccce552328..3124c0fae6 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h @@ -18,7 +18,11 @@ #import +#ifdef FBSDKCOCOAPODS #import +#endif + +@class FBSDKAccessToken; NS_ASSUME_NONNULL_BEGIN @@ -26,6 +30,7 @@ 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 /*! diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h index afa4029f3c..e181b7a03e 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h @@ -18,12 +18,29 @@ #import -#import +#import "TargetConditionals.h" -#import +#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; /** @@ -40,7 +57,7 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) /** 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. @@ -55,6 +72,7 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) `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 /** @@ -68,24 +86,20 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) /** Gets or sets the login behavior to use */ -@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; -/** - The publish permissions to request. +@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. - Use `defaultAudience` to specify the default audience to publish to. Note this is converted to NSSet and is only an NSArray for the convenience of literal syntax. - */ -@property (copy, nonatomic) NSArray *publishPermissions; -/** - The read permissions to request. - - Note, that if read permissions are specified, then publish permissions should not be specified. 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 *readPermissions; +@property (copy, nonatomic) NSArray *permissions; /** Gets or sets the desired tooltip behavior. */ @@ -101,6 +115,7 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) @protocol A delegate for `FBSDKLoginButton` */ +NS_SWIFT_NAME(LoginButtonDelegate) @protocol FBSDKLoginButtonDelegate @required @@ -111,8 +126,8 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) @param error The error (if any) from the login */ - (void)loginButton:(FBSDKLoginButton *)loginButton -didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result - error:(NSError *)error; +didCompleteWithResult:(nullable FBSDKLoginManagerLoginResult *)result + error:(nullable NSError *)error; /** Sent to the delegate when the button was used to logout. @@ -129,3 +144,7 @@ didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result - (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 index 672f70b5df..f75c55e297 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m @@ -16,9 +16,18 @@ // IN AN ACTION OF 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; @@ -69,12 +78,13 @@ static const CGFloat kPaddingBetweenLogoTitle = 8.0; - (UIFont *)defaultFont { - return [UIFont systemFontOfSize:13]; -} + CGFloat size = 15; -- (UIColor *)backgroundColor -{ - return [UIColor colorWithRed:66.0/255.0 green:103.0/255.0 blue:178.0/255.0 alpha:1.0]; + if (@available(iOS 8.2, *)) { + return [UIFont systemFontOfSize:size weight:UIFontWeightSemibold]; + } else { + return [UIFont boldSystemFontOfSize:size]; + } } #pragma mark - UIView @@ -184,7 +194,7 @@ static const CGFloat kPaddingBetweenLogoTitle = 8.0; toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 - constant:28]]; + constant:kButtonHeight]]; [self _updateContent]; [self addTarget:self action:@selector(_buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; @@ -206,7 +216,7 @@ static const CGFloat kPaddingBetweenLogoTitle = 8.0; - (void)_buttonPressed:(id)sender { [self logTapEventWithEventName:FBSDKAppEventNameFBSDKLoginButtonDidTap parameters:self.analyticsParameters]; - if ([FBSDKAccessToken currentAccessTokenIsActive]) { + if (FBSDKAccessToken.isCurrentAccessTokenActive) { NSString *title = nil; if (_userName) { @@ -257,21 +267,16 @@ static const CGFloat kPaddingBetweenLogoTitle = 8.0; } } - FBSDKLoginManagerRequestTokenHandler handler = ^(FBSDKLoginManagerLoginResult *result, NSError *error) { + FBSDKLoginManagerLoginResultBlock handler = ^(FBSDKLoginManagerLoginResult *result, NSError *error) { if ([self.delegate respondsToSelector:@selector(loginButton:didCompleteWithResult:error:)]) { [self.delegate loginButton:self didCompleteWithResult:result error:error]; } }; - if (self.publishPermissions.count > 0) { - [_loginManager logInWithPublishPermissions:self.publishPermissions - fromViewController:[FBSDKInternalUtility viewControllerForView:self] - handler:handler]; - } else { - [_loginManager logInWithReadPermissions:self.readPermissions - fromViewController:[FBSDKInternalUtility viewControllerForView:self] - handler:handler]; - } + [_loginManager logInWithPermissions:self.permissions + fromViewController:[FBSDKInternalUtility viewControllerForView:self] + handler:handler]; + } } @@ -312,7 +317,7 @@ static const CGFloat kPaddingBetweenLogoTitle = 8.0; - (void)_updateContent { - BOOL accessTokenIsValid = [FBSDKAccessToken currentAccessTokenIsActive]; + BOOL accessTokenIsValid = FBSDKAccessToken.isCurrentAccessTokenActive; self.selected = accessTokenIsValid; if (accessTokenIsValid) { if (![[FBSDKAccessToken currentAccessToken].userID isEqualToString:_userID]) { @@ -331,3 +336,5 @@ static const CGFloat kPaddingBetweenLogoTitle = 8.0; } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h index bcbf9d6697..471bfdcab3 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h @@ -18,6 +18,8 @@ #import +NS_ASSUME_NONNULL_BEGIN + #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 /** @@ -25,7 +27,8 @@ Error codes from the SDK in the range 300-399 are reserved for this domain. */ -FOUNDATION_EXPORT NSErrorDomain const FBSDKLoginErrorDomain; +FOUNDATION_EXPORT NSErrorDomain const FBSDKLoginErrorDomain +NS_SWIFT_NAME(LoginErrorDomain); #else @@ -34,7 +37,8 @@ FOUNDATION_EXPORT NSErrorDomain const FBSDKLoginErrorDomain; Error codes from the SDK in the range 300-399 are reserved for this domain. */ -FOUNDATION_EXPORT NSString *const FBSDKLoginErrorDomain; +FOUNDATION_EXPORT NSString *const FBSDKLoginErrorDomain +NS_SWIFT_NAME(LoginErrorDomain); #endif @@ -54,6 +58,7 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginError) Reserved. */ FBSDKLoginErrorReserved = 300, + /** The error code for unknown errors. */ @@ -63,14 +68,17 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginError) 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 */ @@ -82,15 +90,17 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginError) 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 @@ -113,30 +123,6 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKDeviceLoginError) { The code you entered has expired. */ FBSDKDeviceLoginErrorCodeExpired = 1349152 -}; +} NS_SWIFT_NAME(DeviceLoginError); -/** - Deprecated - */ -typedef NS_ENUM(NSInteger, FBSDKLoginErrorCode) -{ - FBSDKLoginReservedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorReserved instead") = FBSDKLoginErrorReserved, - FBSDKLoginUnknownErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUnknown instead"), - FBSDKLoginPasswordChangedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorPasswordChanged instead"), - FBSDKLoginUserCheckpointedErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUserCheckpointed instead"), - FBSDKLoginUserMismatchErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUserMismatch instead"), - FBSDKLoginUnconfirmedUserErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorUnconfirmedUser instead"), - FBSDKLoginSystemAccountAppDisabledErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorSystemAccountAppDisabled instead"), - FBSDKLoginSystemAccountUnavailableErrorCode DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorSystemAccountUnavailable instead"), - FBSDKLoginBadChallengeString DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginErrorBadChallengeString instead"), -} DEPRECATED_MSG_ATTRIBUTE("use FBSDKLoginError instead"); - -/** - Deprecated - */ -typedef NS_ENUM(NSUInteger, FBSDKDeviceLoginErrorSubcode) { - FBSDKDeviceLoginExcessivePollingErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorExcessivePolling instead") = FBSDKDeviceLoginErrorExcessivePolling, - FBSDKDeviceLoginAuthorizationDeclinedErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorAuthorizationDeclined instead") = FBSDKDeviceLoginErrorAuthorizationDeclined, - FBSDKDeviceLoginAuthorizationPendingErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorAuthorizationPending instead") = FBSDKDeviceLoginErrorAuthorizationPending, - FBSDKDeviceLoginCodeExpiredErrorSubcode DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginErrorCodeExpired instead") = FBSDKDeviceLoginErrorCodeExpired -} DEPRECATED_MSG_ATTRIBUTE("use FBSDKDeviceLoginError instead"); +NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h index aafc5779c6..7e7a4bddf6 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h @@ -18,14 +18,14 @@ #import -#import -#import -#import -#import +#import "FBSDKDeviceLoginCodeInfo.h" +#import "FBSDKDeviceLoginManager.h" +#import "FBSDKDeviceLoginManagerResult.h" +#import "FBSDKLoginConstants.h" -#if !TARGET_TV_OS -#import -#import -#import -#import +#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 index 7b579d08c8..1b4b22e4a1 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h @@ -16,18 +16,62 @@ // IN AN ACTION OF 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 + +#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 (^FBSDKLoginManagerRequestTokenHandler)(FBSDKLoginManagerLoginResult *result, NSError *error); +typedef void (^FBSDKLoginManagerLoginResultBlock)(FBSDKLoginManagerLoginResult *_Nullable result, + NSError *_Nullable error) +NS_SWIFT_NAME(LoginManagerLoginResultBlock); /** @@ -50,7 +94,7 @@ typedef NS_ENUM(NSUInteger, FBSDKDefaultAudience) FBSDKDefaultAudienceOnlyMe, /** Indicates that all Facebook users are able to see posts made by the application */ FBSDKDefaultAudienceEveryone, -}; +} NS_SWIFT_NAME(DefaultAudience); /** FBSDKLoginBehavior enum @@ -72,29 +116,12 @@ typedef NS_ENUM(NSUInteger, FBSDKDefaultAudience) typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) { /** - This is the default behavior, and indicates logging in through the native - Facebook app may be used. The SDK may still use Safari instead. + 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). */ - FBSDKLoginBehaviorNative = 0, - /** - Attempts log in through the Safari or SFSafariViewController, if available. - */ - FBSDKLoginBehaviorBrowser, - /** - Attempts log in through the Facebook account currently signed in through - the device Settings. - @note If the account is not available to the app (either not configured by user or - as determined by the SDK) this behavior falls back to \c FBSDKLoginBehaviorNative. - */ - FBSDKLoginBehaviorSystemAccount, - /** - Attempts log in through a modal \c UIWebView pop up - - @note This behavior is only available to certain types of apps. Please check the Facebook - Platform Policy to verify your app meets the restrictions. - */ - FBSDKLoginBehaviorWeb, -}; + 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. @@ -108,12 +135,13 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) 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) NSString *authType; +@property (strong, nonatomic) FBSDKLoginAuthType authType; /** the default audience. @@ -124,53 +152,18 @@ typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) /** the login behavior */ -@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior; +@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior +DEPRECATED_MSG_ATTRIBUTE("All login flows utilize the browser. This will be removed in the next major release"); /** - -@warning use logInWithReadPermissions:fromViewController:handler: instead - */ -- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler -DEPRECATED_MSG_ATTRIBUTE("use logInWithReadPermissions:fromViewController:handler: instead"); - -/** - -@warning use logInWithPublishPermissions:fromViewController:handler: instead - */ -- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler -DEPRECATED_MSG_ATTRIBUTE("use logInWithPublishPermissions:fromViewController:handler: instead"); - -/** - 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)logInWithReadPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler; - -/** - Logs the user in or authorizes additional permissions. + 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 publish permissions. You should only ask for permissions when they + 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. @@ -180,10 +173,10 @@ DEPRECATED_MSG_ATTRIBUTE("use logInWithPublishPermissions:fromViewController:han 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)logInWithPublishPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler; - +- (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. @@ -197,7 +190,8 @@ DEPRECATED_MSG_ATTRIBUTE("use logInWithPublishPermissions:fromViewController:han This method will present UI the user. You typically should call this if `[FBSDKAccessToken isDataAccessExpired]` returns true. */ - (void)reauthorizeDataAccess:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler; + handler:(FBSDKLoginManagerLoginResultBlock)handler +NS_SWIFT_NAME(reauthorizeDataAccess(from:handler:)); /** Logs the user out @@ -206,22 +200,8 @@ DEPRECATED_MSG_ATTRIBUTE("use logInWithPublishPermissions:fromViewController:han */ - (void)logOut; -/** - @method - - Issues an asynchronous renewCredentialsForAccount call to the device's Facebook account store. - - @param handler The completion handler to call when the renewal is completed. This can be invoked on an arbitrary thread. - - - This can be used to explicitly renew account credentials and is provided as a convenience wrapper around - `[ACAccountStore renewCredentialsForAccount:completion]`. Note the method will not issue the renewal call if the the - Facebook account has not been set on the device, or if access had not been granted to the account (though the handler - wil receive an error). - - If the `[FBSDKAccessToken currentAccessToken]` was from the account store, a succesful renewal will also set - a new "currentAccessToken". - */ -+ (void)renewSystemCredentials:(void (^)(ACAccountCredentialRenewResult result, NSError *error))handler; - @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 index 0acccca8a1..34f5076385 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m @@ -16,14 +16,27 @@ // IN AN ACTION OF 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" -#import -#import +#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 "FBSDKCoreKit+Internal.h" #import "FBSDKLoginCompletion.h" #import "FBSDKLoginConstants.h" #import "FBSDKLoginError.h" @@ -36,6 +49,10 @@ 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. @@ -46,7 +63,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { @implementation FBSDKLoginManager { - FBSDKLoginManagerRequestTokenHandler _handler; + FBSDKLoginManagerLoginResultBlock _handler; FBSDKLoginManagerLogger *_logger; FBSDKLoginManagerState _state; FBSDKKeychainStore *_keychainStore; @@ -65,63 +82,26 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { { self = [super init]; if (self) { - self.authType = @"rerequest"; + self.authType = FBSDKLoginAuthTypeRerequest; NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.loginmanager.%@", [NSBundle mainBundle].bundleIdentifier]; _keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil]; } return self; } -- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler -{ - [self logInWithReadPermissions:permissions - fromViewController:nil - handler:handler]; -} -- (void)logInWithReadPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler +- (void)logInWithPermissions:(NSArray *)permissions + fromViewController:(UIViewController *)fromViewController + handler:(FBSDKLoginManagerLoginResultBlock)handler { if (![self validateLoginStartState]) { return; } - [self assertPermissions:permissions]; - NSSet *permissionSet = [NSSet setWithArray:permissions]; - if (![FBSDKInternalUtility areAllPermissionsReadPermissions:permissionSet]) { - [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException - reason:@"Publish or manage permissions are not permitted to be requested with read permissions." - userInfo:nil]]; - } self.fromViewController = fromViewController; + NSSet *permissionSet = [NSSet setWithArray:permissions]; [self logInWithPermissions:permissionSet handler:handler]; } -- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler -{ - [self logInWithPublishPermissions:permissions - fromViewController:nil - handler:handler]; -} - -- (void)logInWithPublishPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerRequestTokenHandler)handler -{ - if (![self validateLoginStartState]) { - return; - } - [self assertPermissions:permissions]; - NSSet *permissionSet = [NSSet setWithArray:permissions]; - if (![FBSDKInternalUtility areAllPermissionsPublishPermissions:permissionSet]) { - [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException - reason:@"Read permissions are not permitted to be requested with publish or manage permissions." - userInfo:nil]]; - } - self.fromViewController = fromViewController; - [self logInWithPermissions:permissionSet handler:handler]; -} - -- (void)reauthorizeDataAccess:(UIViewController *)fromViewController handler:(FBSDKLoginManagerRequestTokenHandler)handler +- (void)reauthorizeDataAccess:(UIViewController *)fromViewController handler:(FBSDKLoginManagerLoginResultBlock)handler { if (![self validateLoginStartState]) { return; @@ -137,19 +117,6 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { [FBSDKProfile setCurrentProfile:nil]; } -+ (void)renewSystemCredentials:(void (^)(ACAccountCredentialRenewResult result, NSError *error))handler -{ - FBSDKSystemAccountStoreAdapter *adapter = [FBSDKSystemAccountStoreAdapter sharedInstance]; - - if (!adapter.accountType) { - handler(ACAccountCredentialRenewResultFailed, [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorSystemAccountUnavailable]); - } else if (!adapter.accountType.accessGranted) { - handler(ACAccountCredentialRenewResultFailed, [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorSystemAccountAppDisabled]); - } else { - [[FBSDKSystemAccountStoreAdapter sharedInstance] renewSystemAuthorization:handler]; - } -} - #pragma mark - Private - (void)raiseLoginException:(NSException *)exception @@ -162,8 +129,8 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { { FBSDKLoginManagerLoginResult *result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil isCancelled:YES - grantedPermissions:nil - declinedPermissions:nil]; + grantedPermissions:NSSet.set + declinedPermissions:NSSet.set]; [result addLoggingExtra:@YES forKey:@"implicit_cancel"]; [self invokeHandler:result error:nil]; } @@ -258,6 +225,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { FBSDKAccessToken *token = [[FBSDKAccessToken alloc] initWithTokenString:tokenString permissions:grantedPermissions.allObjects declinedPermissions:declinedPermissions.allObjects + expiredPermissions:@[] appID:parameters.appID userID:parameters.userID expirationDate:parameters.expirationDate @@ -279,22 +247,14 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { if (cancelled || recentlyGrantedPermissions.count == 0) { NSSet *declinedPermissions = nil; if ([FBSDKAccessToken currentAccessToken] != nil) { - if (parameters.isSystemAccount) { - // If a System Account reauthorization was cancelled by the user tapping Don't Allow - // then add the declined permissions to the login result. The Accounts framework - // doesn't register the decline with Facebook, which is why we don't update the - // access token. - declinedPermissions = parameters.declinedPermissions; - } else { - // Always include the list of declined permissions from this login request - // if an access token is already cached by the SDK - declinedPermissions = recentlyDeclinedPermissions; - } + // 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:nil + grantedPermissions:NSSet.set declinedPermissions:declinedPermissions]; } } @@ -342,7 +302,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { _state = FBSDKLoginManagerStateIdle; if (_handler) { - FBSDKLoginManagerRequestTokenHandler handler = _handler; + FBSDKLoginManagerLoginResultBlock handler = _handler; _handler(result, error); if (handler == _handler) { _handler = nil; @@ -366,7 +326,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { NSMutableDictionary *loginParams = [NSMutableDictionary dictionary]; loginParams[@"client_id"] = [FBSDKSettings appID]; - loginParams[@"response_type"] = @"token,signed_request"; + loginParams[@"response_type"] = @"token_or_nonce,signed_request"; loginParams[@"redirect_uri"] = @"fbconnect://success"; loginParams[@"display"] = @"touch"; loginParams[@"sdk"] = @"ios"; @@ -375,21 +335,24 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { 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; - [FBSDKInternalUtility dictionary:loginParams setObject:[FBSDKSettings appURLSchemeSuffix] forKey:@"local_client_id"]; - [FBSDKInternalUtility dictionary:loginParams setObject:[FBSDKLoginUtility stringForAudience:self.defaultAudience] forKey:@"default_audience"]; - [FBSDKInternalUtility dictionary:loginParams setObject:[permissions.allObjects componentsJoinedByString:@","] forKey:@"scope"]; + [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"] = [FBSDKInternalUtility JSONStringForObject:state error:NULL invalidObjectHandler:nil]; + loginParams[@"state"] = [FBSDKBasicUtility JSONStringForObject:state error:NULL invalidObjectHandler:nil]; [self storeExpectedChallenge:expectedChallenge]; return loginParams; } -- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler +- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerLoginResultBlock)handler { FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; _logger = [[FBSDKLoginManagerLogger alloc] initWithLoggingToken:serverConfiguration.loggingToken]; @@ -399,30 +362,29 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { [_logger startSessionForLoginManager:self]; - [self logInWithBehavior:self.loginBehavior]; + [self logIn]; } -- (void)reauthorizeDataAccess:(FBSDKLoginManagerRequestTokenHandler)handler +- (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 = @"reauthorize"; + self.authType = FBSDKLoginAuthTypeReauthorize; [_logger startSessionForLoginManager:self]; - [self logInWithBehavior:self.loginBehavior]; + [self logIn]; } -- (void)logInWithBehavior:(FBSDKLoginBehavior)loginBehavior +- (void)logIn { FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; NSDictionary *loginParams = [self logInParametersWithPermissions:_requestedPermissions serverConfiguration:serverConfiguration]; self->_usedSFAuthSession = NO; - void(^completion)(BOOL, NSString *, NSError *) = ^void(BOOL didPerformLogIn, NSString *authMethod, NSError *error) { + void(^completion)(BOOL, NSError *) = ^void(BOOL didPerformLogIn, NSError *error) { if (didPerformLogIn) { - [self->_logger startAuthMethod:authMethod]; self->_state = FBSDKLoginManagerStatePerformingLogin; } else if ([error.domain isEqualToString:SFVCCanceledLogin] || [error.domain isEqualToString:ASCanceledLogin]) { @@ -435,52 +397,10 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { } }; - switch (loginBehavior) { - case FBSDKLoginBehaviorNative: { - if ([FBSDKInternalUtility isFacebookAppInstalled]) { - BOOL useNativeDialog = [serverConfiguration useNativeDialogForDialogName:FBSDKDialogConfigurationNameLogin]; - if (useNativeDialog) { - [self performNativeLogInWithParameters:loginParams handler:^(BOOL openedURL, NSError *openedURLError) { - if (openedURLError) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"FBSDKLoginBehaviorNative failed : %@\nTrying FBSDKLoginBehaviorBrowser", openedURLError]; - } - if (openedURL) { - completion(YES, FBSDKLoginManagerLoggerAuthMethod_Native, openedURLError); - } else { - [self logInWithBehavior:FBSDKLoginBehaviorBrowser]; - } - }]; - } else { - [self logInWithBehavior:FBSDKLoginBehaviorBrowser]; - } - break; - } - // Intentional fall through. Switching to browser login instead. - } - case FBSDKLoginBehaviorBrowser: { - [self performBrowserLogInWithParameters:loginParams handler:^(BOOL openedURL, - NSString *authMethod, - NSError *openedURLError) { - completion(openedURL, authMethod, openedURLError); - }]; - break; - } - case FBSDKLoginBehaviorSystemAccount: { - if (serverConfiguration.isSystemAuthenticationEnabled) { - [self beginSystemLogIn]; - } else { - [self logInWithBehavior:FBSDKLoginBehaviorNative]; - } - completion(YES, FBSDKLoginManagerLoggerAuthMethod_System, nil); - break; - } - case FBSDKLoginBehaviorWeb: - [self performWebLogInWithParameters:loginParams handler:^(BOOL openedURL, NSError *openedURLError) { - completion(openedURL, FBSDKLoginManagerLoggerAuthMethod_Webview, openedURLError); - }]; - break; - } + [self performBrowserLogInWithParameters:loginParams handler:^(BOOL openedURL, + NSError *openedURLError) { + completion(openedURL, openedURLError); + }]; } - (void)storeExpectedChallenge:(NSString *)challengeExpected @@ -510,7 +430,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { [self invokeHandler:loginResult error:nil]; } else { NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKInternalUtility dictionary:userInfo setObject:error forKey:NSUnderlyingErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:error forKey:NSUnderlyingErrorKey]; NSError *resultError = [NSError errorWithDomain:FBSDKLoginErrorDomain code:FBSDKLoginErrorUserMismatch userInfo:userInfo]; @@ -521,7 +441,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { #pragma mark - Test Methods -- (void)setHandler:(FBSDKLoginManagerRequestTokenHandler)handler +- (void)setHandler:(FBSDKLoginManagerLoginResultBlock)handler { _handler = [handler copy]; } @@ -531,35 +451,9 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { _requestedPermissions = [requestedPermissions copy]; } -@end - -#pragma mark - - -@implementation FBSDKLoginManager (Native) - -- (void)performNativeLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler -{ - [_logger willAttemptAppSwitchingBehavior]; - loginParams = [_logger parametersWithTimeStampAndClientState:loginParams forAuthMethod:FBSDKLoginManagerLoggerAuthMethod_Native]; - - NSString *scheme = ([FBSDKSettings appURLSchemeSuffix] ? @"fbauth2" : @"fbauth"); - NSMutableDictionary *mutableParams = [NSMutableDictionary dictionaryWithDictionary:loginParams]; - mutableParams[@"legacy_override"] = FBSDK_TARGET_PLATFORM_VERSION; - NSError *error; - NSURL *authURL = [FBSDKInternalUtility URLWithScheme:scheme host:@"authorize" path:@"" queryParameters:mutableParams error:&error]; - - NSDate *start = [NSDate date]; - [[FBSDKBridgeAPI sharedInstance] openURL:authURL sender:self handler:^(BOOL openedURL, NSError *anError) { - [self->_logger logNativeAppDialogResult:openedURL dialogDuration:-start.timeIntervalSinceNow]; - if (handler) { - handler(openedURL, anError); - } - }]; -} - // change bool to auth method string. - (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams - handler:(void(^)(BOOL didOpen, NSString *authMethod, NSError *error))handler + handler:(FBSDKBrowserLoginSuccessBlock)handler { [_logger willAttemptAppSwitchingBehavior]; @@ -571,21 +465,24 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { NSURL *authURL = nil; NSError *error; - NSURL *redirectURL = [FBSDKInternalUtility appURLWithHost:@"authorize" path:nil queryParameters:nil error:&error]; + NSURL *redirectURL = [FBSDKInternalUtility appURLWithHost:@"authorize" path:@"" queryParameters:@{} error:&error]; if (!error) { NSMutableDictionary *browserParams = [loginParams mutableCopy]; - [FBSDKInternalUtility dictionary:browserParams - setObject:redirectURL - forKey:@"redirect_uri"]; + [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, authMethod, anError); + handler(didOpen, anError); } }; @@ -600,13 +497,14 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { [[FBSDKBridgeAPI sharedInstance] openURL:authURL sender:self handler:handlerWrapper]; } } else { - error = error ?: [NSError fbErrorWithCode:FBSDKLoginErrorUnknown message:@"Failed to construct oauth browser url"]; + error = error ?: [FBSDKError errorWithCode:FBSDKLoginErrorUnknown message:@"Failed to construct oauth browser url"]; if (handler) { - handler(NO, nil, error); + 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]; @@ -624,7 +522,7 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { } // any necessary strong reference is maintained by the FBSDKLoginURLCompleter handler - [completer completeLogIn:self withHandler:^(FBSDKLoginCompletionParameters *parameters) { + [completer completeLoginWithHandler:^(FBSDKLoginCompletionParameters *parameters) { [self completeAuthentication:parameters expectChallenge:YES]; }]; } @@ -638,12 +536,8 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { annotation:(id)annotation { // verify the URL is intended as a callback for the SDK's log in - BOOL isFacebookURL = [url.scheme hasPrefix:[NSString stringWithFormat:@"fb%@", [FBSDKSettings appID]]] && + return [url.scheme hasPrefix:[NSString stringWithFormat:@"fb%@", [FBSDKSettings appID]]] && [url.host isEqualToString:@"authorize"]; - - BOOL isExpectedSourceApplication = [sourceApplication hasPrefix:@"com.facebook"] || [sourceApplication hasPrefix:@"com.apple"] || [sourceApplication hasPrefix:@"com.burbn"]; - - return isFacebookURL && isExpectedSourceApplication; } - (void)applicationDidBecomeActive:(UIApplication *)application @@ -660,226 +554,4 @@ typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { @end -@implementation FBSDKLoginManager (Accounts) - -- (void)beginSystemLogIn -{ - // First, we need to validate the current access token. The user may have uninstalled the - // app, changed their password, etc., or the access token may have expired, which - // requires us to renew the account before asking for additional permissions. - NSString *accessTokenString = [FBSDKSystemAccountStoreAdapter sharedInstance].accessTokenString; - if (accessTokenString.length > 0) { - FBSDKGraphRequest *meRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" - parameters:@{ @"fields" : @"id" } - tokenString:accessTokenString - HTTPMethod:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - [meRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (!error) { - // If there was no error, make an explicit renewal call anyway to cover cases where user has revoked some read permission like email. - // Otherwise, iOS system account may continue to think email was granted and never prompt UI again. - [[FBSDKSystemAccountStoreAdapter sharedInstance] renewSystemAuthorization:^(ACAccountCredentialRenewResult renewResult, NSError *renewError) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self performSystemLogIn]; - }); - }]; - } else { - // If there was an error, FBSDKGraphRequestConnection would have already done work already (like renewal calls) - [self performSystemLogIn]; - } - }]; - } else { - [self performSystemLogIn]; - } -} - -- (void)performSystemLogIn -{ - if (![FBSDKSystemAccountStoreAdapter sharedInstance].accountType) { - // There is no Facebook system account type. Fallback to Native behavior - [self fallbackToNativeBehavior]; - return; - } - BOOL isReauthorize = [FBSDKAccessToken currentAccessToken] != nil; - - // app may be asking for nothing, but we will always have a set here - NSMutableSet *permissionsToUse = _requestedPermissions ? [_requestedPermissions mutableCopy] : [NSMutableSet set]; - // Only add basic info if this is not reauthorize case, if it is the app should already have basic info ToSed - if (!isReauthorize) { - // Ensure that basic info is among the permissions requested so that the app will install if necessary. - // "email" is used as a proxy for basic_info permission. - [permissionsToUse addObject:@"email"]; - } - - [permissionsToUse removeObject:@"public_profile"]; - [permissionsToUse removeObject:@"user_friends"]; - - NSString *audience; - switch (self.defaultAudience) { - case FBSDKDefaultAudienceOnlyMe: - audience = fbsdkdfl_ACFacebookAudienceOnlyMe(); - break; - case FBSDKDefaultAudienceFriends: - audience = fbsdkdfl_ACFacebookAudienceFriends(); - break; - case FBSDKDefaultAudienceEveryone: - audience = fbsdkdfl_ACFacebookAudienceEveryone(); - break; - default: - audience = nil; - } - - uint64_t timePriorToSystemAuthUI = [FBSDKInternalUtility currentTimeInMilliseconds]; - - // the FBSDKSystemAccountStoreAdapter completion handler maintains the strong reference during the the asynchronous operation - [[FBSDKSystemAccountStoreAdapter sharedInstance] - requestAccessToFacebookAccountStore:permissionsToUse - defaultAudience:audience - isReauthorize:isReauthorize - appID:[FBSDKSettings appID] - handler:^(NSString *oauthToken, NSError *accountStoreError) { - - // There doesn't appear to be a reliable way to determine whether UI was shown or - // whether the cached token was sufficient. So we use a timer heuristic assuming that - // human response time couldn't complete a dialog in under the interval given here, but - // the process will return here fast enough if the token is cached. The threshold was - // chosen empirically, so there may be some edge cases that are false negatives or - // false positives. - BOOL didShowDialog = [FBSDKInternalUtility currentTimeInMilliseconds] - timePriorToSystemAuthUI > 350; - BOOL isUnTOSedDevice = !oauthToken && accountStoreError.code == ACErrorAccountNotFound; - [self->_logger systemAuthDidShowDialog:didShowDialog isUnTOSedDevice:isUnTOSedDevice]; - - if (accountStoreError && [FBSDKSystemAccountStoreAdapter sharedInstance].forceBlockingRenew) { - accountStoreError = [NSError fbErrorForSystemPasswordChange:accountStoreError]; - } - if (!oauthToken && !accountStoreError) { - // This means iOS did not give an error nor granted, even after a renew. In order to - // surface this to users, stuff in our own error that can be inspected. - accountStoreError = [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorSystemAccountAppDisabled]; - } - - FBSDKLoginManagerSystemAccountState *state = [[FBSDKLoginManagerSystemAccountState alloc] init]; - state.didShowDialog = didShowDialog; - state.reauthorize = isReauthorize; - state.unTOSedDevice = isUnTOSedDevice; - - [self continueSystemLogInWithTokenString:oauthToken error:accountStoreError state:state]; - }]; -} - -- (void)continueSystemLogInWithTokenString:(NSString *)oauthToken error:(NSError *)accountStoreError state:(FBSDKLoginManagerSystemAccountState *)state -{ - id completer = nil; - - if (!oauthToken && accountStoreError.code == ACErrorAccountNotFound) { - // Even with the Accounts framework we use the Facebook app or Safari to log in if - // the user has not signed in. This condition can only be detected by attempting to - // log in because the framework does not otherwise indicate whether a Facebook account - // exists on the device unless the user has granted the app permissions. - - // Do this asynchronously so the logger correctly notes the system account was skipped - dispatch_async(dispatch_get_main_queue(), ^{ - [self fallbackToNativeBehavior]; - }); - } else if (oauthToken) { - completer = [[FBSDKLoginSystemAccountCompleter alloc] initWithTokenString:oauthToken appID:[FBSDKSettings appID]]; - } else { - completer = [[FBSDKLoginSystemAccountErrorCompleter alloc] initWithError:accountStoreError permissions:_requestedPermissions]; - } - - // any necessary strong reference is maintained by the FBSDKLoginSystemAccount[Error]Completer handler - [completer completeLogIn:self withHandler:^(FBSDKLoginCompletionParameters *parameters) { - NSString *eventName = [NSString stringWithFormat:@"%@ %@", - (state.isReauthorize ? @"Reauthorization" : @"Authorization"), - (parameters.error ? @"Error" : (parameters.accessTokenString ? @"succeeded" : @"cancelled")) - ]; - - [self completeAuthentication:parameters expectChallenge:NO]; - - if (eventName != nil) { - NSString *sortedPermissions = (parameters.permissions.count == 0) - ? @"" - : [[parameters.permissions.allObjects sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] componentsJoinedByString:@","]; - - [FBSDKAppEvents logImplicitEvent:FBSDKAppEventNamePermissionsUILaunch - valueToSum:nil - parameters:@{ @"ui_dialog_type" : @"iOS integrated auth", - @"permissions_requested" : sortedPermissions } - accessToken:nil]; - - [FBSDKAppEvents logImplicitEvent:FBSDKAppEventNamePermissionsUIDismiss - valueToSum:nil - parameters:@{ @"ui_dialog_type" : @"iOS integrated auth", - FBSDKAppEventParameterDialogOutcome : eventName, - @"permissions_requested" : sortedPermissions } - accessToken:nil]; - } - }]; -} - -- (void)fallbackToNativeBehavior -{ - FBSDKLoginManagerLoginResult *skippedResult = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil - isCancelled:NO - grantedPermissions:nil - declinedPermissions:nil]; - skippedResult.isSkipped = YES; - [_logger endLoginWithResult:skippedResult error:nil]; - // any necessary strong reference will be maintained by the mechanism that is used - [self logInWithBehavior:FBSDKLoginBehaviorNative]; -} - -@end - -@implementation FBSDKLoginManager (WebDialog) - -- (void)performWebLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler -{ - [FBSDKInternalUtility registerTransientObject:self]; - [FBSDKInternalUtility deleteFacebookCookies]; - NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithDictionary:loginParams]; - parameters[@"title"] = NSLocalizedStringWithDefaultValue(@"LoginWeb.LogInTitle", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"Log In", - @"Title of the web dialog that prompts the user to log in to Facebook."); - [FBSDKWebDialog showWithName:@"oauth" parameters:parameters delegate:self]; - - if (handler) { - handler(YES, nil); - } -} - -- (void)webDialog:(FBSDKWebDialog *)webDialog didCompleteWithResults:(NSDictionary *)results -{ - NSString *token = results[@"access_token"]; - - if (token.length == 0) { - [self webDialogDidCancel:webDialog]; - } else { - id completer = [[FBSDKLoginURLCompleter alloc] initWithURLParameters:results appID:[FBSDKSettings appID]]; - [completer completeLogIn:self withHandler:^(FBSDKLoginCompletionParameters *parameters) { - [self completeAuthentication:parameters expectChallenge:YES]; - }]; - [FBSDKInternalUtility unregisterTransientObject:self]; - } -} - -- (void)webDialog:(FBSDKWebDialog *)webDialog didFailWithError:(NSError *)error -{ - FBSDKLoginCompletionParameters *parameters = [[FBSDKLoginCompletionParameters alloc] initWithError:error]; - [self completeAuthentication:parameters expectChallenge:YES]; - [FBSDKInternalUtility unregisterTransientObject:self]; -} - -- (void)webDialogDidCancel:(FBSDKWebDialog *)webDialog -{ - FBSDKLoginCompletionParameters *parameters = [[FBSDKLoginCompletionParameters alloc] init]; - [self completeAuthentication:parameters expectChallenge:YES]; - [FBSDKInternalUtility unregisterTransientObject:self]; -} - -@end - -@implementation FBSDKLoginManagerSystemAccountState -@end +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h index 6601011d91..2aa0913705 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h @@ -18,11 +18,37 @@ #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; @@ -31,7 +57,7 @@ /** the access token. */ -@property (copy, nonatomic) FBSDKAccessToken *token; +@property (copy, nonatomic, nullable) FBSDKAccessToken *token; /** whether the login was cancelled by the user. @@ -43,14 +69,14 @@ inspect the token's permissions set for a complete list. */ -@property (copy, nonatomic) NSSet *grantedPermissions; +@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; +@property (copy, nonatomic) NSSet *declinedPermissions; /** Initializes a new instance. @@ -59,9 +85,13 @@ @param grantedPermissions the set of granted permissions @param declinedPermissions the set of declined permissions */ -- (instancetype)initWithToken:(FBSDKAccessToken *)token +- (instancetype)initWithToken:(nullable FBSDKAccessToken *)token isCancelled:(BOOL)isCancelled - grantedPermissions:(NSSet *)grantedPermissions - declinedPermissions:(NSSet *)declinedPermissions + 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 index ce3969bd2f..c21a300f93 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m @@ -16,9 +16,17 @@ // IN AN ACTION OF 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; @@ -30,7 +38,7 @@ declinedPermissions:(NSSet *)declinedPermissions { if ((self = [super init])) { _mutableLoggingExtras = [NSMutableDictionary dictionary]; - _token = [token copy]; + _token = token ? [token copy] : nil; _isCancelled = isCancelled; _grantedPermissions = [grantedPermissions copy]; _declinedPermissions = [declinedPermissions copy]; @@ -40,7 +48,7 @@ - (void)addLoggingExtra:(id)object forKey:(id)key { - [FBSDKInternalUtility dictionary:_mutableLoggingExtras setObject:object forKey:key]; + [FBSDKBasicUtility dictionary:_mutableLoggingExtras setObject:object forKey:key]; } - (NSDictionary *)loggingExtras @@ -49,3 +57,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h index 179219710d..1e03eeaef0 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h @@ -16,9 +16,15 @@ // IN AN ACTION OF 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 +#import "FBSDKTooltipView.h" + +NS_ASSUME_NONNULL_BEGIN @protocol FBSDKLoginTooltipViewDelegate; @@ -37,6 +43,7 @@ (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 */ @@ -44,7 +51,7 @@ /** if set to YES, the view will always be displayed and the delegate's `loginTooltipView:shouldAppear:` will NOT be called. */ -@property (nonatomic, assign) BOOL forceDisplay; +@property (nonatomic, assign, getter=shouldForceDisplay) BOOL forceDisplay; @end @@ -54,6 +61,7 @@ The `FBSDKLoginTooltipViewDelegate` protocol defines the methods used to receive event notifications from `FBSDKLoginTooltipView` objects. */ +NS_SWIFT_NAME(LoginTooltipViewDelegate) @protocol FBSDKLoginTooltipViewDelegate @optional @@ -88,3 +96,7 @@ @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 index e1a17d4868..7ebe1cb63a 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m @@ -16,9 +16,17 @@ // IN AN ACTION OF 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 @@ -60,3 +68,5 @@ } } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h index d77392cfd1..eee01c7bd1 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h @@ -16,8 +16,14 @@ // IN AN ACTION OF 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 @@ -29,7 +35,7 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipViewArrowDirection) FBSDKTooltipViewArrowDirectionDown = 0, /** View is located below given point, arrow is pointing up. */ FBSDKTooltipViewArrowDirectionUp = 1, -}; +} NS_SWIFT_NAME(FBTooltipView.ArrowDirection); /** FBSDKTooltipColorStyle enum @@ -42,7 +48,7 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) FBSDKTooltipColorStyleFriendlyBlue = 0, /** Dark gray background, white text, light gray close button. */ FBSDKTooltipColorStyleNeutralGray = 1, -}; +} NS_SWIFT_NAME(FBTooltipView.ColorStyle); /** @@ -53,6 +59,7 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) The tooltip fades in and will automatically fade out. See `displayDuration`. */ +NS_SWIFT_NAME(FBTooltipView) @interface FBSDKTooltipView : UIView /** @@ -71,12 +78,12 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) /** Gets or sets the message. */ -@property (nonatomic, copy) NSString *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) NSString *tagline; +@property (nonatomic, copy, nullable) NSString *tagline; /** Designated initializer. @@ -94,7 +101,9 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) @see FBSDKLoginTooltipView */ -- (instancetype)initWithTagline:(NSString *)tagline message:(NSString *)message colorStyle:(FBSDKTooltipColorStyle)colorStyle; +- (instancetype)initWithTagline:(nullable NSString *)tagline + message:(nullable NSString *)message + colorStyle:(FBSDKTooltipColorStyle)colorStyle; /** Show tooltip at the top or at the bottom of given view. @@ -122,7 +131,10 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) @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; +- (void)presentInView:(UIView *)view + withArrowPosition:(CGPoint)arrowPosition + direction:(FBSDKTooltipViewArrowDirection)arrowDirection +NS_SWIFT_NAME(present(in:arrowPosition:direction:)); /** Remove tooltip manually. @@ -134,3 +146,7 @@ typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) - (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 index 22f8f89917..5f6bff1b70 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m @@ -16,11 +16,19 @@ // IN AN ACTION OF 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; @@ -601,3 +609,5 @@ static CGMutablePathRef _createCloseCrossGlyphWithRect(CGRect rect) } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h index cc9e4ae591..a3b683c191 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h @@ -18,7 +18,11 @@ #import +#if defined BUCK || defined FBSDKCOCOAPODS #import +#else +@import FBSDKCoreKit; +#endif #import "FBSDKDeviceLoginManagerResult.h" diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h index 6ddfa0db06..901c53b371 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h @@ -16,24 +16,31 @@ // IN AN ACTION OF 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, assign, getter=isSystemAccount) BOOL systemAccount; @property (nonatomic, copy) NSDate *expirationDate; @property (nonatomic, copy) NSDate *dataAccessExpirationDate; @property (nonatomic, copy) NSString *challenge; @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h index 30e0015097..e3376eaaa7 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h @@ -16,44 +16,58 @@ // IN AN ACTION OF 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, readonly, getter=isSystemAccount) BOOL systemAccount; @property (nonatomic, copy, readonly) NSDate *expirationDate; @property (nonatomic, copy, readonly) NSDate *dataAccessExpirationDate; @property (nonatomic, copy, readonly) NSString *challenge; @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)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler; +- (void)completeLoginWithHandler:(FBSDKLoginCompletionParametersBlock)handler; @end @@ -68,6 +82,7 @@ Completion occurs synchronously. */ +NS_SWIFT_NAME(LoginURLCompleter) @interface FBSDKLoginURLCompleter : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -76,29 +91,4 @@ @end -/** - Requests the User ID, granted permissions and declined permissions from the server - using the given access token, which must occur before authentication can be completed. - - Completion occurs asynchronously. - */ -@interface FBSDKLoginSystemAccountCompleter : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithTokenString:(NSString *)tokenString appID:(NSString *)appID NS_DESIGNATED_INITIALIZER; - -@end - -/** - Converts an Accounts framework error in to an error or cancellation result - - Completion occurs synchronously. - */ -@interface FBSDKLoginSystemAccountErrorCompleter : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithError:(NSError *)accountStoreError permissions:(NSSet *)permissions 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 index 4ac8e1949e..34708bb241 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m @@ -16,9 +16,18 @@ // IN AN ACTION OF 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" -#import "FBSDKCoreKit+Internal.h" +#if SWIFT_PACKAGE +@import FBSDKCoreKit; +#else +#import +#endif + #import "FBSDKLoginConstants.h" #import "FBSDKLoginError.h" #import "FBSDKLoginManager+Internal.h" @@ -65,13 +74,16 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa NSError *error) { NSMutableSet *grantedPermissions = [NSMutableSet set]; NSMutableSet *declinedPermissions = [NSMutableSet set]; + NSMutableSet *expiredPermissions = [NSMutableSet set]; [FBSDKInternalUtility extractPermissionsFromResponse:result grantedPermissions:grantedPermissions - declinedPermissions:declinedPermissions]; + declinedPermissions:declinedPermissions + expiredPermissions:expiredPermissions]; parameters.permissions = [grantedPermissions copy]; parameters.declinedPermissions = [declinedPermissions copy]; + parameters.expiredPermissions = [expiredPermissions copy]; if (error) { parameters.error = error; } @@ -114,8 +126,9 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa _parameters = [[FBSDKLoginCompletionParameters alloc] init]; _parameters.accessTokenString = parameters[@"access_token"]; + _parameters.nonceString = parameters[@"nonce"]; - if (_parameters.accessTokenString.length > 0) { + if (_parameters.accessTokenString.length > 0 || _parameters.nonceString.length > 0) { [self setParametersWithDictionary:parameters appID:appID]; } else { _parameters.accessTokenString = nil; @@ -125,27 +138,12 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa return self; } -- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler +- (void)completeLoginWithHandler:(FBSDKLoginCompletionParametersBlock)handler { - if (_performExplicitFallback && loginManager.loginBehavior == FBSDKLoginBehaviorNative) { - // UIKit and iOS don't like an application opening a URL during a URL open callback, so - // we need to wait until *at least* the next turn of the run loop to open the URL to - // perform the browser log in behavior. However we also need to wait for the application - // to become active so FBSDKApplicationDelegate doesn't erroneously call back the URL - // opener before the URL has been opened. - if ([FBSDKBridgeAPI sharedInstance].isActive) { - // The application is active so there's no need to wait. - [loginManager logInWithBehavior:FBSDKLoginBehaviorBrowser]; - } else { - // use the block version to guarantee there's a strong reference to self - _observer = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^ (NSNotification *notification) { - [self attemptBrowserLogIn:loginManager]; - }]; - } + if (_parameters.nonceString) { + [self _exchangeNonceForTokenWithHandler:handler]; return; - } - - if (_parameters.accessTokenString && !_parameters.userID) { + } else if (_parameters.accessTokenString && !_parameters.userID) { void(^handlerCopy)(FBSDKLoginCompletionParameters *) = [handler copy]; FBSDKLoginRequestMeAndPermissions(_parameters, ^{ handlerCopy(self->_parameters); @@ -172,6 +170,8 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa ? [NSSet setWithArray:[declinedPermissionsString componentsSeparatedByString:@","]] : [NSSet set]; + _parameters.expiredPermissions = [NSSet set]; + _parameters.appID = appID; if (userID.length == 0 && signedRequest.length > 0) { @@ -196,7 +196,7 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa _parameters.dataAccessExpirationDate = dataAccessExpirationDate; NSError *error = nil; - NSDictionary *state = [FBSDKInternalUtility objectForJSONString:parameters[@"state"] error:&error]; + NSDictionary *state = [FBSDKBasicUtility objectForJSONString:parameters[@"state"] error:&error]; _parameters.challenge = [FBSDKUtility URLDecode:state[@"challenge"]]; } @@ -221,7 +221,7 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa } if ([FBSDKBridgeAPI sharedInstance].isActive) { - [loginManager logInWithBehavior:FBSDKLoginBehaviorBrowser]; + [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. @@ -231,87 +231,58 @@ static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *pa } } -@end - -@implementation FBSDKLoginSystemAccountCompleter +- (void)_exchangeNonceForTokenWithHandler:(FBSDKLoginCompletionParametersBlock)handler { - FBSDKLoginCompletionParameters *_parameters; -} - -- (instancetype)initWithTokenString:(NSString *)tokenString appID:(NSString *)appID -{ - if ((self = [super init]) != nil) { - _parameters = [[FBSDKLoginCompletionParameters alloc] init]; - - _parameters.accessTokenString = tokenString; - _parameters.appID = appID; - - _parameters.systemAccount = YES; + if (!handler) { + return; } - return self; -} -- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler -{ - void(^handlerCopy)(FBSDKLoginCompletionParameters *) = [handler copy]; - FBSDKLoginRequestMeAndPermissions(_parameters, ^{ - // Transform the FBSDKCoreKit error in to an FBSDKLoginKit error, if necessary. This specializes - // the graph errors in to User Checkpointed, Password Changed or Unconfirmed User. - // - // It's possible the graph error has a value set for NSRecoveryAttempterErrorKey but we don't - // have any login-specific attempter to provide since system auth succeeded and the error is a - // graph API error. - NSError *serverError = self->_parameters.error; - NSError *error = [NSError fbErrorFromServerError:serverError]; - if (error != nil) { - // In the event the user's password changed the Accounts framework will still return - // an access token but API calls will fail. Clear the access token from the result - // and use the special-case System Password changed error, which has different text - // to display to the user. - if (error.code == FBSDKLoginErrorPasswordChanged) { - [FBSDKSystemAccountStoreAdapter sharedInstance].forceBlockingRenew = YES; + NSString *nonce = _parameters.nonceString ?: @""; + NSString *appID = [FBSDKSettings appID] ?: @""; - self->_parameters.accessTokenString = nil; - self->_parameters.appID = nil; + if (nonce.length == 0 || appID.length == 0) { + _parameters.error = [FBSDKError errorWithCode:FBSDKErrorInvalidArgument message:@"Missing required parameters to exchange nonce for access token."]; - error = [NSError fbErrorForSystemPasswordChange:serverError]; + 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; - self->_parameters.error = error; - } - - handlerCopy(self->_parameters); - }); -} - -@end - -@implementation FBSDKLoginSystemAccountErrorCompleter -{ - FBSDKLoginCompletionParameters *_parameters; -} - -- (instancetype)initWithError:(NSError *)accountStoreError permissions:(NSSet *)permissions -{ - if ((self = [super init]) != nil) { - _parameters = [[FBSDKLoginCompletionParameters alloc] init]; - - NSError *error = [NSError fbErrorForSystemAccountStoreError:accountStoreError]; - if (error != nil) { - _parameters.error = error; + 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 { - // The lack of an error indicates the user declined permissions - _parameters.declinedPermissions = permissions; + parameters.error = error; } - _parameters.systemAccount = YES; - } - return self; -} + handler(parameters); + }]; -- (void)completeLogIn:(FBSDKLoginManager *)loginManager withHandler:(void(^)(FBSDKLoginCompletionParameters *parameters))handler -{ - 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 index 922cf68e8d..af51ee7f9e 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h @@ -16,16 +16,19 @@ // IN AN ACTION OF 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 +#import "FBSDKLoginConstants.h" NS_ASSUME_NONNULL_BEGIN @interface NSError (FBSDKLoginError) + (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code; -+ (NSError *)fbErrorForSystemAccountStoreError:(NSError *)accountStoreError; + (NSError *)fbErrorForSystemPasswordChange:(NSError *)innerError; + (nullable NSError *)fbErrorFromReturnURLParameters:(NSDictionary *)parameters; @@ -34,3 +37,5 @@ NS_ASSUME_NONNULL_BEGIN @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 index 91e23f355a..e0bc88b1e8 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m @@ -16,9 +16,17 @@ // IN AN ACTION OF 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) \ @@ -45,7 +53,7 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) { NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKInternalUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; NSString *errorDomain = FBSDKLoginErrorDomain; NSString *localizedDescription = nil; @@ -86,45 +94,14 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) break; } - [FBSDKInternalUtility dictionary:userInfo setObject:localizedDescription forKey:NSLocalizedDescriptionKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:localizedDescription forKey:FBSDKErrorLocalizedDescriptionKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:localizedDescription forKey:NSLocalizedDescriptionKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:localizedDescription forKey:FBSDKErrorLocalizedDescriptionKey]; return [NSError errorWithDomain:errorDomain code:code userInfo:userInfo]; } -+ (NSError *)fbErrorForSystemAccountStoreError:(NSError *)accountStoreError -{ - NSError *err = nil; - BOOL cancellation = NO; - - if ([accountStoreError.domain isEqualToString:FBSDKLoginErrorDomain] || - [accountStoreError.domain isEqualToString:FBSDKErrorDomain]) { - // If the requestAccess call results in a Facebook error, surface it as a top-level - // error. This implies it is not the typical user "disallows" case. - err = accountStoreError; - } else if ([accountStoreError.domain isEqualToString:@"com.apple.accounts"] && accountStoreError.code == 7) { - err = [self fbErrorWithSystemAccountStoreDeniedError:accountStoreError isCancellation:&cancellation]; - } - - if (err == nil && !cancellation) { - // create an error object with additional info regarding failed login - NSInteger errorCode = FBSDKLoginErrorSystemAccountUnavailable; - - NSString *errorDomain = accountStoreError.domain; - if ([errorDomain isEqualToString:NSURLErrorDomain] || - [errorDomain isEqualToString:@"kCFErrorDomainCFNetwork"]) { - errorCode = FBSDKErrorNetwork; - } - - err = [self fbErrorForFailedLoginWithCode:errorCode - innerError:accountStoreError]; - } - - return err; -} - + (NSError *)fbErrorForSystemPasswordChange:(NSError *)innerError { NSString *failureReasonAndDescription = @@ -136,7 +113,7 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) failureReasonAndDescription, NSLocalizedDescriptionKey, nil]; - [FBSDKInternalUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; return [NSError errorWithDomain:FBSDKLoginErrorDomain code:FBSDKLoginErrorPasswordChanged @@ -148,14 +125,14 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) NSError *error = nil; NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; - [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error_message"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error_message"] forKey:FBSDKErrorDeveloperMessageKey]; if (userInfo.count > 0) { - [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error_code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error_code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; if (!userInfo[FBSDKErrorDeveloperMessageKey]) { - [FBSDKInternalUtility dictionary:userInfo setObject:parameters[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; + [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; } userInfo[FBSDKGraphRequestErrorKey] = @(FBSDKGraphRequestErrorOther); @@ -246,3 +223,5 @@ typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) } @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 index 74b65971eb..a94b7cdc82 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h @@ -16,7 +16,7 @@ // IN AN ACTION OF 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 "../FBSDKLoginKit.h" #import "FBSDKLoginCompletion+Internal.h" #import "FBSDKLoginError.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 index 77ddb6d7bd..cc05176e03 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h @@ -16,30 +16,41 @@ // IN AN ACTION OF 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 - +#ifdef FBSDKCOCOAPODS +#import +#else #import "FBSDKCoreKit+Internal.h" +#endif + +#import "FBSDKLoginManager.h" @class FBSDKAccessToken; @class FBSDKLoginCompletionParameters; -@interface FBSDKLoginManagerSystemAccountState : NSObject -@property (nonatomic, assign) BOOL didShowDialog; -@property (nonatomic, getter=isReauthorize) BOOL reauthorize; -@property (nonatomic, getter=isUnTOSedDevice) BOOL unTOSedDevice; -@end +/** + Success Block + */ +typedef void (^FBSDKBrowserLoginSuccessBlock)(BOOL didOpen, NSError *error) +NS_SWIFT_NAME(BrowserLoginSuccessBlock); -@interface FBSDKLoginManager () +@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:(FBSDKLoginManagerRequestTokenHandler)handler; -- (void)logInWithBehavior:(FBSDKLoginBehavior)loginBehavior; +- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerLoginResultBlock)handler; +- (void)logIn; // made available for testing only - (NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions serverConfiguration:(FBSDKServerConfiguration *)serverConfiguration; @@ -47,35 +58,12 @@ - (void)validateReauthentication:(FBSDKAccessToken *)currentToken withResult:(FBSDKLoginManagerLoginResult *)loginResult; // for testing only -- (void)setHandler:(FBSDKLoginManagerRequestTokenHandler)handler; +- (void)setHandler:(FBSDKLoginManagerLoginResultBlock)handler; // for testing only - (void)setRequestedPermissions:(NSSet *)requestedPermissions; // for testing only -- (NSString *)loadExpectedChallenge; -@end - -// the category is made available for testing only -@interface FBSDKLoginManager (Native) - -- (void)performNativeLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))handler; -- (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSString *,NSError*))handler; +- (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams handler:(FBSDKBrowserLoginSuccessBlock)handler; @end -// the category is made available for testing only -@interface FBSDKLoginManager (Accounts) - -- (void)beginSystemLogIn; -- (void)performSystemLogIn; -- (void)continueSystemLogInWithTokenString:(NSString *)oauthToken error:(NSError *)accountStoreError state:(FBSDKLoginManagerSystemAccountState *)state; - -- (void)fallbackToNativeBehavior; - -@end - -// the category is made available for testing only -@interface FBSDKLoginManager (WebDialog) - -- (void)performWebLogInWithParameters:(NSDictionary *)loginParams handler:(void(^)(BOOL, NSError*))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 index 640d47b109..5c2ea0947e 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h @@ -16,22 +16,25 @@ // IN AN ACTION OF 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_System; -FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_Webview; 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)new NS_UNAVAILABLE; -- (instancetype)initWithLoggingToken:(NSString *)loggingToken; +- (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; @@ -42,7 +45,8 @@ FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_SFVC; - (NSDictionary *)parametersWithTimeStampAndClientState:(NSDictionary *)loginParams forAuthMethod:(NSString *)authMethod; - (void)willAttemptAppSwitchingBehavior; -- (void)systemAuthDidShowDialog:(BOOL)didShowDialog isUnTOSedDevice:(BOOL)isUnTOSedDevice; - (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 index a47015c828..d90a794d7e 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m @@ -16,17 +16,23 @@ // IN AN ACTION OF 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_System = @"integrated_auth"; -NSString *const FBSDKLoginManagerLoggerAuthMethod_Webview = @"fallback_auth"; NSString *const FBSDKLoginManagerLoggerAuthMethod_SFVC = @"sfvc_auth"; static NSString *const FBSDKLoginManagerLoggingClientStateKey = @"state"; @@ -50,8 +56,6 @@ static NSString *const FBSDKLoginManagerLoggerResultSkippedString = @"skipped"; static NSString *const FBSDKLoginManagerLoggerTryNative = @"tryFBAppAuth"; static NSString *const FBSDKLoginManagerLoggerTryBrowser = @"trySafariAuth"; -static NSString *const FBSDKLoginManagerLoggerTrySystemAccount = @"tryIntegratedAuth"; -static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; @implementation FBSDKLoginManagerLogger { @@ -68,7 +72,7 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; + (FBSDKLoginManagerLogger *)loggerFromParameters:(NSDictionary *)parameters { - NSDictionary *clientState = [FBSDKInternalUtility objectForJSONString:parameters[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; + NSDictionary *clientState = [FBSDKBasicUtility objectForJSONString:parameters[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; id isClientState = clientState[FBSDKLoginManagerLoggingClientStateIsClientState]; if ([isClientState isKindOfClass:[NSNumber class]] && [isClientState boolValue]) { @@ -97,38 +101,12 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; { BOOL isReauthorize = ([FBSDKAccessToken currentAccessToken] != nil); BOOL willTryNative = NO; - BOOL willTryBrowser = NO; - BOOL willTrySystemAccount = NO; - BOOL willTryWebView = NO; - NSString *behaviorString = nil; - - switch (loginManager.loginBehavior) { - case FBSDKLoginBehaviorNative: - willTryNative = YES; - willTryBrowser = YES; - behaviorString = @"FBSDKLoginBehaviorNative"; - break; - case FBSDKLoginBehaviorBrowser: - willTryBrowser = YES; - behaviorString = @"FBSDKLoginBehaviorBrowser"; - break; - case FBSDKLoginBehaviorSystemAccount: - willTryNative = YES; - willTryBrowser = YES; - willTrySystemAccount = YES; - behaviorString = @"FBSDKLoginBehaviorSystemAccount"; - break; - case FBSDKLoginBehaviorWeb: - willTryWebView = YES; - behaviorString = @"FBSDKLoginBehaviorWeb"; - break; - } + BOOL willTryBrowser = YES; + NSString *behaviorString = @"FBSDKLoginBehaviorBrowser"; [_extras addEntriesFromDictionary:@{ FBSDKLoginManagerLoggerTryNative : @(willTryNative), FBSDKLoginManagerLoggerTryBrowser : @(willTryBrowser), - FBSDKLoginManagerLoggerTrySystemAccount : @(willTrySystemAccount), - FBSDKLoginManagerLoggerTryWebView : @(willTryWebView), @"isReauthorize" : @(isReauthorize), @"login_behavior" : behaviorString, @"default_audience" : [FBSDKLoginUtility stringForAudience:loginManager.defaultAudience], @@ -178,12 +156,12 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; NSMutableDictionary *params = [loginParams mutableCopy]; NSTimeInterval timeValue = (NSTimeInterval)FBSDKMonotonicTimeGetCurrentSeconds(); - NSString *e2eTimestampString = [FBSDKInternalUtility JSONStringForObject:@{ @"init" : @(timeValue) } + NSString *e2eTimestampString = [FBSDKBasicUtility JSONStringForObject:@{ @"init" : @(timeValue) } error:NULL invalidObjectHandler:NULL]; params[@"e2e"] = e2eTimestampString; - NSDictionary *existingState = [FBSDKInternalUtility objectForJSONString:params[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; + NSDictionary *existingState = [FBSDKBasicUtility objectForJSONString:params[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; params[FBSDKLoginManagerLoggingClientStateKey] = [self clientStateForAuthMethod:authMethod andExistingState:existingState]; return params; @@ -204,14 +182,6 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; }]; } -- (void)systemAuthDidShowDialog:(BOOL)didShowDialog isUnTOSedDevice:(BOOL)isUnTOSedDevice -{ - [_extras addEntriesFromDictionary:@{ - @"isUntosedDevice" : @(isUnTOSedDevice), - @"dialogShown" : @(didShowDialog), - }]; -} - - (void)logNativeAppDialogResult:(BOOL)result dialogDuration:(NSTimeInterval)dialogDuration { NSOperatingSystemVersion iOS10Version = { .majorVersion = 10, .minorVersion = 0, .patchVersion = 0 }; @@ -238,7 +208,7 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; clientState = mutableState; } - return [FBSDKInternalUtility JSONStringForObject:clientState error:NULL invalidObjectHandler:NULL]; + return [FBSDKBasicUtility JSONStringForObject:clientState error:NULL invalidObjectHandler:NULL]; } - (NSMutableDictionary *)_parametersForNewEvent @@ -249,7 +219,7 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; eventParameters[FBSDKLoginManagerLoggerParamIdentifierKey] = _identifier ?: FBSDKLoginManagerLoggerValueEmpty; eventParameters[FBSDKLoginManagerLoggerParamTimestampKey] = @(round(1000 * [NSDate date].timeIntervalSince1970)); eventParameters[FBSDKLoginManagerLoggerParamResultKey] = FBSDKLoginManagerLoggerValueEmpty; - [FBSDKInternalUtility dictionary:eventParameters setObject:_authMethod forKey:FBSDKLoginManagerLoggerParamAuthMethodKey]; + [FBSDKBasicUtility dictionary:eventParameters setObject:_authMethod forKey:FBSDKLoginManagerLoggerParamAuthMethodKey]; eventParameters[FBSDKLoginManagerLoggerParamErrorCodeKey] = FBSDKLoginManagerLoggerValueEmpty; eventParameters[FBSDKLoginManagerLoggerParamErrorMessageKey] = FBSDKLoginManagerLoggerValueEmpty; eventParameters[FBSDKLoginManagerLoggerParamExtrasKey] = FBSDKLoginManagerLoggerValueEmpty; @@ -261,7 +231,7 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; - (void)logEvent:(NSString *)eventName params:(NSMutableDictionary *)params { if (_identifier) { - NSString *extrasJSONString = [FBSDKInternalUtility JSONStringForObject:_extras + NSString *extrasJSONString = [FBSDKBasicUtility JSONStringForObject:_extras error:NULL invalidObjectHandler:NULL]; if (extrasJSONString) { @@ -269,7 +239,9 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; } [_extras removeAllObjects]; - [FBSDKAppEvents logImplicitEvent:eventName valueToSum:nil parameters:params accessToken:nil]; + [FBSDKAppEvents logInternalEvent:eventName + parameters:params + isImplicitlyLogged:YES]; } } @@ -285,18 +257,18 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; // 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]; - [FBSDKInternalUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorMessageKey]; + [FBSDKBasicUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorMessageKey]; value = error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] ?: [NSString stringWithFormat:@"%ld", (long)error.code]; - [FBSDKInternalUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorCodeKey]; + [FBSDKBasicUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorCodeKey]; NSError *innerError = error.userInfo[NSUnderlyingErrorKey]; if (innerError != nil) { value = innerError.userInfo[@"error_message"] ?: innerError.userInfo[NSLocalizedDescriptionKey]; - [FBSDKInternalUtility dictionary:_extras setObject:value forKey:@"inner_error_message"]; + [FBSDKBasicUtility dictionary:_extras setObject:value forKey:@"inner_error_message"]; value = innerError.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] ?: [NSString stringWithFormat:@"%ld", (long)innerError.code]; - [FBSDKInternalUtility dictionary:_extras setObject:value forKey:@"inner_error_code"]; + [FBSDKBasicUtility dictionary:_extras setObject:value forKey:@"inner_error_code"]; } } else if (error) { params[FBSDKLoginManagerLoggerParamErrorCodeKey] = @(error.code); @@ -307,3 +279,5 @@ static NSString *const FBSDKLoginManagerLoggerTryWebView = @"tryFallback"; } @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 index 545ef0e3d2..18dd7cef1b 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h @@ -16,9 +16,13 @@ // IN AN ACTION OF 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 +#import "FBSDKLoginManagerLoginResult.h" @interface FBSDKLoginManagerLoginResult() @@ -30,3 +34,5 @@ // 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 index b8dcc4c8bc..440f651efc 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h @@ -16,10 +16,15 @@ // IN AN ACTION OF 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 +#import "FBSDKLoginManager.h" +NS_SWIFT_NAME(LoginUtility) @interface FBSDKLoginUtility : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -31,3 +36,5 @@ + (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 index 10592ba602..aae6a17ac4 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m @@ -16,12 +16,23 @@ // IN AN ACTION OF 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" -#import -#import +#if SWIFT_PACKAGE +@import FBSDKCoreKit; +#else +#import +#endif +#ifdef FBSDKCOCOAPODS +#import +#else #import "FBSDKCoreKit+Internal.h" +#endif #import "FBSDKLoginConstants.h" @implementation FBSDKLoginUtility @@ -40,7 +51,11 @@ + (NSDictionary *)queryParamsFromLoginURL:(NSURL *)url { - NSString *expectedUrlPrefix = [FBSDKInternalUtility appURLWithHost:@"authorize" path:nil queryParameters:nil error:NULL].absoluteString; + 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; @@ -78,3 +93,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h index b9791388f2..63efb5e81f 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h @@ -16,8 +16,18 @@ // IN AN ACTION OF 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 index 3152cef260..d344be4689 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m +++ b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m @@ -16,6 +16,10 @@ // IN AN ACTION OF 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" @@ -45,3 +49,5 @@ } @end + +#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/README.md b/iphone/Maps/Pods/FBSDKLoginKit/README.md index 1d8dcaefa0..a200d7a196 100644 --- a/iphone/Maps/Pods/FBSDKLoginKit/README.md +++ b/iphone/Maps/Pods/FBSDKLoginKit/README.md @@ -1,7 +1,7 @@ # 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-objc-sdk.svg?branch=master)](https://travis-ci.org/facebook/facebook-objc-sdk) +[![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) @@ -15,9 +15,34 @@ NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookS ## TRY IT OUT -1. Download the SDK at or via CocoaPods by adding the 'FBSDKCoreKit', - 'FBSDKLoginKit', and 'FBSDKShareKit' pods. -2. Test your install: build and run the project at `~/Documents/FacebookSDK/Samples/Scrumptious/Scrumptious.xcodeproj` +### 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. @@ -31,15 +56,21 @@ NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookS ## GIVE FEEDBACK -Please report bugs or issues to +Please report bugs or issues to our designated developer support team -- -- as this will help us resolve them more quickly. -You can also join the [Facebook Developers Group on Facebook](https://www.facebook.com/groups/fbdevelopers/) or ask -questions on [Stack Overflow](http://facebook.stackoverflow.com) +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 diff --git a/iphone/Maps/Pods/Manifest.lock b/iphone/Maps/Pods/Manifest.lock index d07689cc2b..8247a869e4 100644 --- a/iphone/Maps/Pods/Manifest.lock +++ b/iphone/Maps/Pods/Manifest.lock @@ -1,17 +1,38 @@ PODS: - ActionSheetPicker-3.0 (2.3.0) - AppsFlyerFramework (4.9.0) - - Bolts (1.9.0): - - Bolts/AppLinks (= 1.9.0) - - Bolts/Tasks (= 1.9.0) - - Bolts/AppLinks (1.9.0): - - Bolts/Tasks - - Bolts/Tasks (1.9.0) - - FBSDKCoreKit (4.42.0): - - Bolts (~> 1.9) - - FBSDKLoginKit (4.42.0): - - FBSDKCoreKit + - FBAudienceNetwork (5.6.0): + - FBSDKCoreKit/Basics (>= 5.6.0) + - FBSDKCoreKit (5.15.0): + - FBSDKCoreKit/Basics (= 5.15.0) + - FBSDKCoreKit/Core (= 5.15.0) + - FBSDKCoreKit/Basics (5.15.0) + - FBSDKCoreKit/Core (5.15.0): + - FBSDKCoreKit/Basics + - FBSDKLoginKit (5.15.0): + - FBSDKLoginKit/Login (= 5.15.0) + - FBSDKLoginKit/Login (5.15.0): + - FBSDKCoreKit (~> 5.0) - Flurry-iOS-SDK/FlurrySDK (10.1.0) + - MoPub-FacebookAudienceNetwork-Adapters (5.6.0.0): + - MoPub-FacebookAudienceNetwork-Adapters/MoPub (= 5.6.0.0) + - MoPub-FacebookAudienceNetwork-Adapters/Network (= 5.6.0.0) + - MoPub-FacebookAudienceNetwork-Adapters/MoPub (5.6.0.0): + - mopub-ios-sdk/Core (~> 5.6) + - MoPub-FacebookAudienceNetwork-Adapters/Network (5.6.0.0): + - FBAudienceNetwork (= 5.6.0) + - mopub-ios-sdk/Core (~> 5.6) + - mopub-ios-sdk (5.10.0): + - mopub-ios-sdk/MoPubSDK (= 5.10.0) + - mopub-ios-sdk/Avid (5.10.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/Core (5.10.0) + - mopub-ios-sdk/Moat (5.10.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/MoPubSDK (5.10.0): + - mopub-ios-sdk/Avid + - mopub-ios-sdk/Core + - mopub-ios-sdk/Moat - Pushwoosh (5.16.0): - Pushwoosh/Core (= 5.16.0) - Pushwoosh/Core (5.16.0) @@ -19,30 +40,36 @@ PODS: DEPENDENCIES: - ActionSheetPicker-3.0 (= 2.3.0) - AppsFlyerFramework (= 4.9.0) - - FBSDKCoreKit (= 4.42.0) - - FBSDKLoginKit (= 4.42.0) + - FBSDKCoreKit (= 5.15) + - FBSDKLoginKit (= 5.15) - Flurry-iOS-SDK/FlurrySDK (= 10.1) + - MoPub-FacebookAudienceNetwork-Adapters (= 5.6.0.0) + - mopub-ios-sdk (~> 5.10) - Pushwoosh (= 5.16.0) SPEC REPOS: trunk: - ActionSheetPicker-3.0 - AppsFlyerFramework - - Bolts + - FBAudienceNetwork - FBSDKCoreKit - FBSDKLoginKit - Flurry-iOS-SDK + - MoPub-FacebookAudienceNetwork-Adapters + - mopub-ios-sdk - Pushwoosh SPEC CHECKSUMS: ActionSheetPicker-3.0: eef157d75e151f255c5333d26656c7fbfe905a51 AppsFlyerFramework: f57e5d590ad3124d3e594a76032a181bc91ec6cd - Bolts: ac6567323eac61e203f6a9763667d0f711be34c8 - FBSDKCoreKit: aa42f1c384775f8b075f53a43080474278e9701d - FBSDKLoginKit: 373830c68aa48c9e8f0bfed93a3e32d2ca8963a0 + FBAudienceNetwork: 1ea63543665445a3a5b4a059e8210a343b6ab3c1 + FBSDKCoreKit: 083ba8c8e37939c0b4c84250654c9be0aef0c2f8 + FBSDKLoginKit: bd40354a96e4718765713ef225bc368f10dc395d Flurry-iOS-SDK: be6bfad47f3b3c15a38b5e396935ef74512f1c38 + MoPub-FacebookAudienceNetwork-Adapters: 3cec249235d12e3fec9a01bf559d608fa3ec05e1 + mopub-ios-sdk: 3d65133b95b6498aa871a66818a11a5ba307e565 Pushwoosh: 6cba171e52f3f7b8ccd280f492a5831deac2f594 -PODFILE CHECKSUM: 44680f7ff08ae6986147c4f7799f2c6971243c0b +PODFILE CHECKSUM: 68054a76d0d74219f643b4055fca97f6fcdcf5d1 COCOAPODS: 1.8.3 diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.h new file mode 100644 index 0000000000..71fd3bc0ae --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.h @@ -0,0 +1,40 @@ +// +// 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 new file mode 100644 index 0000000000..eb006409b2 --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.m @@ -0,0 +1,104 @@ +// +// 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.6.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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookBannerCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.h similarity index 75% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookBannerCustomEvent.h rename to iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.h index 38a3208eae..9c629282a2 100755 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookBannerCustomEvent.h +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.h @@ -7,13 +7,12 @@ #if __has_include() #import +#elif __has_include() + #import #else #import "MPBannerCustomEvent.h" #endif -/* - * Certified with Facebook Audience Network 4.26.1 - */ @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 new file mode 100644 index 0000000000..42d6d21783 --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.m @@ -0,0 +1,174 @@ +// +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h similarity index 59% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h rename to iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h index e265ec0c04..f2e6c91d37 100755 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h @@ -6,15 +6,13 @@ // #if __has_include() -#import + #import +#elif __has_include() + #import #else -#import "MPInterstitialCustomEvent.h" - + #import "MPInterstitialCustomEvent.h" #endif -/* - * Certified with Facebook Audience Network 4.26 - */ @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 new file mode 100644 index 0000000000..3678e00272 --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m @@ -0,0 +1,194 @@ +// +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeAdAdapter.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.h similarity index 55% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeAdAdapter.h rename to iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.h index adf8cf0c8a..b9b46a104b 100755 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookNativeAdAdapter.h +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.h @@ -7,18 +7,19 @@ #if __has_include() #import +#elif __has_include() + #import #else #import "MPNativeAdAdapter.h" #endif -@class FBNativeAd; - -extern NSString *const kFBVideoAdsEnabledKey; +@class FBNativeAdBase; @interface FacebookNativeAdAdapter : NSObject @property (nonatomic, weak) id delegate; +@property (nonatomic, readonly) FBNativeAdBase *fbNativeAdBase; -- (instancetype)initWithFBNativeAd:(FBNativeAd *)fbNativeAd adProperties:(NSDictionary *)adProps; +- (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 new file mode 100755 index 0000000000..9323d9968e --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.m @@ -0,0 +1,213 @@ +// +// 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 new file mode 100644 index 0000000000..545a5e042c --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.h @@ -0,0 +1,31 @@ +// +// 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 new file mode 100644 index 0000000000..5bb3f6db95 --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.m @@ -0,0 +1,202 @@ +// +// 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 new file mode 100755 index 0000000000..baaa6eac68 --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.h @@ -0,0 +1,19 @@ +// +// 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 new file mode 100644 index 0000000000..a654105f0f --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.m @@ -0,0 +1,132 @@ +// +// 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/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h similarity index 58% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h rename to iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h index 88a04366f6..a5fb1d3f18 100755 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h @@ -5,14 +5,13 @@ // #if __has_include() -#import + #import +#elif __has_include() + #import #else -#import "MPRewardedVideoCustomEvent.h" + #import "MPRewardedVideoCustomEvent.h" #endif -/* - * Certified with Facebook Audience Network 4.26.1 - */ @interface FacebookRewardedVideoCustomEvent : MPRewardedVideoCustomEvent @end diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m old mode 100755 new mode 100644 similarity index 56% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m rename to iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m index 01570c874c..5a1d433694 --- a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m @@ -5,41 +5,24 @@ // #import #import "FacebookRewardedVideoCustomEvent.h" +#import "FacebookAdapterConfiguration.h" -#import "MPInstanceProvider.h" -#import "MPLogging.h" -#import "MoPub.h" -#import "MPRewardedVideoReward.h" -#import "MPRealTimeTimer.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 MPInstanceProvider (FacebookRewardedVideos) - -- (FBRewardedVideoAd *)buildFBRewardedVideoAdWithPlacementID:(NSString *)placementID - delegate:(id)delegate; - -@end - -@implementation MPInstanceProvider (FacebookRewardedVideos) - -- (FBRewardedVideoAd *)buildFBRewardedVideoAdWithPlacementID:(NSString *)placementID - delegate:(id)delegate -{ - FBRewardedVideoAd *rewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:placementID]; - rewardedVideoAd.delegate = delegate; - return rewardedVideoAd; -} - -@end - - @interface FacebookRewardedVideoCustomEvent () @property (nonatomic, strong) FBRewardedVideoAd *fbRewardedVideoAd; @property (nonatomic, strong) MPRealTimeTimer *expirationTimer; @property (nonatomic, assign) BOOL hasTrackedImpression; +@property (nonatomic, copy) NSString *fbPlacementId; @end @@ -57,24 +40,34 @@ - (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup { if (![info objectForKey:@"placement_id"]) { - MPLogError(@"Placement ID is required for Facebook Rewarded Video ad"); - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; + 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 = - [[MPInstanceProvider sharedProvider] buildFBRewardedVideoAdWithPlacementID: [info objectForKey:@"placement_id"] delegate:self]; + self.fbRewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:[info objectForKey:@"placement_id"]]; + self.fbRewardedVideoAd.delegate = self; - [FBAdSettings setMediationService:[NSString stringWithFormat:@"MOPUB_%@", MP_SDK_VERSION]]; + [FBAdSettings setMediationService:[FacebookAdapterConfiguration mediationString]]; + // Load the advanced bid payload. if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook rewarded video ad markup"); + 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(@"Requesting Facebook rewarded video ad"); + MPLogInfo(@"Loading Facebook rewarded video ad"); [self.fbRewardedVideoAd loadAd]; + + MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); } } @@ -88,22 +81,39 @@ { if(![self hasAdAvailable]) { - MPLogError(@"Facebook rewarded video ad was not available"); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; + 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 { - MPLogInfo(@"Facebook rewarded video ad will be presented"); + MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); + + MPLogAdEvent([MPLogEvent adWillAppearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); [self.delegate rewardedVideoWillAppearForCustomEvent:self]; + [self.fbRewardedVideoAd showAdFromRootViewController:viewController]; - MPLogInfo(@"Facebook rewarded video ad was presented"); + + MPLogAdEvent([MPLogEvent adDidAppearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); [self.delegate rewardedVideoDidAppearForCustomEvent:self]; } } -(void)dealloc{ - _fbRewardedVideoAd.delegate = nil; + [self cancelExpirationTimer]; + self.fbRewardedVideoAd.delegate = nil; +} + +-(void)cancelExpirationTimer +{ + if (_expirationTimer != nil) + { + [self.expirationTimer invalidate]; + self.expirationTimer = nil; + } } #pragma mark FBRewardedVideoAdDelegate methods @@ -118,7 +128,7 @@ */ - (void)rewardedVideoAdDidClick:(FBRewardedVideoAd *)rewardedVideoAd { - MPLogInfo(@"Facebook rewarded video ad was clicked"); + MPLogAdEvent([MPLogEvent adTappedForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self ]; } @@ -132,23 +142,41 @@ */ - (void)rewardedVideoAdDidLoad:(FBRewardedVideoAd *)rewardedVideoAd { - MPLogInfo(@"Facebook rewarded video ad was loaded. Can present now."); - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self ]; - // introduce timer for 1 hour as per caching logic introduced by FB + [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) { - [self.delegate rewardedVideoDidExpireForCustomEvent:self]; - MPLogInfo(@"Facebook Rewarded Video ad expired as per the audience network's caching policy"); - self.fbRewardedVideoAd = nil; + [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; } - [strongSelf.expirationTimer invalidate]; }]; [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 @@ -160,7 +188,7 @@ */ - (void)rewardedVideoAdDidClose:(FBRewardedVideoAd *)rewardedVideoAd { - MPLogInfo(@"Facebook rewarded video ad is dismissed."); + MPLogAdEvent([MPLogEvent adDidDisappearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; } @@ -174,7 +202,7 @@ */ - (void)rewardedVideoAdWillClose:(FBRewardedVideoAd *)rewardedVideoAd { - MPLogInfo(@"Facebook rewarded video ad will be dismissed."); + MPLogAdEvent([MPLogEvent adWillDisappearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; } @@ -189,7 +217,9 @@ */ - (void)rewardedVideoAd:(FBRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error { - MPLogInfo(@"Facebook rewarded video ad failed to load with error: %@", error.localizedDescription); + [self cancelExpirationTimer]; + + MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], nil); [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:error]; } @@ -205,7 +235,6 @@ - (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)]]; } @@ -220,12 +249,11 @@ */ - (void)rewardedVideoAdWillLogImpression:(FBRewardedVideoAd *)rewardedVideoAd { - MPLogInfo(@"Facebook rewarded video has started playing and hence logging impression"); + [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.expirationTimer invalidate]; } @end - - diff --git a/iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/MoPub-FacebookAudienceNetwork-Podspecs/LICENSE b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from iphone/Maps/3party/MoPubSDK/AdNetworkSupport/FacebookAudienceNetwork/MoPub-FacebookAudienceNetwork-Podspecs/LICENSE rename to iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/LICENSE diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/README.md b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/README.md new file mode 100644 index 0000000000..f23d5b1582 --- /dev/null +++ b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/README.md @@ -0,0 +1,5 @@ +# mopub-ios-mediation + +We have formally separated network adapters from our MoPub SDK repository to enable an independent release cadence resulting in faster certification cycles. + +We have also added a new tool to make it easier for publishers to get up and running with mediation integration. Check it out [here](https://developers.mopub.com/docs/mediation/integrate/). diff --git a/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj b/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj index affa397f16..68181e2502 100644 --- a/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj +++ b/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj @@ -25,367 +25,845 @@ ); name = AppsFlyerFramework; }; + D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 13D407A95703625CC523D178B16CAA5B /* Build configuration list for PBXAggregateTarget "FBAudienceNetwork" */; + buildPhases = ( + ); + dependencies = ( + D44974382097D0DA5C7FA27F4BA262C7 /* PBXTargetDependency */, + ); + name = FBAudienceNetwork; + }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0042C88D790B3286BCB23649B064EBE7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6A4D02996FC42EB6C5B1477D8CC7658 /* Security.framework */; }; - 032BC936BF57A5C6E4825D6E1F3C837A /* FBSDKCodelessPathComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 59E708784EDB220928D2A263BCFD4020 /* FBSDKCodelessPathComponent.m */; }; - 0347A9EF4480EAD9A84CEC76BEBCCD0A /* ActionSheetPicker-3.0-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E0D9E2865A7A4E865A87820793058142 /* ActionSheetPicker-3.0-dummy.m */; }; - 03A961EF502CF16B268E7AB1EA4BF971 /* FBSDKAccessTokenCacheV3_17.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A46CA52949C2DEC52D3723665F7C840 /* FBSDKAccessTokenCacheV3_17.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03DEF0DDA892A347C8BAD19D4673CAAE /* FBSDKButton+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 57455EAD3979A8648CAF18AECB805123 /* FBSDKButton+Subclass.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 049B98A3ABBC0834BC9BA0B940D90B03 /* FBSDKLoginManagerLoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D8DBA1F0E406165222E7829823BCEC9 /* FBSDKLoginManagerLoginResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04D2F30AE358360915EF87F0F19B7362 /* Flurry.h in Headers */ = {isa = PBXBuildFile; fileRef = 6646B2E5A422A83AA04BD88FBF66652E /* Flurry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04DBC6643BB85A6CEA1279F44FEEC88A /* ActionSheetMultipleStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DC6116A6D768AB600AB3D3D4C1A541 /* ActionSheetMultipleStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05B15F025F54A4BF7B993C2DE595534B /* FBSDKErrorConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 98AC263DDE6617B5ED642AD981EB7FBA /* FBSDKErrorConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05F23DF9FF1E3D7747151711215B6C28 /* FBSDKGraphRequestConnection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 139EA7EC40F949B472050B6E0856647F /* FBSDKGraphRequestConnection+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 061CB4926C6631FC347A3D7FAE733074 /* FlurrySessionBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D6CA0ADF47E159E535591F264CF7DF9 /* FlurrySessionBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06541E1EB2B44BC449E5BED2B38D2EE2 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 24CFA9C269A6C712EAB850307C22D12E /* BFTaskCompletionSource.m */; }; - 069F8228C062FBB9CCCE5DC6FBA298B8 /* FlurryConsent.h in Headers */ = {isa = PBXBuildFile; fileRef = A2218DF6F865C7AEA9B7FF95A10D2C24 /* FlurryConsent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06AFA7CDCE86E762BEBB6ECE41823E62 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7023ECF48ED539181E896376F65FADBA /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 071E39D5F073D41F640CB5103F7776D3 /* FBSDKURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 805FD96A717C52DA283F8689418FF6AD /* FBSDKURL.m */; }; - 073DB109C72BA063B5ABAC1AA4E7F85D /* FBSDKBridgeAPIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = C57760C9485F125E2D7C0CC14573AB99 /* FBSDKBridgeAPIResponse.m */; }; - 099851CA679300F154A44562D2EDF456 /* FBSDKApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 391D0A08124D80D2E6DF70B190CD4EB9 /* FBSDKApplicationDelegate.m */; }; - 0A932C150623473A43628372CD652088 /* FBSDKSystemAccountStoreAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC64ABFA433002A5F14426B4A644C768 /* FBSDKSystemAccountStoreAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CCFB73674D71117963F5DEBD89A372B /* FBSDKProfile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 608A4C9051BD18BE36F6FC7E8E1FA6C9 /* FBSDKProfile+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D521EBB8D62491CCBD920D65991E412 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = E2D523A4F4193431449F7B6287726A6F /* BFCancellationTokenRegistration.m */; }; - 0D720E64D98BB554B2DCCD441218AE3E /* Flurry-iOS-SDK-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EADD986CB516AAE647C15CF7F39E29FA /* Flurry-iOS-SDK-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0DBB9722D161CC29745C39552DF39053 /* FBSDKApplicationDelegate+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C860BFA7739B24362FDE740A22793A5D /* FBSDKApplicationDelegate+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0ECC1D9FA87CCA19FE63CF0A4F2EE139 /* FBSDKCodelessMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 694640608FF969F2DCD1FF18A5C0AD53 /* FBSDKCodelessMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F934CFF701AD67053070C32579E52E0 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */ = {isa = PBXBuildFile; fileRef = D4BC5C735AD78A92A57A6C7CA5815F95 /* FBSDKBridgeAPIProtocolWebV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12AD1BD5AC64F2739337DEEA9064C1AC /* FBSDKLoginCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2B004D48CFC8E1780725FA50F9D4CB /* FBSDKLoginCompletion.m */; }; - 12DDECC384C52B4107A7DBD6DE953DAF /* FBSDKGraphRequestDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C75FF7BC1C1E3A9D1CBC3EC748DBB64 /* FBSDKGraphRequestDataAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 131C35368E74AC3DD117EC4A5A7264AC /* FBSDKGateKeeperManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 10DED6A0EC820A9356CAF472EA0EB093 /* FBSDKGateKeeperManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1333AA7B6EAD6D7F84FBD6262871D205 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */; }; - 1345FEB42037DE616FA4B25E24F7FBC3 /* BFAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 41A0FCB26B3D11B5C197A60061391136 /* BFAppLinkTarget.m */; }; - 134AA5B629BB78F388716D738D6160DC /* FBSDKLoginManagerLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B2A95996B5001A26E599EB217998116 /* FBSDKLoginManagerLogger.m */; }; - 1416449DDF1CA04F7A932B6B0AE14015 /* FBSDKCloseIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 00D7C023304AB12B93140D0BD4C9B6B8 /* FBSDKCloseIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 144DF0AB0A14BDBE9EDDB1DEF4050347 /* FBSDKLoginUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = F6086DBC65693BFCBF924F47420D7DB3 /* FBSDKLoginUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1451ACF5365C93981FF0EBB219BC00EF /* FBSDKUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = EE0EC5BDC623A806FCACAF44FA17A86F /* FBSDKUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1626932AD3FBB3480DB2956E7A5628B7 /* FBSDKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D93E6F27CAE3DB1B3732057E88B18CB /* FBSDKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16DE65A99D6607A33DE7423B592ED278 /* FBSDKTestUsersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C72D2458162CE65CAC7783BDF0935A1 /* FBSDKTestUsersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17A3E72C74C074D9CB2B6D57AF15A848 /* FBSDKWebDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = AB18131B2C3A6EFC70D70F4EF79FA88E /* FBSDKWebDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 188FF3365630325CFC56C261814FEF76 /* FBSDKMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1A8CFD592FB21294908452B745AEA1 /* FBSDKMeasurementEvent.m */; }; - 18BE37FE265A6671DC111006CA2CF7B7 /* FBSDKDeviceLoginCodeInfo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = EEA382D0056E6E4AB04B22BDC88607E8 /* FBSDKDeviceLoginCodeInfo+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 193EF25F3A6EF0F038EAC5F9F2CA2C2B /* SWActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 69E18D17CB62ECF138096EFEC9FB192A /* SWActionSheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 198AE99247767682585D194C9EAB3E71 /* FBSDKCodelessPathComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F79FFD6800F6E3F88F6C20DAB46436D /* FBSDKCodelessPathComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19EA21EE461AD7DDC5E3D4393F576536 /* BFAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E15DA59B842EC4332D2115D33CAF40A /* BFAppLinkReturnToRefererController.m */; }; - 1A4B8FD0132E39F309B7D06CC5A3C0A0 /* FBSDKCodelessParameterComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = D41CEFE0CE872F3DDEB5F3C6ADA64938 /* FBSDKCodelessParameterComponent.m */; }; - 1A734C45A429F869E7BCBFDD306714E4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9737384FAEB34B531C7345A73204F001 /* UIKit.framework */; }; - 1AAC9D3ECCC0E0BF71FF064497979803 /* ActionSheetDistancePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 69003AFD351E25C2A0924C76F462FFCC /* ActionSheetDistancePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1C013DA5FE16422D89FB79420EA68D78 /* FBSDKCoreKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3806C879C52138A8C758954A562EA64A /* FBSDKCoreKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C55D7E1D61E47900C0E39CF5444FF2E /* FBSDKAccessTokenCacheV3.h in Headers */ = {isa = PBXBuildFile; fileRef = 749B7A5574B275D79F45A5B7BE1D56E4 /* FBSDKAccessTokenCacheV3.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D11560616E4E01DE89BF75536834400 /* FBSDKCoreKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 739BD4005CB6CCD9A50FF44CDFB4EC27 /* FBSDKCoreKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E609B6738B2CA3D31FC58B46609BD03 /* FBSDKViewImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4752BC84A484BFFA1194C032BF5371 /* FBSDKViewImpressionTracker.m */; }; - 1FD7EE67FF9BD24D9FB17632834692D6 /* FacebookSDKStrings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 00F0C7E9A83E8D98832B67FCED7ECF2C /* FacebookSDKStrings.bundle */; }; - 20803318BF15F6F2FEE623658B2D2C98 /* FBSDKURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A673E66ABC9DB21EB5035A359A19456B /* FBSDKURL_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 208AC769BC1901EA9A1EB230F7ED1245 /* FBSDKBridgeAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = D357A85EE10840E2B34FABCDFC42E748 /* FBSDKBridgeAPI.m */; }; - 20F9AC9601FB737BE368761A002146F9 /* _FBSDKLoginRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = D4BE879C4DC5CF9A5915F0E029F22383 /* _FBSDKLoginRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 219701FD316A0824C25B25434896A5E0 /* FBSDKAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F6B7954F6DE7A5471867BB77522CDFF /* FBSDKAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21E3E5E59D48A9668B95E95C7D74DC4C /* ActionSheetDistancePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 28F72C955224D63ACDEF4159DC9D8661 /* ActionSheetDistancePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21EBE786A7DD5893D49EFF068EE4F9FC /* SWActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 481D46D6F219428528D7B90629CDEAB9 /* SWActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2361179E43B17C5FED31AA9E55C2C2B7 /* FBSDKAppEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = BF54E0769BFF2B37521EF07C59F7986D /* FBSDKAppEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24184565A7C9A3E0DB3B68FAF53BABE8 /* FBSDKMaleSilhouetteIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B9CCFC173E56B239CB76F9ECAEF276B /* FBSDKMaleSilhouetteIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2514AE2566AAA76EE6D1C0CB5CCDAC43 /* FBSDKTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFC69877195BFE9B2C63B8E4BB4B87C /* FBSDKTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 255F3079C9B5E8650369EFC1A7DEAB48 /* FBSDKAccessTokenCacheV3_17.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F0527AD92E611ED53022D2561EFED5 /* FBSDKAccessTokenCacheV3_17.m */; }; - 26D8F784BB150D3531899AB58D8E8A49 /* FBSDKLoginUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = E0850A656566B1BA33A6D27DFB3C2635 /* FBSDKLoginUtility.m */; }; - 26EB677496359A0D19AD8ADBDCCE672F /* FBSDKAppLinkUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A5F4705BFDD1B485E044E0B8D7D4D8 /* FBSDKAppLinkUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2720D94D657CD727CD81AFC4CDCB4B98 /* FBSDKWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 01299E755C98EA0FE3F86B539722A8E4 /* FBSDKWebViewAppLinkResolver.m */; }; - 2768FB4497A05D65AE2816FD87ED5806 /* FBSDKAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = DFD29503912DC9C1EE66B9B7E1CB5A58 /* FBSDKAccessToken.m */; }; - 284AED2A52E8F8CD834F43F8A99423F3 /* FBSDKConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 01DA14DC4990DC278B934E6DC0CC93DE /* FBSDKConstants.m */; }; - 285EC183A453F329DEFF78351A4AB48D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */; }; - 2A1A0D933CB0E19929547CF2F55E197B /* FBSDKProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A952670265950ECD1B218D9E3DC9A8C /* FBSDKProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A75896F76E4CC4C620BDBA1CC022CC4 /* FBSDKLoginCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 0394679FC4921C447C6415940942F462 /* FBSDKLoginCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BCD4B0779EB020F74E6AC01F8C72BA1 /* ActionSheetDatePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = C6626452F4468CB2BA3C2A3BBC75C261 /* ActionSheetDatePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2E9104E922A6404A24E6B653BC623541 /* FBSDKDeviceLoginManagerResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DF4A3DAB8C6D6149B3E6CE1EA9618C79 /* FBSDKDeviceLoginManagerResult.m */; }; - 2ECA6CF938DB9D01E67CB9117A22F021 /* FBSDKViewHierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = F834B42ED800C3CB733DB0884044F89B /* FBSDKViewHierarchy.m */; }; - 3087472B8D0219E60590B9D0E668EAD2 /* ActionSheetPicker-3.0-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E65985C8E7E90A6C8AE5F7E07C79E582 /* ActionSheetPicker-3.0-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 310BBF6EB4511AE43524CC6DBE5A5CF6 /* FBSDKWebDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2596C1166D5B751F382E2AD4D76ED5 /* FBSDKWebDialog.m */; }; - 31B2402A6E6673B68CF39EABFD7F8AA4 /* FBSDKLogo.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F19630E9D8A32AEA4599D81BF73504 /* FBSDKLogo.m */; }; - 33995A04546E4E4DBDA3F25443A467E3 /* FBSDKImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = FA0340E21055A2148D909C6BBE5816A3 /* FBSDKImageDownloader.m */; }; - 33A4EE3F5F0064AF102F8062BADDC37E /* BFAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E9332679CAED41F77F7C1F6E1D7369A /* BFAppLink_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34F98AF7B8F2663EE809B61A6AE85FDF /* FBSDKBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D7C9F715E256F975546FCDBDB3E6270 /* FBSDKBase64.m */; }; - 3515BA57EEB21704683FD75E7A06AB22 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5D3B73801EA4B673396D5BFFEE0B69 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 355A42B6D67E48556A08DAB94AF4BACB /* FBSDKLoginTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A72B061AD78E658CC9F2FE1C2B8FDBC /* FBSDKLoginTooltipView.m */; }; - 362ACE4237BAF588962BF732826405AB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */; }; - 367686DE0B631D3132ECCE2C7E37A939 /* FBSDKProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CEB8AEE60DA899CFFA54DB8C508A63E /* FBSDKProfile.m */; }; - 36ECA252142CC7B9EFA8A393AB134C26 /* AbstractActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = DA960F595A5A54729BF5032FC09E0F80 /* AbstractActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37ECDA45CCC9952B527202C4AE904DC8 /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 846D41CF35FC79EB4676149A6E443B73 /* FBSDKBridgeAPIProtocolNativeV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3830C9F4EBF44CDEEBCE5D4D470ACD5D /* FBSDKDeviceLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D214C62C0E0D471EDDA33D6AE26481 /* FBSDKDeviceLoginManager.m */; }; - 38ED79251F5A4ED6C23952215CD187D6 /* FBSDKAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 24EE133EA5DD7D16DC0D5D40C8F13D5D /* FBSDKAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3964446C9F47735E0AF4259F4BCCDBF6 /* FBSDKTypeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D227BDCBFE2AC4686865F324ED948E /* FBSDKTypeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39C8836740729FDC23E92258CBF81015 /* ActionSheetCustomPickerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CA87FDB0999691EA19D1C2FDA57014BA /* ActionSheetCustomPickerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39CFEA55B49B65C9DB6A9B46283B37C0 /* Pods-MAPS.ME-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AAD6432F9CBA054F5118361E3C552BC /* Pods-MAPS.ME-dummy.m */; }; - 39F66138BDB07E0D56A9BDFB5B088BC7 /* FBSDKBridgeAPIRequest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B89EEE8381216771B45DD1981A6A5BD6 /* FBSDKBridgeAPIRequest+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3AB36443A6CD42FDAB61EC98BE5D9BA9 /* ActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = B504A439CAB3C8BC83CB10078C05CC27 /* ActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C155CA17DFC9FDD2C7734D491185130 /* FBSDKCodelessParameterComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = C59C51355672E43E707DF56F3A1F7229 /* FBSDKCodelessParameterComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C9B65BA5622D23B3A598B317B68FFC9 /* FBSDKCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 035429A1F2450E95542AA92CDCB860BF /* FBSDKCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CED6DCAF5B7D4413D060EBBCC0F98D5 /* ActionSheetMultipleStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B17E1FE6B3F4180D6EF865958DA81B /* ActionSheetMultipleStringPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3EFAC68BC9F02CB46120ABA3E6383F4F /* FBSDKBridgeAPIProtocolWebV1.m in Sources */ = {isa = PBXBuildFile; fileRef = E249FAA4A618691DE6F3182ADCB75DD2 /* FBSDKBridgeAPIProtocolWebV1.m */; }; - 3F01FAB6B6B6FE82EF13FC60DC42365D /* FBSDKAccessTokenCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D1C3FF0C2F89FDFA09A8B1C3391FE43 /* FBSDKAccessTokenCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40695FF29D946370F434ADE183D57AE2 /* FBSDKBridgeAPIProtocolType.h in Headers */ = {isa = PBXBuildFile; fileRef = A309A8DBB0E76F6AE67639530F789C55 /* FBSDKBridgeAPIProtocolType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42CA950495A2D4213AEB8130001A79DB /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 34195B528E8927827EC8CA3054D9F525 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43012E88CEA507F629D310854A1CF5E9 /* FBSDKAppEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B132AFC106FE742E5EB546510692A6D /* FBSDKAppEvents.m */; }; - 455831D7F3EEE34DDBA5371E3E6DF3B4 /* FBSDKBridgeAPICrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = B636DE2C5A1ADFEAFD5491307156CA9E /* FBSDKBridgeAPICrypto.m */; }; - 466F87A9F01EB6DA61F13B7BED9D16E0 /* FBSDKBoltsMeasurementEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = CE403AE09632BBA310B9D53556B6F31B /* FBSDKBoltsMeasurementEventListener.m */; }; - 472AAF9EE530914789E1817B68371C61 /* ActionSheetDatePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF018B42AB403160A32C0E9739F1155 /* ActionSheetDatePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4814A7C2FC9D3F936DC8B53020BB12F5 /* FBSDKMonotonicTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF83E4597A233B3AD40065482AC400D /* FBSDKMonotonicTime.m */; }; - 482979C2C401430E2A2D797938080DD2 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = B1A7A4E7578A85E1940D42B3741342EA /* Bolts.m */; }; - 48D8372040EEED0D099553806C45D829 /* FBSDKAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = 736D03EDC633D7EA1A5021078CF2C210 /* FBSDKAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4902C5F7F63D6A9CABCE785FE647B673 /* BFAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = CB26876F187E01EE3F089C8B6A36EA53 /* BFAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B99098B9C1CCD7E424C332EA98DCFE0 /* BFWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = F75A3F682419FA9DC7163B67C08BF24D /* BFWebViewAppLinkResolver.m */; }; - 4C54A369045C29BBAB1E27793A749894 /* FBSDKGraphRequestBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 2594C92289BC34AFF3A8A80212250626 /* FBSDKGraphRequestBody.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CABA3E2E1ADBBCB0BBBBF3F0C4D5A97 /* FBSDKBoltsMeasurementEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = BC90EF11FCA5BE2AA53CE9514C6D77C2 /* FBSDKBoltsMeasurementEventListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D3FDB69E94D5011F42E5F071F006487 /* FBSDKGraphRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DBDE11A9C91339D36AD7DBEC40F7F6 /* FBSDKGraphRequest.m */; }; - 4D882355D675C0A0B2EEAFA75897D69D /* FBSDKContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 96428DCAAF4B29417225913717CD1E6D /* FBSDKContainerViewController.m */; }; - 4DDAF1310DAC048BF45ED1CEA7A70543 /* DistancePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6124B64E1E23E46DB1BD5404ADD9BE3A /* DistancePickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DFBD4B1DDA8A59CD5E89EA82F102A16 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D42362A0618254932DA8C712A79A8C3E /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EA7DA2CB8034EA09F7214C793FBE5E6 /* FBSDKAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = FA53021758B6539ADC518AC42F1B23BD /* FBSDKAppLinkNavigation.m */; }; - 4F42B26397C10A888F9E6722EB5D5335 /* ActionSheetLocalePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E80367343A2A40B3A3FB76CD8ABC906 /* ActionSheetLocalePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F86D108A95272B1C8B4786818D602CA /* FBSDKURLSessionTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 51246240F92AFAC949C48FCE65115613 /* FBSDKURLSessionTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4FA1046559A93D87FD9CDF7E300CC6D8 /* FBSDKDeviceRequestsHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 509F789D15768EF542FBD50AE30CBF87 /* FBSDKDeviceRequestsHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4FE7163B9F3F9CD0D290AA6291F62368 /* FBSDKAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B4B260DBAEBD01C6AA632B221B75595D /* FBSDKAppLink_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5036B2478664077D7CB5DAE371EBA7D6 /* FBSDKAccessTokenCacheV4.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B974FFA1DBCF627B613024A0B6940B2 /* FBSDKAccessTokenCacheV4.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 509726CB1F0C64832383AD492F8CBA88 /* FBSDKMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CAF0C6057F08A8058CA213D0302FCF81 /* FBSDKMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 510553EB83265D0A6A611765D87165C9 /* FBSDKSettings+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F16582658AB351EE776989DCDEAA79 /* FBSDKSettings+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 522AC1434BFC98616B9FC258ED46A18D /* FBSDKCodelessIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = CF6577F280EB889753EA175ED7FC738C /* FBSDKCodelessIndexer.m */; }; - 541F2BE1D5FEC2DEF9F91898806CA329 /* FBSDKLoginCompletion+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 291AF7EAD44E781EC941B7FB34F78E14 /* FBSDKLoginCompletion+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55527BFE70C5FCCAEE1BAB440699C22C /* FBSDKBridgeAPIProtocolWebV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 64CAAF90D30446CEBAF1B9B334105549 /* FBSDKBridgeAPIProtocolWebV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 573AB14F5C5B50B13416243F6ED6C606 /* FBSDKGraphRequestDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C58BCC46F51DA7353969874628C4B0 /* FBSDKGraphRequestDataAttachment.m */; }; - 577F5DB567E46856A38932A6CA2FB2E9 /* FBSDKDeviceLoginManagerResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 6462A9A157D366F6CA07E3BC106BF736 /* FBSDKDeviceLoginManagerResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58B5299D71E7EA6C2FF4117C275D6199 /* FBSDKGateKeeperManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BC886B6053DB4E0413D8CAC86A4581D /* FBSDKGateKeeperManager.m */; }; - 58E6EFB2DAB38671D9AB326C5C410809 /* BFMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0622B457A95985591738FB9450D9F77E /* BFMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A3444B667D82F5801495CB4C9209A70 /* FBSDKPaymentObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 981E2C73531B6E2FFD8F61BD34B2E6CD /* FBSDKPaymentObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C704B83CD1CB8E88225EBD2754E0CB4 /* FBSDKAccessTokenExpirer.h in Headers */ = {isa = PBXBuildFile; fileRef = 75326908F85A4D8A400333305E831D29 /* FBSDKAccessTokenExpirer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CF543243BECEFC1727E5E6A3399F0B6 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB2C7F69FC9D1B66E8B4125E92D52598 /* Bolts.framework */; }; - 5DCE6D1CA3EC21CEC13B9E29242CFD3E /* FBSDKAccessTokenCacheV3_21.m in Sources */ = {isa = PBXBuildFile; fileRef = ED2F76A545059B6CAB1C8A2225E7770C /* FBSDKAccessTokenCacheV3_21.m */; }; - 5DE2A5268271C7C424DFBD1B483D4633 /* FBSDKAppEventsDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1633461013BB3C21FA46A68EA179E721 /* FBSDKAppEventsDeviceInfo.m */; }; - 5E0E15D469BFD8C4ED7A922F4439BE60 /* FlurryCCPA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F04D1897D522410184CBD2FE61F25CE /* FlurryCCPA.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E3F9114FA5B59B1E8198CBFDFFB05AF /* FBSDKLoginButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2CA71922DE0BF1526EB1ACBD0A8116 /* FBSDKLoginButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F56188536467F6871A49AC13551D754 /* FBSDKDynamicFrameworkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = A3B65CFB4F16A8F793920A8750F0F992 /* FBSDKDynamicFrameworkLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6138DAA10E2F0135253943C773616F8D /* FBSDKLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 151CC9FDC5A243318620FB22342DF1DA /* FBSDKLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61C76E507B6DCCBAD633656FFA32AAA6 /* FBSDKColor.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E4D0D14722B48B2C2EF7658A198F43 /* FBSDKColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62CC14C253CB00AFCE0CEE9C7357FD05 /* FBSDKAppEventsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 05355A8AF30ED16B0A0D5C6EE8D8E688 /* FBSDKAppEventsState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63BEFA1DEC784F8B5A755C755EDEB6F8 /* ActionSheetCustomPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ED4E5956BCC80299A5E443A0CF847B0 /* ActionSheetCustomPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6407DD235B291ABFBE96368D56A49EF8 /* FBSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DEA12EF5C950165684A2AC027AFE824 /* FBSDKError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64AF703CA7E8935EDB20759B009E884E /* FBSDKGraphRequestPiggybackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C62C8E05EC1CC14F4CE97AADB2A445 /* FBSDKGraphRequestPiggybackManager.m */; }; - 6545E55F39249E2DCF535D15BA513548 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E5AF7940DA259AA032FB4924B1C8E28E /* Bolts-dummy.m */; }; - 663C27BCD0780D92A5EE9B480DFE645D /* FBSDKEventBindingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 687184D29C8D78E315A53F47C578F391 /* FBSDKEventBindingManager.m */; }; - 671F170B1E8178A0485778D0EF8AF89A /* FBSDKMath.m in Sources */ = {isa = PBXBuildFile; fileRef = 512355757BC6BE380F4C27530403C295 /* FBSDKMath.m */; }; - 67A33DEE3AEB516554397A329188BD2B /* BFMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C884BF315F207C7C6CAB028BEA3A46E1 /* BFMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 694D671B5B74EFD18377FBDC51CFFDEB /* FBSDKImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = B6891AD0D008A4F5D5F7DB812290F44A /* FBSDKImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A2DF74C262D6525041EDBFB85909698 /* FBSDKCloseIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = D20952C01DBAAF3B82E5EC1936B98D63 /* FBSDKCloseIcon.m */; }; - 6A54B01A6C119A7962853D942D609B5D /* FBSDKAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4061E7D60491A09B944A4F31E8830F /* FBSDKAppLinkResolver.m */; }; - 6A55B983D2BDF23F04E79456E8AD6767 /* BFURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F1DBEF0F0191E0EC3E85AC00412566BE /* BFURL_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BAB5426897C8C441B95C9FBC185428C /* BFAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 166795CE9F04E0B04C089E3042E00B8B /* BFAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6CBD31AAF9805916BB5CAAD226A84109 /* FBSDKAudioResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = C59D386BDD7852F1546E09FE91375A58 /* FBSDKAudioResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CC0EA8713EEF301A8F68935281D7840 /* FBSDKLoginKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D15294C277BEED664AEDFA57843DFAE5 /* FBSDKLoginKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E7C0EFAFBFEB3F10AC3281C9A292C74 /* FBSDKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = A14CC7AECE0A29041D98D981179C6885 /* FBSDKIcon.m */; }; - 6ED3073B1BA75DF2E579DF112285AB88 /* FBSDKKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 931EE12175089E07B44BBBFBC73E5376 /* FBSDKKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FF1FB0B86FA129561B45B28D2D80643 /* BFAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = 977F22D13C96D65291324FFEC5A0ED4E /* BFAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 727FBBAE12B35ECC41AA7A21BF886846 /* FBSDKAppEventsDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D1419514FA9967691ED1588B4FCE48A3 /* FBSDKAppEventsDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7403D43793F6E29257A97F9A57FA98A0 /* FBSDKGraphRequestConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AB6DB66D81C0D82351580F4748224EC /* FBSDKGraphRequestConnection.m */; }; - 746AB91ED4ADECD514BD1364B239E9A0 /* FBSDKLoginManagerLoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D2CEAAA3538C4CC362E228832B571312 /* FBSDKLoginManagerLoginResult.m */; }; - 748E1804D7E1DBB8579F680A9446BCD1 /* FBSDKDeviceLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE705FE44A250D816818858D578174E /* FBSDKDeviceLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75479C9F78FC2D5703F6F955AAC142B4 /* FBSDKTimeSpentData.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF50B9B622AA736B7604887332252F1 /* FBSDKTimeSpentData.m */; }; - 758E4738CA636A618E4EC8464C4DEE58 /* FBSDKAccessTokenExpirer.m in Sources */ = {isa = PBXBuildFile; fileRef = 39891CAC0C470CBD62A153553E1AD4B9 /* FBSDKAccessTokenExpirer.m */; }; - 75AB19145D3C68B8DB03E5939C6AB43D /* FBSDKMutableCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = DE563547922236B686E2AA1750E175FC /* FBSDKMutableCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 774220E1FD8E6ABEB514216924496036 /* FBSDKServerConfigurationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D4078AB295448BA055F61827B0858E /* FBSDKServerConfigurationManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79E8BC9D4032F60C836D16483CE4D9D0 /* _FBSDKLoginRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CD15FA3FF31A22CFF45DB5C762CAB75 /* _FBSDKLoginRecoveryAttempter.m */; }; - 7B84A7EB3F220FB5248B01D3A31C2223 /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = EB09E1AF4F80BB0331460DE619242008 /* FBSDKHybridAppEventsScriptMessageHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BB65BEA9B39943A40F0DE4B3F28BEE7 /* FBSDKCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = BBB6631D2DD49C7AC034D8A2F97F098C /* FBSDKCrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C0FF5010BEA0F608AB0D019462683AF /* FBSDKConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0522214880C13536DE8D7C753A013B /* FBSDKConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C2D1797CF66295D7F7E2DD11C4B06B6 /* FBSDKSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC616DB15250AD3E0BA8374A865025C /* FBSDKSwizzler.m */; }; - 7C7D5A0F79491656C13B975F2A9333B1 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E68D46C3D8DE6764212AD440CDE1E1F6 /* FBSDKAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CA0AD9FBBF67B8280E183A3047085AB /* FBSDKErrorRecoveryConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F902009A6A795BE890B2ED07D674E56 /* FBSDKErrorRecoveryConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D8DB802FA469FE2CEC231526F4CC233 /* FBSDKAccessTokenCacheV4.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BDB30DC190C5B57EB4840AD71DAC4C /* FBSDKAccessTokenCacheV4.m */; }; - 7D8DC6A727A36C40BCEE184D8F70DCCA /* FBSDKMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CFEC76C081A9F49D81DBF4CBD9E7C7E /* FBSDKMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E1D26FE680300C8806C666EA6D583EE /* ActionSheetLocalePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 646EF293E15F898BADE450251AEA07A5 /* ActionSheetLocalePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7E6FDA138ECBA7FCFE765F80ED207D00 /* FBSDKDeviceLoginManagerResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 655782EF69CE111E9173A269AF8D29F7 /* FBSDKDeviceLoginManagerResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E81C54E5A6FAF7E71DC95B29EEA84F6 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 397F816997F1E0E23F4ED53DD21E4EBE /* SystemConfiguration.framework */; }; - 7FCB29E11AAA4B05E4E7BC6261BF7F69 /* FBSDKAccessTokenCacheV3.m in Sources */ = {isa = PBXBuildFile; fileRef = 1429C054D28944E8707918F332AD0300 /* FBSDKAccessTokenCacheV3.m */; }; - 800FDD35614483EFB7CF8D15BB6F4590 /* Pods-MAPS.ME-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 943F5E0AB0E3CD68128746521DD14872 /* Pods-MAPS.ME-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8036BD4414D266EEB1CC15636AE3BE8D /* FBSDKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = AD3F1CA24729AD526811393A7E1490E8 /* FBSDKIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81F512A1722266D78628CC65471814FE /* FBSDKMaleSilhouetteIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A8A0FC009D3C8E5B6CB12BFFE0F41A3 /* FBSDKMaleSilhouetteIcon.m */; }; - 82AB767166F2A5771472A4165D656C4D /* FBSDKLogo.h in Headers */ = {isa = PBXBuildFile; fileRef = 13FD70BA3EAAB3FC86A80010FB84CB63 /* FBSDKLogo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84173C1E7C34F7F63E66F05366DDA3A1 /* FBSDKAppEventsState.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B732C148F1B2C11BBFC612B725F84A7 /* FBSDKAppEventsState.m */; }; - 841CD99119298EC7473C65E86DAF57AF /* FBSDKSystemAccountStoreAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DB905CCF523E16EA3A0D75844BA6066 /* FBSDKSystemAccountStoreAdapter.m */; }; - 843BC421728151F13FC4C4979284FE63 /* BFAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3001FEF8392CEB75029022342B7BC6D6 /* BFAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8586CE5B56BFD04F1BD0719B3870F376 /* FBSDKAppLinkUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = A12BC7301DDCC818434F6229EF9FE694 /* FBSDKAppLinkUtility.m */; }; - 8722D20160EC45F5DD786E0762F44A4F /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CE6A5F6D11A5A83BAA28269645C25D9 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87825071C366F02F9C414F404FBFF120 /* FBSDKButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 717E669DFFEA6A050698A7FD0139574C /* FBSDKButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87D16CABD153A174EF38012B6A9A1D39 /* FBSDKAppEventsStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 236EB962749FBCAD7B4C940B9C0BAA25 /* FBSDKAppEventsStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89ADFC991B0DE83D942340C85191C3E5 /* BFAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C663CE95B9933E25C74425A83E237B2 /* BFAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B7109D912478AEFD484A2F779E0EF84 /* FBSDKLoginButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 387DBCD5035C12510D8B70CDA301D382 /* FBSDKLoginButton.m */; }; - 8C29E2389E6F5DB4469B7752EF3AB258 /* FBSDKKeychainStoreViaBundleID.m in Sources */ = {isa = PBXBuildFile; fileRef = 20791A7CEF1431D065B39B9382DCA693 /* FBSDKKeychainStoreViaBundleID.m */; }; - 8C76C8C8CC5ABC525822545A99EF4868 /* FBSDKBridgeAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E24A52BE2B08E3C71430CFBEF90F5A82 /* FBSDKBridgeAPIRequest.m */; }; - 8C76D7F03212DD8A8F6EE1CE9A24543F /* FBSDKLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 371E626C1144C303898D09049BCDFE86 /* FBSDKLoginManager.m */; }; - 8F8D2F81A79D6A614004763731770121 /* FBSDKAccessTokenCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = CC57B06F6DB15A43FB0CC5C4DDFB7CDC /* FBSDKAccessTokenCaching.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FDACDF0E1DED05189FFC2B4CB89E073 /* FBSDKAppEvents+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = EF2F8847A8B1DD381AAAC9872EBD2DEF /* FBSDKAppEvents+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9050E939BA0F6B2FBFD1B777DBE13E88 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */; }; - 90EB0937F084F8BB9F39C972567DDD93 /* FBSDKServerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D2892B4A0C855C81FECEDEACB6A642 /* FBSDKServerConfiguration.m */; }; - 91A86F111D1DF064A1A6ABD11354B068 /* FBSDKLoginTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = E7865D2BAE6F7E9886723B69688D9BCB /* FBSDKLoginTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 928794E199CCE0D68408EE7910502AB5 /* FBSDKServerConfigurationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 891F751CE2E16BAC69EEB275A700463C /* FBSDKServerConfigurationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92A558D3F65DCFE0374E479A33207B06 /* FBSDKEventBindingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 55BD48CF0976F0D629CF8F3A2D9E2952 /* FBSDKEventBindingManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9347336BE95F960A745C9939D8D90D7D /* FBSDKGraphErrorRecoveryProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DE7A3BB2DD96878505C8FEB1E5E3DA7 /* FBSDKGraphErrorRecoveryProcessor.m */; }; - 93AF52726896C0563EDE613C7078D1A5 /* FBSDKCodelessIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3600395EDA60A8AC48E570A82F134AE1 /* FBSDKCodelessIndexer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94A456877C10BECF3881099BF8EACE8F /* FBSDKDeviceRequestsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C9ABC0E579B7A45DF838CCD07459F8F /* FBSDKDeviceRequestsHelper.m */; }; - 957371142A9FD91EC2F75BD37FA17881 /* FBSDKSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = DA04A1779AF1B2F60EA8E2C7A1E4988C /* FBSDKSettings.m */; }; - 9584AD03B1B97830D2F066D0FB6132E2 /* FBSDKApplicationObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E2606D0DBAA77CD08B9D0ACD1FB9CF1 /* FBSDKApplicationObserving.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95B0B3BB6B107648383F19B4E87B6440 /* FBSDKAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFAECCCCA97AA0A31B06F4220C0099F /* FBSDKAppLinkReturnToRefererView.m */; }; - 96148033E3C745D236932B17E6D15D2B /* BFWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 897218E980FF3DF36DE66BD3C54E5122 /* BFWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98E42B76428E08DB5DFF9190A70443F9 /* FBSDKViewHierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 60C2CF737E2123B43B6FFEB26B3B6066 /* FBSDKViewHierarchy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A7D373ABEF60EEF0C81EFD1CA7A0930 /* BFAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = F3EEFC16834698B1998D82466DDAC947 /* BFAppLinkNavigation.m */; }; - 9B534D1930CE25D36AF3C3918A8C7636 /* DistancePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C78A208388AAAFF4EC64B73868970DE /* DistancePickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9B8B53EF72C804A9EB556A24C112EB8C /* FBSDKServerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 673B55FC01C20C6761DBC8417C1710E2 /* FBSDKServerConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D1D8B0B58436FE71F570F1BCAAFFC1B /* BFAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8879DF3A0DB656AFC93E4A4F3483EEA0 /* BFAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9D535A048A97D75464B6F45C011B0898 /* FBSDKTypeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB847612E92CD22E5A1E3065BFFAACC /* FBSDKTypeUtility.m */; }; - 9DCC14D4925D13E71AE9EE0C94D0221A /* FBSDKAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C9CF4AF4E2C437FDA3A35B53B26C0B5 /* FBSDKAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E77303F503B86EAEB5E4776B3B43FD5 /* FBSDKTriStateBOOL.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B37682E9D9C11E9C16BE58B0196F379 /* FBSDKTriStateBOOL.m */; }; - 9ED70144DC93B73FD92F5B900DA44432 /* FBSDKPaymentObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E57488BCDFBFF5B54337D11564335DA /* FBSDKPaymentObserver.m */; }; - A0E7EB291A2EE4760723192D4E887F91 /* FBSDKDialogConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EBD397C3455AEAABE02E4DCEF3A3450 /* FBSDKDialogConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A25E71DD4B4C0D791A1923DCF2CB3204 /* FBSDKURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 12E53CECEC9E7CEA316A4DC003E28E68 /* FBSDKURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A2EC19BFE6EA84EC71246266D422F722 /* FBSDKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A2A56AB3123CE826FBF233BC5425BAC /* FBSDKUtility.m */; }; - A2EF899BC769BEEE288479DFF2772F41 /* ActionSheetStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2EF1CF8AD5E3113651553975D9B843 /* ActionSheetStringPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A302B5CF5A25C057ED052CCF8FD46B2A /* FBSDKLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C96196055420ED4E579156FAB97ED30 /* FBSDKLogger.m */; }; - A3638D268EBB7CC71DFDA8CCFB0BA1EE /* FBSDKLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DCC887CE6973920D74ADDE45D17BD6A6 /* FBSDKLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3C941B39195C129893BAF39D06E7DBD /* FBSDKLoginError.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B736F1CEB5763DFEA3C6C64B594F368 /* FBSDKLoginError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3EF9F598D5CEF282D11BDF2BA216452 /* FBSDKErrorConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB1BA1C2F137C728ADD9397FC9C9A3D /* FBSDKErrorConfiguration.m */; }; - A3F568CDD9E9F47089D312D2BC050E2A /* BFURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 46352D1AE2392EF5F1CDE42D8E19C948 /* BFURL.m */; }; - A4A9067F0B8D658E12DAB186479D26CF /* FBSDKCoreKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D367A3750BEF207FB4ABA14A0CE61484 /* FBSDKCoreKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A62562A26B23FF1BA8CAEB554F0C339C /* FBSDKUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C84121CE7E6AAA75826ECE2E775AEAC6 /* FBSDKUIUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A66A118899103E779CAF09A4A8DF6E71 /* FBSDKAppEventsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB53F21CB69600BCB460870231668F3 /* FBSDKAppEventsUtility.m */; }; - A6AA3966E3FC4FF7F0D03F23D2F32AA2 /* FBSDKLoginError.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA0DF2B66E0F540715E78381CAF4DC /* FBSDKLoginError.m */; }; - A9212805D7438FDE213D02E9EB547CE2 /* FBSDKLoginManagerLoginResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF9F850A0DBB0435D6C58167951BD97 /* FBSDKLoginManagerLoginResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA2E43D76012D0355AEBE42D2BA151E5 /* FBSDKAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = B132B60130D4AB549671B21875705C13 /* FBSDKAccessToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA6C453F379126F19C0A6D784CEC77D6 /* FBSDKWebDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 293CF7949369D2AFAD79F6959DA84D37 /* FBSDKWebDialogView.m */; }; - AA9390D11C08B2ACE888D0F5199FF3BF /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */ = {isa = PBXBuildFile; fileRef = BA459E285EAE7AC34C7AEA07F14BFBF7 /* FBSDKBridgeAPIProtocolNativeV1.m */; }; - ACE6AA65AC669A5C047369D549D99797 /* FBSDKLoginConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2122032FC598AF29E7E4C0DA156D95 /* FBSDKLoginConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD0E1747EB6E556E8D354DFA08AF0050 /* BFGeneric.h in Headers */ = {isa = PBXBuildFile; fileRef = 19D3FAF20AAEC199AD3CAA2263027AE8 /* BFGeneric.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD71FD5D10D93A7C7C699138D1761828 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 020236ECB8EFACF5ED33285B9354DFDE /* BFExecutor.m */; }; - AE65793AB6092B294BD98A289765D700 /* FBSDKTestUsersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF207ED8247D83896CF56E1B493A9DAB /* FBSDKTestUsersManager.m */; }; - AED378BD18D92B2221C5121954D28E20 /* FBSDKAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4304E316990384DC53590880112239 /* FBSDKAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF85AD4A7EB2F9E0540339115B3C46D2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9737384FAEB34B531C7345A73204F001 /* UIKit.framework */; }; - AFA095E91DF80E201A836503F6CD53D8 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = B6CCD2D2BFD873129B257051DC070FDB /* BFTask.m */; }; - AFE65CBADAE0055A087B4BCE9FD89703 /* FBSDKBridgeAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C92E5176104A3F946C6465561A20B62 /* FBSDKBridgeAPIRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B03625A70EB62172C2D78133BE00A5CA /* FBSDKWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DFD23645C817EC77AC6A48D6C64DEF5 /* FBSDKWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B0D0A049C2B8890A952281765F6E5B60 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */; }; - B192552C493DF252BB8770D3F696603E /* FBSDKApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9043B73549ABF8BA20A632E162A296F /* FBSDKApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B2683A7C5415A0B9DBE2C2FBAAD53753 /* FBSDKGraphRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E80A1310D1D0F7612656300142BE5715 /* FBSDKGraphRequest+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2B23F791ACF16B606FE2AAD18327DFD /* AbstractActionSheetPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 06ACBF01504EF7D75398A4EC06168725 /* AbstractActionSheetPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B3D6DF744ADE53B035EF51C5AECDE204 /* FBSDKKeychainStoreViaBundleID.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CBD9CBE86589E34A029F1E0C1E177A8 /* FBSDKKeychainStoreViaBundleID.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B40FB964A33670827C695C1686470D00 /* FBSDKAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = 8506E4FF1AA656AA309FB5FC480BA679 /* FBSDKAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4B8758C84E6F1DBC7C66CB55755BACF /* FBSDKMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 69E0EFAF4C6EADF335E37E63918BCD5A /* FBSDKMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4F3182206C3B8A874CBF81B933D38E8 /* FBSDKUserDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 79382CBC9BE9E52075A8C13D29DD17AE /* FBSDKUserDataStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B705A3CC640DF32FAB087E560A539F43 /* FBSDKServerConfigurationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF419DC01070CA2D0CC8EEA2F13F20A /* FBSDKServerConfigurationManager.m */; }; - B8F9A6922C4037F0639BDB89E9D93A2B /* FBSDKGraphErrorRecoveryProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = A6EA2293CA71AD686F997AE0596F55FF /* FBSDKGraphErrorRecoveryProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8FD9AFAE0B3C703E1D5A40E9C27E42E /* BFURL.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0ABADDE923230CEAD0D0093F65AFF7 /* BFURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B92631A34B393D85909D1850855F91BC /* FBSDKProfilePictureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 653E6D85C23E362211925654059B8D43 /* FBSDKProfilePictureView.m */; }; - BAF168A84ECE353258270601CD112A75 /* FBSDKGraphRequestMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = BFCFEEED11F100F8357B1CADC2E56BE3 /* FBSDKGraphRequestMetadata.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BCEB3F3AC001CF204BC21BAD79AA73F6 /* FBSDKDynamicFrameworkLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = CAD1C6C0686A542642592B37DABD9DB1 /* FBSDKDynamicFrameworkLoader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BE420C3B3B75B160F254287758A606B3 /* ActionSheetCustomPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A923E23237A741C96AE063BDE9C5E3 /* ActionSheetCustomPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE9144253BEF7ADBAB00C386E5F8DD28 /* ActionSheetStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = DA707D91E00FB28CDCF7BA31E36D07BA /* ActionSheetStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0402D89B9FBB83740F9699072D136D6 /* FBSDKBridgeAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A0AFEBFA4688FE7EFC07E211CFD148 /* FBSDKBridgeAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2484B47CB997E307D840CE1FA9EC351 /* FBSDKAudioResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 71EE10D368749405E4B7D1E53714A8B4 /* FBSDKAudioResourceLoader.m */; }; - C271BD7CB97D8E5AC5B253F5E97784B3 /* FBSDKContainerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F0823A69F44BF3CE3120BAA7D699233 /* FBSDKContainerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C355C18C7B80C7A1340D423E3329BFE0 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39C23125074272BAF2E843D769ACD19F /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C36A59F0C45FB5EB77B24B5683F2495A /* FBSDKLoginManagerLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5260E2319B708E10330EE4051300B324 /* FBSDKLoginManagerLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C41FA6C38085BD053D54514C75D0425A /* FBSDKLoginConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E14015DAB75B759E3A5DDCEEA319A1 /* FBSDKLoginConstants.m */; }; - C436933A3D55576FEDB2AC6A08A4EDC7 /* FBSDKSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C5C2F35DC0AC8D035C3967408C85EF /* FBSDKSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C54931F60BD1A00FC404048CC1A03F20 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */; }; - C809C91B427A09A2D04B371DABB1134E /* FBSDKErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2ADB5E5590EF2BC9A5AB05ABB3599C /* FBSDKErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C907C0676DE8398C4E84D1328C286B99 /* FBSDKColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9254E7D40235B4A329F61E2C1C453283 /* FBSDKColor.m */; }; - CA2F02EE3D7FF0CBD732FA22BDE7C9EE /* FBSDKBridgeAPICrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = F87E4B000DD10E71BE61D4546AA0EF1C /* FBSDKBridgeAPICrypto.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBAC9FDA2312FC1FEA9008C86B10150B /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 873DD00D8A8ED6AE54A6F907881156C8 /* BFCancellationTokenSource.m */; }; - CC285CFB2ECF6BF4615B0F1F3EB09977 /* FBSDKWebDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9039AF91F1ED6A4CD26E6586EC943E8D /* FBSDKWebDialogView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF35A9A3F2FF6F46C2C4A430035631A6 /* FBSDKEventBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 253CCE4C399D4670DFC89522D538047A /* FBSDKEventBinding.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF534186ACDEB6EA26B014F3CA0D0E12 /* FBSDKAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 38A6071340F2AD1485FD59C08506627E /* FBSDKAppLink.m */; }; - D0C57751555538B8F7926B49ABA4AAF8 /* FBSDKErrorRecoveryConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 58A6CFE907D08D996DB817C6309ED56A /* FBSDKErrorRecoveryConfiguration.m */; }; - D174F8CE70D18D1904F725D75249EFAD /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 81C9809FBD44E86249CDE0FC5ADD6B60 /* _FBSDKTemporaryErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2946E16CA9FA73C84FEF1FC245E95C7 /* FBSDKMonotonicTime.h in Headers */ = {isa = PBXBuildFile; fileRef = DDCE488EF816ABCE4222DA5C69CFE513 /* FBSDKMonotonicTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2F86D32FB0ABD88768DC859427BE8DF /* FBSDKAccessTokenCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A1E458C395E23F7E744D5495E90E0C8 /* FBSDKAccessTokenCache.m */; }; - D309229F43D15B9BB95D2D43FE6EB3C0 /* FBSDKBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 190080798C06F59D5509354F139E74C8 /* FBSDKBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D32A1DD9868864E844603A60A5572659 /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F24AE9432C17B8C178FB43A321BA301 /* FBSDKCoreKit.framework */; }; - D347D2D531C0DAF090792446DA63BD80 /* FBSDKTimeSpentData.h in Headers */ = {isa = PBXBuildFile; fileRef = B08D69E50896F2AEDD180CB6BE52D9E1 /* FBSDKTimeSpentData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D406844371781C3D90359F16C223C26B /* FBSDKAppEventsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF42242B27B5B9D61765395EADB466B /* FBSDKAppEventsUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4DE697761EAB1BFB758488E0ED62C66 /* FBSDKEventBinding.m in Sources */ = {isa = PBXBuildFile; fileRef = A383F44BA001ABB04A819C02DF57E64C /* FBSDKEventBinding.m */; }; - D535375D3EE13CBFB65842A4269EBBC6 /* FBSDKURLSessionTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E090E7E8C52D72FADC539CDFD08C98F /* FBSDKURLSessionTask.m */; }; - D5963D53AE06B777B1EF1097A73F3C7F /* BFAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3C238E4FC3820CD3793D337A9E2AB9 /* BFAppLink.m */; }; - D5E575E32622E749BE6DE64C04FD4201 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = DE9F5904080F117322672612BF55C15D /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8FBF90A13D05FA19CAD9A3F95117E4B /* FBSDKTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 15E90F80DBC1AF881AF1C691DC74F526 /* FBSDKTooltipView.m */; }; - D9B324781984F2FCEE3D452A3C5EBA26 /* FBSDKCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = C665CD5066F2A0D820364040452DA722 /* FBSDKCrypto.m */; }; - DE6D300B0EF8169A7AB45B11D3E6D99A /* FBSDKLoginKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D1882C799FCF7B8AED3FC027C9FB0B /* FBSDKLoginKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF998104BA4737B39320FF0A3EAADC78 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FBF373133D0002E964D92E37EF330C /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E007CAE2FE8029E29A3762ACA4C94FDF /* FBSDKGraphRequestConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B465DDB4BED6B5252D745252955F24E /* FBSDKGraphRequestConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0FCA8D7B91B178D0FCD49E5BA7C39C4 /* FBSDKKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 081A457A95C15D3A2320B5A97F082618 /* FBSDKKeychainStore.m */; }; - E1EC757A331DD3DDA144CC01B3A8872A /* BFAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F63C6C9990D6C047F2147B8C6494BB /* BFAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E26FEC03EC46FE391B0716507CEE0254 /* FBSDKTriStateBOOL.h in Headers */ = {isa = PBXBuildFile; fileRef = A1E305C0CF0C363D50E645BD1D70070A /* FBSDKTriStateBOOL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2C0E30B2A80D87945A34233065E8EBC /* BFMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 3456949A7F2D1CF658DBBAA020061E9E /* BFMeasurementEvent.m */; }; - E2FFC98DD455380139D3CFCD79F5EDBE /* BFAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = A96839831799065C39F89283D0B5364E /* BFAppLinkReturnToRefererView.m */; }; - E3569988B4E499DB02876C9B45936D1C /* FBSDKUserDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C56519C545DCD04305A4113D85250DF /* FBSDKUserDataStore.m */; }; - E39B48EF5E543B48A32CC6902D3E460A /* FBSDKBridgeAPIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EE37B60CC7035D4DD2F14268749F5B0 /* FBSDKBridgeAPIResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E53D9952C2FEEEF0FB01DEAE0584E350 /* FBSDKBridgeAPIProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BF02C4D15D2E8681832A2F37E54E91 /* FBSDKBridgeAPIProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6FAE396BDF482CD3B90AE8C030D1801 /* FBSDKDialogConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CC5790763BB5D96CA469E21A92C3C18C /* FBSDKDialogConfiguration.m */; }; - E7F82883E5335F6B8AF1F96C3E072F2A /* FBSDKLoginKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D0833FB4A1A7F86D46B3E78D76D858 /* FBSDKLoginKit-dummy.m */; }; - E807CA8FB670BC70E557C3E741AA285F /* FBSDKButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B93B0AC4ED35FB5C2185FA96ABFD56F7 /* FBSDKButton.m */; }; - E8C754209461D202CDE0BB3CA1703CDE /* FBSDKInternalUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F1FBD741D30CD330E9978EC95D62F4 /* FBSDKInternalUtility.m */; }; - E9860A6E2AB66B82E50086491B0448AF /* FBSDKAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 26DDB9816CC403AC351F27E41A8D6F5E /* FBSDKAppLinkTarget.m */; }; - EA54E24E37FD28BE0F059B0DEF66C66F /* FBSDKDeviceLoginCodeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2924640E63F8FA66D70A88B162447C8F /* FBSDKDeviceLoginCodeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA607198F03AB0FB585B195B884E0F88 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = F5142241EAD0FBBF0DF46A5F3EB2F447 /* BFCancellationToken.m */; }; - EB982333B03E1C95FB20EF642A6A849D /* FBSDKErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 287DAAAD5D04AA47037CEB5D7B05EEC7 /* FBSDKErrorRecoveryAttempter.m */; }; - EBDAAC646E118366895D9B3EBE4DD444 /* FBSDKServerConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B20DF7FD027473BCD9A0D23FC6AF10F /* FBSDKServerConfiguration+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC14CBCBD39FC34A6D85A19E5D414972 /* FBSDKViewImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 140F4D403CAD01805386B3EBD621A4C8 /* FBSDKViewImpressionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC9B1C7762F0308ECAAF72B228B6648C /* FBSDKGraphRequestPiggybackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED66F6D2A7E147A229EBDDC2E7317A12 /* FBSDKGraphRequestPiggybackManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECD7C1DAE15215DE2889F4C2F5C15FBD /* FBSDKBridgeAPIProtocolWebV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 28BA135E77A32F4DD5697CFD5080120F /* FBSDKBridgeAPIProtocolWebV2.m */; }; - EDA967303B255FDA6039C94314D0011C /* FBSDKGraphRequestMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 85C09C031B45D0FF83FDB0ABE66512EF /* FBSDKGraphRequestMetadata.m */; }; - EE11B00CF235207D3FC3B89690FA92D4 /* FBSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D27A71A558C0AAAF37C50B95951EBFA /* FBSDKError.m */; }; - EE17C766042CFEFAF58237F524639898 /* FlurryEmpty.m in Sources */ = {isa = PBXBuildFile; fileRef = 91659F87DE3BFB23EBFD9576F935C516 /* FlurryEmpty.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - EE34160F1197D498BE9657C9F9A06378 /* FBSDKGraphRequestBody.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B7B49A77B48F6709DDE6DD6AA697B3 /* FBSDKGraphRequestBody.m */; }; - F2DB1B26B70B28CE3FBF2EE1B2A9DFA4 /* FBSDKLoginManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 02165857BE0FB8880CD5A2A74E0B2480 /* FBSDKLoginManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3577C339FFEE45C7A7B5FB6AE1907FB /* FBSDKCoreKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B42175B4B133CEEF2E2910EF36C886F8 /* FBSDKCoreKit-dummy.m */; }; - F5D66502512DA9FCCD18CD6B5C5B000D /* FBSDKAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B90207BEC884C97690334EBFBD0534 /* FBSDKAppLinkReturnToRefererController.m */; }; - F7C9204B77F3570D19F2088CB855E1C3 /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DA9E32F1CD0E50DC2C2A3D575C5F2CF6 /* FBSDKHybridAppEventsScriptMessageHandler.m */; }; - F7E70B83F7C654498F83BA0D5E34662F /* FBSDKSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C77263563DABA7693EC0FB7452EEC1E /* FBSDKSwizzler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F87C28247D0D77360C235EA063CC6EA6 /* FBSDKLoginKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF09EEA21F6DDD0D3EFC3A06FC8D010 /* FBSDKLoginKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA3AE69823D9862377338B6AB33A51DE /* FBSDKURLOpening.h in Headers */ = {isa = PBXBuildFile; fileRef = 999268151A0BC4C534E288A80124B458 /* FBSDKURLOpening.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA4821D3C8D0C0587762BC94D1E5ED61 /* FBSDKProfilePictureView.h in Headers */ = {isa = PBXBuildFile; fileRef = 95C72EAAC81656E01B58E91AC1711C64 /* FBSDKProfilePictureView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FAF34B394AB181F19CA25F46E68E8AFC /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CBEDB8EC050D90AC526E85A17F7A3BA /* _FBSDKTemporaryErrorRecoveryAttempter.m */; }; - FC1367FC564AA395C75292A8179B20B9 /* FBSDKAccessTokenCacheV3_21.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E68692D5CB35BBD3687C725A982CA46 /* FBSDKAccessTokenCacheV3_21.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FCC372CC88EEB6C68CE7B1E4058ED542 /* FBSDKGraphRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B8524ADAA97390D0C03E2E5CFE18530C /* FBSDKGraphRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDBE239A028CA466179E98952F8C0737 /* FBSDKAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F26E7650F2224D6DB4CA28DBDA0AD77 /* FBSDKAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE7D1DE9256CBBCF957D595EB7289163 /* FBSDKAppEventsStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CCB42C080C545A89A4AEBD0961C07F27 /* FBSDKAppEventsStateManager.m */; }; - FF7150E2BA00315E9FCEBFE777C960F6 /* Flurry-iOS-SDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 928D3D0F98F394883D145EB7357C3597 /* Flurry-iOS-SDK-dummy.m */; }; - FF83C21198A892399F2F1B53AFCDB16A /* FBSDKInternalUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = B84382A96A8D602495E9D29D076CDEC3 /* FBSDKInternalUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FFE4A96678CD06FB12FF58ACCEFFC053 /* FBSDKDeviceLoginCodeInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E893E3C5909847B55AF7AFFE4C2F6B90 /* FBSDKDeviceLoginCodeInfo.m */; }; + 0039E09ADEE2326361537DC7FA3D8055 /* MPRewardedVideoConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AE1E4C17D0B33DA5409493330F706E6 /* MPRewardedVideoConnection.m */; }; + 0042C88D790B3286BCB23649B064EBE7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E21BEE5051D43121C303FB2B7F567FB0 /* Security.framework */; }; + 007CCB849A6D2684A1475A3FF59ACFDF /* MoPub+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C6F498BB183C38DB09455DE873C87B1 /* MoPub+Utility.m */; }; + 01B0121F6A843D327C7DD19A8550B598 /* MPHTTPNetworkSession.m in Sources */ = {isa = PBXBuildFile; fileRef = C427B24CBD516E150F32E5EBDCF96D4D /* MPHTTPNetworkSession.m */; }; + 02036FBA7E928BD9C94C83F09882FDCC /* FBSDKMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E1B8A562A11132560B57A87A901AFE6 /* FBSDKMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02479249D93077FD40359F71214A8616 /* MPRateLimitManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 80CFC130948D54FEAE8418992ED017D4 /* MPRateLimitManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 027BB2C5CCEBDB80C6822E36DEE1BA52 /* MPHTMLBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = CE17E3F5F6250B447A8F1FC5F2B2A7DD /* MPHTMLBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0281F807A152904DD8C509EEDE5F42F5 /* MPStopwatch.m in Sources */ = {isa = PBXBuildFile; fileRef = C1864D080BCBF4477766525ADB47E824 /* MPStopwatch.m */; }; + 028C4B11D216075A9E6EED4EE54E2450 /* MPConsentDialogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 57657C36A5C493F8DBDEAABFE8052B82 /* MPConsentDialogViewController.m */; }; + 02D6BE88EA1FF9B5DBB7A95CC4314A16 /* MRVideoPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6FE5FDD0AF11FDD40CEA9FB164967D /* MRVideoPlayerManager.m */; }; + 0347A9EF4480EAD9A84CEC76BEBCCD0A /* ActionSheetPicker-3.0-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C881AB522540518C039D9187ACC4501 /* ActionSheetPicker-3.0-dummy.m */; }; + 03936525CBDB647A066F8859E65F8752 /* FBSDKTriStateBOOL.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BDD3551ECF58D3B8B435D6F1528D9A3 /* FBSDKTriStateBOOL.m */; }; + 03C0E5FB2AB2F1D6480CEB0BE991A304 /* MPHTTPNetworkTaskData.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D7D711FA0FA48C30FAFC67D3AE42B0 /* MPHTTPNetworkTaskData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03FBA65275AD20310821AD847098FFC3 /* Pods-MAPS.ME-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AAD6432F9CBA054F5118361E3C552BC /* Pods-MAPS.ME-dummy.m */; }; + 049B98A3ABBC0834BC9BA0B940D90B03 /* FBSDKLoginManagerLoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 04C9CD6740293544F80A69E6BCEDD8FF /* FBSDKLoginManagerLoginResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04D2F30AE358360915EF87F0F19B7362 /* Flurry.h in Headers */ = {isa = PBXBuildFile; fileRef = CAB1577C028A7FE2A14418BB27C0E9FA /* Flurry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04DBC6643BB85A6CEA1279F44FEEC88A /* ActionSheetMultipleStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 579C168BFEA5C0805652CA990022B175 /* ActionSheetMultipleStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05205A059452CA8CF8FB9E65DCDC8A1D /* MPClosableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4235D763C60A8DE4E97CCEE6D785D963 /* MPClosableView.m */; }; + 05B66668376E3B6583BB39057CE779AA /* MPMRAIDBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C178B64401709715C2EBE85FE75D9003 /* MPMRAIDBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05F6342D4EE6CAF292B47FAA6131AC32 /* MPAdImpressionTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 941C88C2FEC2970BE2B32AD58E11D142 /* MPAdImpressionTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 061CB4926C6631FC347A3D7FAE733074 /* FlurrySessionBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = EDCB994AC630ABC7B6EEBF4237250AFF /* FlurrySessionBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0647ECD3719029CE0C841C220436BA72 /* FBSDKAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = 09327E6DDF5E29BB25D7AE9379B0712E /* FBSDKAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0649C16976B8D4918A7936821DA76117 /* MRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F3DA677D40DB7A271E6C2F2ECAC540FA /* MRConstants.m */; }; + 065AFFB7C4A2C242CC11CC4FF8B6856D /* MPAdapters.plist in Resources */ = {isa = PBXBuildFile; fileRef = 766C7AB6ADEE7A78360F8C74D2ABFEEF /* MPAdapters.plist */; }; + 067AB334180356C16BBDF4A981A2C8CF /* MPHTMLInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E8409716AE9F73CB937ACFC120B127D /* MPHTMLInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 069F8228C062FBB9CCCE5DC6FBA298B8 /* FlurryConsent.h in Headers */ = {isa = PBXBuildFile; fileRef = D814186BBA59DF50A4A5DE72D6A4B403 /* FlurryConsent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07BFD497B7C2D4399F075A407D248ED9 /* MPMoPubNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB93924CE9E764DA3D08C5277759391 /* MPMoPubNativeAdAdapter.m */; }; + 08B610ED7F74EAE851ED79FADA5C6F65 /* MPAdAlertGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 90E111B49E196997025FFB72D808704C /* MPAdAlertGestureRecognizer.m */; }; + 08E26B0F04957B7F250B7BD9E671E4DE /* FBSDKGraphRequestDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A452FF8A270BA1ED5E94B88CA860C37 /* FBSDKGraphRequestDataAttachment.m */; }; + 092CE72389BDFA1A1B7B2AFF8816AB17 /* MPURLResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 166A802457E735F98DF54B4BE2379548 /* MPURLResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 097FCFF6FA371ED473D71C7CD9029CDB /* FBSDKButton+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = CBA48A2C64DD48079ECC6F8CD55E8135 /* FBSDKButton+Subclass.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0982C4FA8482BE107C2AD3D9BBE7B5DA /* MPNativeAdConfigValues+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CC2D1B77AAEB0065EBFEED89B820F53 /* MPNativeAdConfigValues+Internal.m */; }; + 09B219D7B8DB72868B145A5FEB6A9398 /* MPRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D2A15FE487B02D9FE21E5ECC4DE16B /* MPRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BB2A6FF34D8ED0616B3D43A7E78CADA /* MPReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = F5EC29A86D037F510754CCE7E3982C97 /* MPReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BC6370DEE3FB1B8928653BBB0523B81 /* MPNativePositionResponseDeserializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E4320D71CE55CD9B43324AB45988BC /* MPNativePositionResponseDeserializer.m */; }; + 0C49F67A52B917B739AA72462B9D7C59 /* MPVASTWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 637A5C36C92BA6521561BD9E974D314A /* MPVASTWrapper.m */; }; + 0CA12EDFF5DB3C9D582C34AA2AA819AE /* FBSDKServerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = D32299C749DF7BFF728B728301B3A5D7 /* FBSDKServerConfiguration.m */; }; + 0D281BD5E830E4F4532F6BAD4B64B730 /* FBSDKGraphRequestConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 26A9A4E86612A59822F002709138C744 /* FBSDKGraphRequestConnection.m */; }; + 0D6E15E0DB6231B6CB8394ABED1CA848 /* MPVASTLinearAd.m in Sources */ = {isa = PBXBuildFile; fileRef = E36B25228BC0DC50CCC60BE52D32323F /* MPVASTLinearAd.m */; }; + 0D720E64D98BB554B2DCCD441218AE3E /* Flurry-iOS-SDK-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1116050AE20859D0A7B220F9CD014B3A /* Flurry-iOS-SDK-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E06F5DCF13DD9168D996070D4940CCF /* FBSDKAppLinkUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A24C0C508378034E4E1371124142472 /* FBSDKAppLinkUtility.m */; }; + 0E67AB248831B8C1F61E714725669B86 /* MRBundleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBD2D32630CA781CC20C04A92C9236C /* MRBundleManager.m */; }; + 0EAC2B34822ABC3E8AC2853B6F8073BB /* MPMoPubAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 74F552E1E440350F05EA7055DDC2922C /* MPMoPubAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EFEF5122A9C5D5086E34768C259119B /* MOPUBAVPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C0E3EA2E26CCDB8303300E9DF6D5A592 /* MOPUBAVPlayer.m */; }; + 0F2C3F1663A541C4B95F63121BB34584 /* MPRewardedVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = B179DF24E9073802CCE5A7311F0998C7 /* MPRewardedVideo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FCC22129D09EA37628E3B2D2B251FC2 /* FBSDKWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C643911D8D47E461771483B0A88E7B2 /* FBSDKWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1051848A2FF7B251B19671377B430AA5 /* MoPub_AvidVideoAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E2E6CBA2387E0533F9AFD73FCCE76D6 /* MoPub_AvidVideoAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10EA173E8FFB7EBB2266DE91BB1C8E40 /* FacebookAdapterConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 773710B81CB202A90E80BDB8A879F03F /* FacebookAdapterConfiguration.m */; }; + 11A283A7AFE0AB48F20E4AE028DA30FD /* MPRewardedVideoConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E1A040CD6DDA17C872083C354AEF1AB /* MPRewardedVideoConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1212CE4EE0D7E7A1F51C0B5D5FD54B74 /* FBSDKURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E51F09A31E9D9EFFF62AB77320C9A7B /* FBSDKURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 12AD1BD5AC64F2739337DEEA9064C1AC /* FBSDKLoginCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 38376D3B82C716A08B008B8F11A93C8C /* FBSDKLoginCompletion.m */; }; + 12BDA19B8F5988560B08BAD4F26B664F /* MPBannerCustomEventAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = AF983AE41C46FAEDA89714A4FDE68309 /* MPBannerCustomEventAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12D05BFD81323934F20BFE6F51B84204 /* MPExtendedHitBoxButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 93351F1223E5FB869A9CAF199D8FCA01 /* MPExtendedHitBoxButton.m */; }; + 12F57499FCD8F1F56244CCB1A7ABE2C9 /* MPBaseBannerAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5525CE4FEA2981057A060682417208C4 /* MPBaseBannerAdapter.m */; }; + 12F9C731955A1B386C05ED94967C924E /* FBSDKUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B50E3AE357D160D9341636DBEA54A11 /* FBSDKUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 131664ACEF880A9531E746ADB96E40CC /* NSDictionary+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 97D5DA84FDFBC09323EF4F7FF9A504C0 /* NSDictionary+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13364A17E7B7C323109E627B73322A24 /* MPVASTModel.m in Sources */ = {isa = PBXBuildFile; fileRef = ED75C2B3EB6E4E481C1DAB1CB9DED0B8 /* MPVASTModel.m */; }; + 1344FE3054FC3C851574D977345311DA /* MPVASTDurationOffset.m in Sources */ = {isa = PBXBuildFile; fileRef = C532AC8F01A34C2DD3B73C4097AABEC1 /* MPVASTDurationOffset.m */; }; + 134AA5B629BB78F388716D738D6160DC /* FBSDKLoginManagerLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E0D62C64D687B3945D353745E944929 /* FBSDKLoginManagerLogger.m */; }; + 135D1B9921EB8B067249A09A01236335 /* MPInterstitialAdController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E361C5F49EACC4BBC77F3D98D69DA14 /* MPInterstitialAdController.m */; }; + 136233974C5D4E8F2012524DA316F643 /* MPTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CCB325A1CE8DF3EEFE5256301B436FC /* MPTimer.m */; }; + 1392887D80328361C0E43DEFDEC31920 /* FBSDKUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D38D21E25BDF933DF115562F2A6E4B /* FBSDKUIUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 13F5D67C775733024B54D3EC30C0D066 /* FBSDKAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 73E6C17FBC6638D3A542A66A1AD6630F /* FBSDKAccessToken.m */; }; + 144DF0AB0A14BDBE9EDDB1DEF4050347 /* FBSDKLoginUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = D2C9CBCDE0C9624781FD87969E7635CD /* FBSDKLoginUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1469FBB91C8E8C656CEB5A04FF78C13E /* FBSDKContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3951616A4E1DA7BF2D4258FA666E94 /* FBSDKContainerViewController.m */; }; + 155F5A6421D431B51973BA007D4B659D /* FBSDKCrashShield.m in Sources */ = {isa = PBXBuildFile; fileRef = B453A37DA13C77AD2A29EE340EB6D036 /* FBSDKCrashShield.m */; }; + 15B102778D89BA365100413827E7FE84 /* MPRewardedVideoAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E47EC2BE49A98F564CC54B5E7384683B /* MPRewardedVideoAdManager.m */; }; + 15D68923841A739E95076DC623A44DDC /* MOPUBActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = AAABD478B43516AC833BB4C14ED44DFD /* MOPUBActivityIndicatorView.m */; }; + 15E0F79DFD3F8F0C85EDF2F90E48E1AB /* MPClientAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7498E97EF1E6C6B9D3E526F6FBCD68 /* MPClientAdPositioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 161B36DA3C59F4B19DFA1365F7F6BAAA /* MPNativeAdRendering.h in Headers */ = {isa = PBXBuildFile; fileRef = 643E2683778ACC9EB5CB76FBC7956795 /* MPNativeAdRendering.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 161F11201326321F09DC083A6124B845 /* MPMoPubNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EF02A7CBC18BE7D50438EA7676FCA4B /* MPMoPubNativeCustomEvent.m */; }; + 1633DF5A442EC685F10DBFD9238BE165 /* MPVASTCompanionAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 20C1DB506FCC7605E1EDD7B1A68341C3 /* MPVASTCompanionAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 168FD0351FCFBDC31C4B9F95AC414F76 /* MPInterstitialAdControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 730388327989C9B8D309121F78A31745 /* MPInterstitialAdControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16A2606A4DB0F520D7D7092296A2C9EE /* FBSDKAppEventsStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFA38C6736A595044835137D4BFDC44 /* FBSDKAppEventsStateManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 16A46E45A1460FAB73049BE0F6B257D4 /* MPProgressOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = BABA6C719A5DCE00F46E614F4126DC37 /* MPProgressOverlayView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16AF5B8600824A975CFAA6435234CE7B /* MOPUBAVPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 778EC7E82BEEE1BA594D3E4054D30FD0 /* MOPUBAVPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 174CDEB53F83B7B140373D378E8A8CA5 /* FBSDKAppLinkUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 5651959E78F907C6ACF04A599552DAC3 /* FBSDKAppLinkUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17AE052C3641183678ECF6AC1D8C9C6D /* MPPrivateInterstitialCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F101030586B5E2D461622E2A0E2D33F /* MPPrivateInterstitialCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183E15C37FECB00B5A9B58E3B699F10C /* MPMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A0A3F2D5CAD0B6AF27292B4D9D0EDED /* MPMemoryCache.m */; }; + 1897175AB925298FA3C93F07F7D330E9 /* FBSDKModelManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 657CDC49DB5FE547437DAC287F0E4897 /* FBSDKModelManager.m */; }; + 18BE37FE265A6671DC111006CA2CF7B7 /* FBSDKDeviceLoginCodeInfo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4772559B8BC236FB472959F58091FC02 /* FBSDKDeviceLoginCodeInfo+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18BFDA6C7EFF38857F6CE47DA0EA2B58 /* FBSDKBridgeAPIRequest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B498BDA639775841942DB5D749ADDBE6 /* FBSDKBridgeAPIRequest+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 18CD066F9B767E6DA031CBF880EEDAFC /* FBSDKAddressInferencer.h in Headers */ = {isa = PBXBuildFile; fileRef = C4DF948613A7E7DA7FEF22041BF1359B /* FBSDKAddressInferencer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 193EF25F3A6EF0F038EAC5F9F2CA2C2B /* SWActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = A3C78A4890EA536616F9144BD86C8CBC /* SWActionSheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 193F37980F9C6C592DC4610BDA125962 /* MPServerAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 317086D2417B02C70797E5C3C1D3DC44 /* MPServerAdPositioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1950A79D1385807BA42F932DABF52E55 /* MOPUBNativeVideoAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2345DD42E20DDB4323C7C8BF40A2A912 /* MOPUBNativeVideoAdAdapter.m */; }; + 19A9565C4733665BB011CED89425B645 /* FBSDKURL.m in Sources */ = {isa = PBXBuildFile; fileRef = E3B363271724A81ABA270C2BB7B000BD /* FBSDKURL.m */; }; + 19D63109C16032532E3E0190FABA0E8B /* MPReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5474068C68892BFB96B07EF1FEC99148 /* MPReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19F2EAD0A4AA6557D3C4E6D486F3CABA /* MPAdViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = ACBEDFB2E839391EF4233B648889A478 /* MPAdViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A1388F59CC87A356A480EAA4790741C /* MPUnmutedBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 96C7851143C7610980D5F2B2CC39322A /* MPUnmutedBtn@3x.png */; }; + 1A734C45A429F869E7BCBFDD306714E4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 279CB81A80DF1E1FB11A341C5DCA3788 /* UIKit.framework */; }; + 1AAC9D3ECCC0E0BF71FF064497979803 /* ActionSheetDistancePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5444100EB77E645F8C46E64D19B38BC0 /* ActionSheetDistancePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1B3B25090E8D1493C756AA838AE64B40 /* MPMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BE17778FCACBD6ACBC2F476B25ECE044 /* MPMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B452A4A4A3DC37C2C6A4BFD9D282011 /* MoPub_AbstractAvidAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 28514EA67BF3D15ED365252805F5D88C /* MoPub_AbstractAvidAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B76875B20D09527F1F5FFF4AFA64C35 /* MPConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DECB3F8BA7B4E5B7EDF1AA0BB0B792 /* MPConstants.m */; }; + 1BA58ED4679E8E488E211FBB2518C89F /* FBSDKGraphRequestMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7B4A6B241CA9980EB171E71C7C41E1 /* FBSDKGraphRequestMetadata.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1C39143A215F79C26B4D61D20DB7B7B1 /* MPStreamAdPlacementData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AA938C762685308D5DDA08B31DCECB1 /* MPStreamAdPlacementData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C8A518DC5E5E7EA58AEBB4141E7118C /* MPVASTResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 202D2DC71F90F79B93F7031A411D4149 /* MPVASTResponse.m */; }; + 1C8B56BAF9532AE4BA85CF61DE4DB396 /* FBSDKGraphRequestBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D17A0AE72C7967EC2970CC6D2BECA4 /* FBSDKGraphRequestBody.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1C9F5FEE5AA1987F861AF00A869732BF /* MRAID.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8FB4DA2DBE06E342ED54F4DF4F7890FB /* MRAID.bundle */; }; + 1DA1420CEBE99BBC22DECE157BD400C6 /* FBSDKGraphRequestPiggybackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 26AD489264F04D10598787F03F08C7E9 /* FBSDKGraphRequestPiggybackManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1DB054560C116AFFBAD9D7631AE73411 /* FBSDKEventDeactivationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D71457BFF18D2FF20E3E37C46ED7F2F /* FBSDKEventDeactivationManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1E2B32179A5F079FED54DEB230159198 /* Pods-MAPS.ME-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 943F5E0AB0E3CD68128746521DD14872 /* Pods-MAPS.ME-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EA14D7A59720E026D4B43A659B2C70E /* FacebookBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C567D84EB348A63DF9814E323373F51A /* FacebookBannerCustomEvent.m */; }; + 1ED4A3CEEFFDDFECA906E10902B68BCC /* FBSDKCoreKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF241FBFDC4842766A0E1FF113AEA81 /* FBSDKCoreKit-dummy.m */; }; + 1F0D817911B245964C4421A3A283B0E9 /* FBSDKAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = FD7B4B29134B4CC7098C0FA704B7E9A2 /* FBSDKAppLinkTarget.m */; }; + 1F5BE42904AD681ACACFD1530102B183 /* FBSDKServerConfigurationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD91B7BAE93A491DAAF421184A9686C /* FBSDKServerConfigurationManager+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1F8D42862BE064B299C205A54A721042 /* MPMutedBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3CD8E4BCB08D9F706EC3286247908C22 /* MPMutedBtn@2x.png */; }; + 1FB20A564413ED552B5B3678EBB8E1EA /* AVKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA85682B12AF0CFFB2D55EC92DB2662D /* AVKit.framework */; }; + 1FE10080CED13A5FB6C62FCB095D67FD /* FBSDKModelRuntime.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3387611B5A713CCF468249DF4AF8ED9 /* FBSDKModelRuntime.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FF436F3D6FA7E62E49A0FFBC60E872C /* MPLogEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 66032CECA8D63253F9CFD396B3CF606E /* MPLogEvent.m */; }; + 1FF491D6711B2A034BDC6D03D00DF10A /* FBSDKServerConfigurationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E0F30DE6BDF6213E262657879DF53E0 /* FBSDKServerConfigurationManager.m */; }; + 20901BD496363CCB7FE8B45936818C69 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDE226862CA9A4B8A396B0701AE758C9 /* CoreGraphics.framework */; }; + 20CA62FC571A4817256FC6C81C96BD3C /* FBSDKErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = F57146BE200145AE7D9E5E27B3F67894 /* FBSDKErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 20F9AC9601FB737BE368761A002146F9 /* _FBSDKLoginRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CB21C2F142AC6C4728EE1235EAF23E /* _FBSDKLoginRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2172A807C228BBEAC230693E4DC56417 /* FBSDKErrorConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C60B0313CB87B37192DF7999529B84 /* FBSDKErrorConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2176790F0B08289BB7C0955A8CCA3006 /* MPTableViewAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = AC4C84128FC0D34C431A6FFD970DB5BB /* MPTableViewAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2181E14B3686E2546B15655362A5CE7A /* MPXMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 56D5C86CC76FADAEBE68517166805AFA /* MPXMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2188E019CF43737B6C27D644B1633305 /* MPNativeAdRequestTargeting.h in Headers */ = {isa = PBXBuildFile; fileRef = CC313E7DCDADF5A498A1986201BF9E39 /* MPNativeAdRequestTargeting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2190D953F71AC070FD4DFED8C58DCAED /* SKStoreProductViewController+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E0FDE46DAF192D4E3F9D4F1880CA4CD /* SKStoreProductViewController+MPAdditions.m */; }; + 21A6C4D406DD05E6ECAA68419DCF6B7D /* MPAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EF08767081B86C21BD0AC576CB566C7 /* MPAdPositioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21E3E5E59D48A9668B95E95C7D74DC4C /* ActionSheetDistancePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 933E4A9A7F1C4B673710AA9F07CFC98B /* ActionSheetDistancePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21EBE786A7DD5893D49EFF068EE4F9FC /* SWActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 518F1E4B1B01832842CA6D695DE46F61 /* SWActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 227F8539FBCE66AB79DF33E2C3E93A60 /* FBSDKAddressInferencer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 517496033F1AE6363503BEC662D156CF /* FBSDKAddressInferencer.mm */; }; + 239E937E59FAD1E5DD289BDE15C11ACF /* MPVASTTracking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFA696B2A83B22B12FC28F3F7368681 /* MPVASTTracking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23B58C3E9B5A0C4AB23030C6E6F1707E /* MPMoPubNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A30268303B18BB45431F9DE4E87E5154 /* MPMoPubNativeCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23E05975E1539A5D9D5BD8E484D2AF85 /* FBSDKDeviceRequestsHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 12E0C92175BBDB3B2501511E55FD286A /* FBSDKDeviceRequestsHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2422514B402E7088A03D0F16F8768110 /* MPMRAIDInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 631741C3C4348599076C373EE142A286 /* MPMRAIDInterstitialCustomEvent.m */; }; + 24302196E3001D38B32F1DBF456D0715 /* FBSDKErrorReport.h in Headers */ = {isa = PBXBuildFile; fileRef = CC10BD630CE28B27C1C56ED23E93D314 /* FBSDKErrorReport.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2468B6EBE3F97293BFA1AA5FD5F7BD9A /* FBSDKCodelessIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 550EA76E460E0B22EBEAC1020F96CB17 /* FBSDKCodelessIndexer.m */; }; + 247E6480310ABC7E378FE956656D441F /* NSURL+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 840186D225507611F8E45D7E340CCC58 /* NSURL+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2514AE2566AAA76EE6D1C0CB5CCDAC43 /* FBSDKTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = 432C4A305CF5EBCFA2581B78D5EE0334 /* FBSDKTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25866CF4C6552A1601C082E52A6DB2C5 /* FBSDKPaymentObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 287DF17A69CEC392664192AB510E13AC /* FBSDKPaymentObserver.m */; }; + 259131DF0D82AB297F9007362A06C8C8 /* FBSDKAppEventsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 69E40514592BF1243FDA76902C6036C6 /* FBSDKAppEventsUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2592A8DF103EB021E2909FBF2E62BD6B /* FBSDKGraphRequestDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = F0028F18FB4507596E9D39B121F1BBFE /* FBSDKGraphRequestDataAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25AB320E015896E84AFDE5EAE60DF73F /* FacebookRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 742D0A33F744C488EAEE0CDA27016F62 /* FacebookRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25AF1C031C277432A48DC57DCB227A21 /* MPNativeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9961931672C417884E78AA03E6F10597 /* MPNativeView.m */; }; + 25DDF02E79C83A808837421B988057B3 /* MPBannerCustomEvent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 20E3A9210C554252984A00059B396BC5 /* MPBannerCustomEvent+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 263759F81B38648C674D39F8ABCA89C7 /* FBSDKAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85143B180A71B34C5BF60C3DF7B4C1EE /* FBSDKAppLinkReturnToRefererController.m */; }; + 2649CD84E148F9F0266B216FA6C8C1F5 /* FBSDKMath.m in Sources */ = {isa = PBXBuildFile; fileRef = 0552BCC8940279F8E0D84987BF1209C3 /* FBSDKMath.m */; }; + 26D8F784BB150D3531899AB58D8E8A49 /* FBSDKLoginUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D17311881EA9B1DE63B181377E72FEE /* FBSDKLoginUtility.m */; }; + 27D5C1D7879E4175810D87CF6F6B9D1F /* MPMRAIDBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C41528FAD99AC9E4E4FA3BAF45C91EC6 /* MPMRAIDBannerCustomEvent.m */; }; + 284ECF9F62F883A3453B8D682FEADE25 /* MPCloseButtonX@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7BE9F167C00AF094C327278436273B31 /* MPCloseButtonX@2x.png */; }; + 295EA9CDB46454C380A182A10FD5E74F /* FBSDKMonotonicTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 852021629653B523F49CB8F30BB1309C /* FBSDKMonotonicTime.m */; }; + 2A30094D087E344EF6AD3C954D4A0015 /* MPCountdownTimerView.h in Headers */ = {isa = PBXBuildFile; fileRef = D727BAFBEC97FA32B283FC8C1FDB391D /* MPCountdownTimerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A4BEE3059001C91F535E10FB657456F /* MPNativePositionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 7502FC2F85683377493A6C7E6A8372DE /* MPNativePositionSource.m */; }; + 2A75896F76E4CC4C620BDBA1CC022CC4 /* FBSDKLoginCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 11B4FF3EEEDCC6FA46BE21124B0B0F77 /* FBSDKLoginCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2BB755F544C6BD4C9D60CD1549B61807 /* FacebookNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD7CAA6DDAB84124E0C07FBAA457A39 /* FacebookNativeCustomEvent.m */; }; + 2BCD4B0779EB020F74E6AC01F8C72BA1 /* ActionSheetDatePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E16E946A2F3EF0A54043FF4C2FCBBC8 /* ActionSheetDatePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2BF9F89988F0A3F8FED2327B55B4676B /* MPBaseBannerAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 36D8023B92984E96D0AF18B251E4D157 /* MPBaseBannerAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C50BB5390B0E4EC84C12FA749A7C2FA /* MPRateLimitConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 53648406E1F91895916021AC15DAF5A4 /* MPRateLimitConfiguration.m */; }; + 2C585B72F41236E4F31D8F5365777E14 /* FBSDKUserDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A0B10803186F987DFD090783BDFB9B /* FBSDKUserDataStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2D827084DC0B994F907F1A99E7FBFB35 /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */ = {isa = PBXBuildFile; fileRef = B75765AEAA88DF3D3EDD4646151914C2 /* FBSDKBridgeAPIProtocolNativeV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2D92A66C1CF6A2AF43C5B3932E6B5325 /* MPMoPubRewardedPlayableCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 11F67DED88D3BB296072360441927DD0 /* MPMoPubRewardedPlayableCustomEvent.m */; }; + 2D99CBD579A9015A5640C0E351276A49 /* FBSDKAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A91C686A247DF479D95444A3B415693 /* FBSDKAccessToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DF125A64238443C68EC466266A72B7E /* MPRewardedVideoError.m in Sources */ = {isa = PBXBuildFile; fileRef = 84A02660FE1077689726CEFE3BFFEA06 /* MPRewardedVideoError.m */; }; + 2E1E2667B3BD1B14B0B761B4324A469A /* MPNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 483AD4476BD22474474125111E540A11 /* MPNativeCustomEvent.m */; }; + 2E5008AE4F894680AB955CC7ED490E1A /* MPError.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E094436766E2B7FDD52B0A5D6575705 /* MPError.m */; }; + 2E5A5684F5161AA2AEDB67594FEFD3C7 /* MPNativeCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 91833573344C58D392E34F2596366606 /* MPNativeCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E76724A8F4CBFC501B34171FFA38606 /* MOPUBNativeVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B279AE02BE057335B49062F3B1380F8 /* MOPUBNativeVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E9104E922A6404A24E6B653BC623541 /* FBSDKDeviceLoginManagerResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C6E0CC392C130EF3E476559AC967E76 /* FBSDKDeviceLoginManagerResult.m */; }; + 2E929EC43A795475BFCE292A95ADF962 /* MPAdWebViewAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 18CE2A49F5159B4B1E5C5AC71C12FEA3 /* MPAdWebViewAgent.m */; }; + 2EA5D06D14115FDFAE4A694FAD834D66 /* FBSDKApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C8E753C800BDC2C268D480049B3DD8 /* FBSDKApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2EAE1E7925D5EE2FE81AB1413A656718 /* MPStopwatch.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA155048122258B8D4B0B7F7B2B05C9 /* MPStopwatch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F1350573333441D9ABFE221FA80B176 /* MPNativeAdError.h in Headers */ = {isa = PBXBuildFile; fileRef = 28EC887828D27B5D9DF2C571BC57FC3F /* MPNativeAdError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FD5001316F1879F6C68F3A0F10E5758 /* FBSDKErrorReport.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B108711A506C8430D1FCEC9937BFE5 /* FBSDKErrorReport.m */; }; + 2FF66B848F716E266C6214BB0ACDD79E /* FBSDKPaymentObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F551602F580F748AC4552678C67FF9 /* FBSDKPaymentObserver.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2FFF8BF681C383C602CE763BBCC3EE51 /* MPViewabilityOption.h in Headers */ = {isa = PBXBuildFile; fileRef = C382E4F80D21FB66993E6C000599A077 /* MPViewabilityOption.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3029F82A16E26561880C34D209638AD1 /* MPURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = C0EB147C8CA495A57110E29C0E07F46D /* MPURLRequest.m */; }; + 304360652446AA07A75BC26AF2D56AFF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + 3065431D7CF0A35D063E52853FBED7C2 /* NSMutableArray+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AB26FE24E67641C267B774D4EAA4108 /* NSMutableArray+MPAdditions.m */; }; + 3087472B8D0219E60590B9D0E668EAD2 /* ActionSheetPicker-3.0-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C4D24F9DF189DBF6472637641C2853 /* ActionSheetPicker-3.0-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 314E87AA88A3568D21AD51E7DFBDB21F /* FBSDKAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = FDE58727CA3C31A48E01CA8743169BB9 /* FBSDKAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31F0CCA4D3118293F864E8F858D21EB1 /* MPMoPubRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 178723CBFD514D20B3A9CB81C7540CD7 /* MPMoPubRewardedVideoCustomEvent.m */; }; + 3226C2BE765627FB26BF00DAE87158B6 /* MPMoPubAd.h in Headers */ = {isa = PBXBuildFile; fileRef = D6C4669933A9909FCD02018C3A81CFDB /* MPMoPubAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 327F718CDCD2CBF416EE881353BCBBE8 /* FBSDKMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 55336FC4EDB257F3F95601891C41CBCA /* FBSDKMath.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 32A130CA48324CBD4ADCD5F62D189271 /* FBSDKCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C0D2F85C2695BD25D3ACA85C9D42DA9 /* FBSDKCrypto.m */; }; + 32A423E22C6D24FDEA50B25923F729F9 /* MPRewardedVideoError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B3238406C62DB98D637B658FE140BF9 /* MPRewardedVideoError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 330ECEDBC06A84C77024FC004C2358B7 /* FBSDKTestUsersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ADB6B856A08A66A9E10FCB3499EC08DB /* FBSDKTestUsersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 330EEEE2AC287EB9ED4904B1E13C5127 /* MPAdImpressionTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 672DB295A82F043D9A1159E8F4132205 /* MPAdImpressionTimer.m */; }; + 33A2BFDC83BCFABECFC68FCC84C1AE98 /* MPNativeAdRequestTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = C4BF407BFD75F9D32BB5FCEEC85AD1FE /* MPNativeAdRequestTargeting.m */; }; + 33C21B01BD0894456549301F017B5741 /* MPLogManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E0975D043E62D62AA0D9FF73BA2C82A /* MPLogManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33E8A3ED05D9D38C614FD3C7B97C59BE /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C6C9C78586EAB29A9CD319A29D5F4CB /* CoreMedia.framework */; }; + 33F2B21A70984B889C2613BAE7251F42 /* MPNativeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F68075B3D8E243FEB835D28EE50C32A /* MPNativeCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3559B2C86EF94932057DEC8EB1E0BA53 /* FacebookInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B02C3E85DA6EE5B488420C6ACC7AC0 /* FacebookInterstitialCustomEvent.m */; }; + 355A42B6D67E48556A08DAB94AF4BACB /* FBSDKLoginTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 977DAB394A071F49D80E9B8ED6456EFB /* FBSDKLoginTooltipView.m */; }; + 361B73A90A33D308D6F07B234D92FC61 /* MPNativeAdRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A193992127099DC68C97AAA8DD8F962 /* MPNativeAdRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36230572D1A4C19B13BBB2D8DAB9BF6F /* FBSDKViewHierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 61E5329550CA53F16B7CBB57C3F03C7A /* FBSDKViewHierarchy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 362ACE4237BAF588962BF732826405AB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + 36D4D66627866DF3A7B6AFD125C12F54 /* MPViewabilityTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = E8880ACFDD1626E845D356D5B9BA1012 /* MPViewabilityTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36ECA252142CC7B9EFA8A393AB134C26 /* AbstractActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C1DFC7D31D0E0612492469AD5BE28F7 /* AbstractActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3819FD77127CDB2D38883AEF0CDE316B /* MPNativeAdRendererImageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = E55AF0D570AF4193719E16841EC2E091 /* MPNativeAdRendererImageHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3830C9F4EBF44CDEEBCE5D4D470ACD5D /* FBSDKDeviceLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FD6796ABE6D61E80D06FA5F199C16D /* FBSDKDeviceLoginManager.m */; }; + 38799E225FCB12E3F0F0E3A1E01494AE /* MPNativeAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 92241D298024AF72E7AB65A5B8DAA3C5 /* MPNativeAdConfigValues.m */; }; + 38978619C5E87325D5225A8B7795A3A2 /* FBSDKCodelessParameterComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E7FCB031A7E64AC0598C6DC265A9AEE /* FBSDKCodelessParameterComponent.m */; }; + 3970138CE3A7604E9E1110CDA9ECE934 /* MPNativeAdUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A92B85A965A9F9DF3777C778ADB9EBFB /* MPNativeAdUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 39C8836740729FDC23E92258CBF81015 /* ActionSheetCustomPickerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ABF810893517F2EEEE149E0C4DFDD6C /* ActionSheetCustomPickerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A0C2DFBD90B37FF21424A76823C724E /* MPRewardedVideoAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5509B0EB0CE3C370E4BF564165744E82 /* MPRewardedVideoAdapter.m */; }; + 3A2007CA85BFA9A086602C7C5620F6D2 /* MPStreamAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 72E1D4279EC05F7179D2143916C50F89 /* MPStreamAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A2F00590EBA38075C48B4A94662BF38 /* FBSDKProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA2385F50008B69FA122D58F91A5B037 /* FBSDKProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AB36443A6CD42FDAB61EC98BE5D9BA9 /* ActionSheetPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 66F1E9E6014D2076196090416F8AFFA5 /* ActionSheetPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B1CA84936C0575AE8DF25E30C23B789 /* MPError.h in Headers */ = {isa = PBXBuildFile; fileRef = 669FEF5E033940469407629FB149C049 /* MPError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B76D08E8F5B9EA9F6959BD991E2D256 /* MPNativeAdRendererConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DE10286539719D07BB92F56417F0225C /* MPNativeAdRendererConfiguration.m */; }; + 3BC84D661D22FDECE7023C0212546BFC /* FBSDKMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A24D5F33E4AE0D558DCE24899D66B2B /* FBSDKMeasurementEvent.m */; }; + 3C338326A2B4A3C4B7F7047CAC4F41EE /* MPInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE7EDE92A1D542687BAD2E56B6A65DD /* MPInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C99AAC369A9DD48ADEC89759DD5D174 /* MPVASTMacroProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = CAF29C3A2C0231EDF9441D77EB896CAB /* MPVASTMacroProcessor.m */; }; + 3CED6DCAF5B7D4413D060EBBCC0F98D5 /* ActionSheetMultipleStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = C88762CBD79A679AFE437D3F66FF6F8D /* ActionSheetMultipleStringPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3D11FFADAC36B817E21342E6E8B928B5 /* MRExpandModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A139C802A166E40070BF1764597F8F14 /* MRExpandModalViewController.m */; }; + 3D12F1C085A4B1955E2402B81CA1F8A0 /* MPDiskLRUCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A9749911324189B6B7D431FC7C90F57 /* MPDiskLRUCache.m */; }; + 3D49F1FF583D3211934286DD881335B0 /* MPVideoConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 92AC26435795AD8929F6A59855866D62 /* MPVideoConfig.m */; }; + 3DC4B1858FDA7D55DE4CABA33AE71389 /* MPAdConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0F999FBE7C8955784DB2555958CF85 /* MPAdConfiguration.m */; }; + 3E952267810C78F609500D6288835ED7 /* FBSDKViewImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = B00D22BB5368D25419618D3B5AFBBEB2 /* FBSDKViewImpressionTracker.m */; }; + 3F1AA1FF23FA156ABDD8B1BDD34BEA1C /* SKStoreProductViewController+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 25A3859019401E6CAFD8A50CCA9A6E9A /* SKStoreProductViewController+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3FE445250268A6175F78C0DC88033DC8 /* MOPUBNativeVideoAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C0CF359045629F2CC052CD933CE93655 /* MOPUBNativeVideoAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 408251E64517FA8646D27B1B6C956DD8 /* FBSDKWebDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 75430D08B578AC2FE620477A2F755B8E /* FBSDKWebDialogView.m */; }; + 40CC5DDC74579949569909FC11FFC0DF /* FacebookInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = CB92DFB1363F8ACE979567C868E3F7AE /* FacebookInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40FAC915304E0E0C9A9B9E0FB75EE335 /* MPActivityViewControllerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 78AF1958669D6639CACE164BD0E0031C /* MPActivityViewControllerHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 411DF6A13103F8566C1313345C595EE7 /* MPURLActionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 993E9FD739B848734F41F1C74C8CAAB2 /* MPURLActionInfo.m */; }; + 4129AA8AE37E1E98947DA0D3DE542F9B /* MPUnmutedBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 2CD349746059543981564E6476E34219 /* MPUnmutedBtn.png */; }; + 4174E2E2A7A7F063B1E791C270B77C2C /* FBSDKApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D49F6A182D59FD2B24C35D6491EB91 /* FBSDKApplicationDelegate.m */; }; + 41A89C2BC57F7B277B2523F9EBD70DE2 /* MPCollectionViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A8FD603FB8D92568C2F00475C782E1DC /* MPCollectionViewAdPlacerCell.m */; }; + 421906B2E2D12EFC17AD5DAAE1D3093B /* UIColor+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 662C8DFC2BB210CEC404D76B95FCDE12 /* UIColor+MPAdditions.m */; }; + 4227F6E3D7BA1AD407412D4A6FA4BCD1 /* FBSDKEventBinding.m in Sources */ = {isa = PBXBuildFile; fileRef = B51DF54A4CF41963C2BDDC213F0DF09F /* FBSDKEventBinding.m */; }; + 424D77400804804D59F80064E83F7B9A /* FBSDKCrashHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 744253A82D88BA526A83AF6269B01239 /* FBSDKCrashHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 427563B0D40EFFA030A2318326BEE86A /* MPCollectionViewAdPlacerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B10174B9420EE52B289461785BA7CB /* MPCollectionViewAdPlacerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 442BD9028E6021220369BBE40C869FA1 /* MRError.h in Headers */ = {isa = PBXBuildFile; fileRef = 952AD8D7F79D839DCF4D0E4DE6B7472A /* MRError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4453EECA79527A653B8A0735EEC27EE5 /* FBSDKTimeSpentData.m in Sources */ = {isa = PBXBuildFile; fileRef = AF435A751586736FA3164D9BCB1D4218 /* FBSDKTimeSpentData.m */; }; + 44FFDE0A1B40896690C0F158FF7B21C9 /* FBSDKAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A3671780D68F87EE6E971844063516 /* FBSDKAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4560C11D73482D4FEF27223B0D76A2AB /* MPAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = EF21C10A78AE55D1FA2A3047387BB737 /* MPAdView.m */; }; + 4568AA9DA70DAE130DE2DD367DAE3C04 /* FBSDKMaleSilhouetteIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E538A0968AC5CDC1137A8A66B1DAA7E /* FBSDKMaleSilhouetteIcon.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4647AF91CC80A4DF039BB0F4A765FD1A /* FBSDKGraphRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B5B160EEFB68C1546BE610C5E9A0935D /* FBSDKGraphRequest.m */; }; + 467F04AA25B35120FF5340CC155FA522 /* MOPUBPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 840AC724ABFD6667BFC151EC8A7A71CF /* MOPUBPlayerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 46B91257C03FC97D8118A8CC0C42EFE5 /* MPInterstitialCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = FD699BC08360062BDC6F015EFF29D130 /* MPInterstitialCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 472AAF9EE530914789E1817B68371C61 /* ActionSheetDatePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 24611B99B0F13EBDCFB559BD33E15EE2 /* ActionSheetDatePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4810596752263774D32CD7263B35A136 /* FBSDKCrashHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = B1AC28EC2893CB60103213508D720B17 /* FBSDKCrashHandler.m */; }; + 48920E060BD6BC668DCC8818FD6D162B /* MPViewabilityTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A15DF00D3C630F687C9DCB0460751FF /* MPViewabilityTracker.m */; }; + 48A567A855A9A1424EA16C5DA8F89E33 /* MPCollectionViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = E59809B0DC59C4DA0BA75DB7927C17DA /* MPCollectionViewAdPlacer.m */; }; + 4908454DC030A1EB3F2E9F1F0D78BE20 /* FBSDKAccessTokenCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = CD6D5262411D519075E943C29EFAD527 /* FBSDKAccessTokenCaching.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 490A57BA94B511F0AC061A23C71BF5E2 /* MPURLResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB1D7DE3964948FFAEF4B5C4410EB9B /* MPURLResolver.m */; }; + 49305CC1D06B560C6F61D00A0EF2312C /* MPAdServerKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 86FC8DFD7B5C6E8BF61C72A150A5CF87 /* MPAdServerKeys.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4982A430F6DD11A45CCD5F8888A65BC2 /* MPNativeAdDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC157DA59A809EE7D3051A904E1F14E5 /* MPNativeAdDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49DA2A16B499FCD25602C1BC80C9E2E5 /* MPViewabilityAdapterAvid.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B21888C64296EBFB772292B225F139C /* MPViewabilityAdapterAvid.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A121DB1A205F4DCFA18510E13BE8FAF /* MPProgressOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = B2283B39EABDFB4652A6D71406D45FA2 /* MPProgressOverlayView.m */; }; + 4AA0CFECD6FF41737618CE4526E1FE9F /* MPVASTCompanionAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 818CF7621788EB57243D6C4A5C003488 /* MPVASTCompanionAd.m */; }; + 4AF7C21A55CA989ADFEF40763421E386 /* MPBannerAdManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = FDE30D15554C2C30D47208E3387A0021 /* MPBannerAdManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B4BC5F79FC593FDDA5537B6831D1371 /* MPDiskLRUCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA00D80F7E0BC7B3AF7AF266172A236 /* MPDiskLRUCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B63C7AFE5122C1759280DD1F8FB6003 /* MPNativeAd+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = EECA1C1FC5842A736DC2CC0325C3F100 /* MPNativeAd+Internal.m */; }; + 4BFE2E8C03DC0AADE3996635D7E2DC62 /* MPInterstitialAdManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E38AB9681AEEB1F39B4445EA18564A3 /* MPInterstitialAdManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C48ED90D821B0F8EF3661B05E135974 /* MPStaticNativeAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = A900443509C5E605A6AA6B440A4F097D /* MPStaticNativeAdRendererSettings.m */; }; + 4C87872CBD9016DC645C8C6E7ECEA602 /* FBSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 08A8536195C3B8A8649503B745E1E34C /* FBSDKError.m */; }; + 4C9F66D9864B631B31D2AE4AECB456F8 /* FBSDKGraphRequestConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C0C4301B6F62E5F3CE066AFCBB6076 /* FBSDKGraphRequestConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CCBFB4901A4CCBEC97AB859CD79A310 /* MPNativeAdRenderingImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 7155A767452679DAA2CCDF87F40D3C99 /* MPNativeAdRenderingImageLoader.m */; }; + 4D2B6B69E167A21306EE3AF52210B8E4 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */ = {isa = PBXBuildFile; fileRef = CC405636295D1730C58C8F77F9DAA3BA /* FBSDKBridgeAPIProtocolWebV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4D6A2D20610DB7DDCFE78E255DBB7BC6 /* FBSDKButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 655CD104304A33F2F065EDFF913405E2 /* FBSDKButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DDAF1310DAC048BF45ED1CEA7A70543 /* DistancePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D16ABEAA9C6C177449A761B24F5AE3 /* DistancePickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E5F687BB4BCCC1D578D55CE096B33BE /* FBSDKSettings+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CEC8AEFA9998D1A3C244EF87DB8033F /* FBSDKSettings+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4E74A4FB657FE4522FC2AEB95AD5097E /* MPNativeAdRequest+MPNativeAdSource.h in Headers */ = {isa = PBXBuildFile; fileRef = BCAE4EBE65B4691186D268B0180906B2 /* MPNativeAdRequest+MPNativeAdSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EB71F5A3C02FD4FEB8776B4CD310E08 /* FBSDKCodelessPathComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = B15EE2487DEF00CC1A27657067A78219 /* FBSDKCodelessPathComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4ED32D97F593E10E15F57F741F828504 /* FBSDKGraphRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FC9FA0418B7745B5D8DD98AD4F4E56C1 /* FBSDKGraphRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EF1B8159104573F5AFB007CC0F688FF /* MPAPIEndpoints.h in Headers */ = {isa = PBXBuildFile; fileRef = 65F27BB35097F2D8D08FA8B681ECA773 /* MPAPIEndpoints.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F242BEAE76C327AC9881A58B353183E /* MPViewabilityAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F0709010DEB2CE6FF63CA9540A3737D0 /* MPViewabilityAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F42B26397C10A888F9E6722EB5D5335 /* ActionSheetLocalePicker.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF70F7C1F95C149D7ABD6C402EA2E14 /* ActionSheetLocalePicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F5F245CFF777BDE31807DC864BE4A8A /* FBSDKFeatureExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CFF120C55B163F4C4D832E468153540 /* FBSDKFeatureExtractor.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4F9B7E01E401DF1E29C59140E80E8028 /* MPVASTResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4697854BCB6ADF8B7BD5912A820F1281 /* MPVASTResource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FF30CA83CBF7B234F1EC39DFAA3B5FE /* MPRateLimitConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F541DB52E1AE5B7F2A89786E9047F3 /* MPRateLimitConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50AF83E9CCB5C878FDD6577FA4849E66 /* FBSDKInternalUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 03F4D32A7AD01E7073A7A9161D5F1A0E /* FBSDKInternalUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 514BA332CD0B3A325972E795A8D01004 /* MPWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08645684D6B705E777B2916E36A63D6F /* MPWebView.m */; }; + 526873BB539FE91A022658D77C14C53A /* FBSDKViewImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D96728A0ED9D25F0E2CC5A442582BD8 /* FBSDKViewImpressionTracker.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 537155B92289BA1AD1DB8967640F4742 /* MPNativeAdSourceQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 69CF1C36DE317A8879C959F7FCFC2ED9 /* MPNativeAdSourceQueue.m */; }; + 5379BEE55DC2964C41B073F880972FCB /* MPMediationSettingsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F713C112C0705DDB9B2DB12189A85A7 /* MPMediationSettingsProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 538BFD599CA1BA7C99048D8A02533FA7 /* FBSDKEventInferencer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8885CF15F99D2825B0DED571D3FF8058 /* FBSDKEventInferencer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 53BEA651DCF7EA96DE252D2AAEFB2FDC /* MPVASTTracking.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D2D903FA50E592586284275FC08FE1 /* MPVASTTracking.m */; }; + 541F2BE1D5FEC2DEF9F91898806CA329 /* FBSDKLoginCompletion+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 478AAD31B36C8B42A40AD2B42DE6F451 /* FBSDKLoginCompletion+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5595739B682ABC08453C455F11AAAA81 /* FBSDKAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = E136CA309141E83738CB0FD54883FCED /* FBSDKAppLinkNavigation.m */; }; + 55A63CEC412649CB875F2ED2E4F8124C /* NSURL+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 24D45DF4A924A9E28CE7976AE16FD94F /* NSURL+MPAdditions.m */; }; + 55D6ED3B4434587A4FEC18D7563ED3BD /* MPSessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = A46A0694CA33E8FA4A6FF6776EF48301 /* MPSessionTracker.m */; }; + 5649329A1FDB24C4A085BD1F9111BF5C /* FBSDKMaleSilhouetteIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DAED3B103AA265A9BC13DEAF4BAF84F /* FBSDKMaleSilhouetteIcon.m */; }; + 565230934CB628F1FB97EE18DDC414AC /* MPNativeAdData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AAD013E29245EEAA588311B80FE807A /* MPNativeAdData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5660EEA8846479528BEAD1AF69B433FB /* FBSDKAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = FCD4C2BC86A3172104046B8791BF8406 /* FBSDKAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56D703DD018DEE06A04F26477DEB2EF4 /* FBSDKAppEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A0AB4E98450DECED57A49497A3A21A4 /* FBSDKAppEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56DD7A6EFFE88ABA64D195261D2EF1F0 /* MPNativeAdData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DFDA930918B19C3DCB2D11CAD6348B0 /* MPNativeAdData.m */; }; + 5748C395D4CDE822F615E6A0B9C7550C /* MPNativeAdConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BF16F4CBF5C8802AB5E82DD7E0FEE33F /* MPNativeAdConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5749EF7E07CABE86B0CCED3245CE0E63 /* MPCloseButtonX.png in Resources */ = {isa = PBXBuildFile; fileRef = 979B50AEC8217737F6E5DD60E00AD581 /* MPCloseButtonX.png */; }; + 577F5DB567E46856A38932A6CA2FB2E9 /* FBSDKDeviceLoginManagerResult.h in Headers */ = {isa = PBXBuildFile; fileRef = F1CD286CFEE14490287189714F6D2E09 /* FBSDKDeviceLoginManagerResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 57E696B3F4B91EEA76ADA84AD20944DA /* NSString+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 72F93DA4636619F51DF60D5E61326A7F /* NSString+MPAdditions.m */; }; + 580B8ED267DC9D03681C5F4DF68C7853 /* MPCloseBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 10FCBBC01CBF0F703B42FBDD924AE656 /* MPCloseBtn.png */; }; + 5839B9FCBE2E3267C6B7732645B11040 /* MPHTMLInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 06A0413A67675E359653EF6302D1C848 /* MPHTMLInterstitialViewController.m */; }; + 58A4DFF728B162C6EF90438378791B0B /* FBSDKConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 124BA3C96D0745867F01B4573AB4D069 /* FBSDKConstants.m */; }; + 58F7FB88681323B9F7B41FF6DEC00536 /* MPConsentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D21DF05E8CD024EBD37DCA3DC4B0C96B /* MPConsentManager.m */; }; + 5961450F94738E41BEEC9B48CC6C5DC7 /* FBSDKBridgeAPIProtocolWebV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 27CADAC6F188F441552DD8BD377A5459 /* FBSDKBridgeAPIProtocolWebV2.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 597934736CCE39B52EE9802A726D3800 /* FBSDKAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = B77BA45C413A429B7705FF20DB79B2B4 /* FBSDKAppLinkResolver.m */; }; + 59E848F4D0831D405A91897D56DC3266 /* FBSDKLibAnalyzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8125E4E787DFBAD19567A4C2EFB4BEA7 /* FBSDKLibAnalyzer.m */; }; + 5A1D4A73703CAC56F8AE8D543CD04E68 /* MPAdAlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 57455311E595D80DC1B44FF90BD5402F /* MPAdAlertManager.m */; }; + 5A3B07FBBC8FD96D2E92699364646C54 /* MPCoreInstanceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED366E76B118C3C794976A49C4FBB01 /* MPCoreInstanceProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5AD957A1794F4B407F1E0A2B092AC18C /* MPVASTDurationOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A0D479C2EA14467845DCD938375D89 /* MPVASTDurationOffset.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B0A8438A25B3D1DC37225086074504E /* FBSDKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = EFCD7A109313FBA2F4E70F4B28522C04 /* FBSDKIcon.m */; }; + 5B1F753CC681BAFD9BE8B0EC6F976308 /* MOPUBExperimentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 6929702B8CAF9B272E66A9FC85C980EE /* MOPUBExperimentProvider.m */; }; + 5C32FB004982AF96D4EE51B9037663D6 /* MPForceableOrientationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 32FE0FBECB01959799DA0CB95E2D05CA /* MPForceableOrientationProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C9D9FC9B18AEF09EEFD1359A88DE354 /* MRBundleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 113EE07F75C317AC7BBF135B331DAA7C /* MRBundleManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CFE9BE97DEA453F1E9E8A676775B326 /* MPInterstitialAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 97A7C1BA7547CD86275C4C9A041F9F43 /* MPInterstitialAdManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D3F58D2C976087E1062E4CDD20BADBC /* MPImageDownloadQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D9AD3717822FC119D19CADDC8CD3D729 /* MPImageDownloadQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E0B18790B27E40B095961010BC7FEFB /* NSJSONSerialization+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A881258CDC98D74871DCA7BA4D1176E0 /* NSJSONSerialization+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E0E15D469BFD8C4ED7A922F4439BE60 /* FlurryCCPA.h in Headers */ = {isa = PBXBuildFile; fileRef = D5E4DCB8F35CB11F7F45FEE85551A6EC /* FlurryCCPA.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E3F9114FA5B59B1E8198CBFDFFB05AF /* FBSDKLoginButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 885C55F37B4DBA54FF61997580345EB9 /* FBSDKLoginButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E751954DBE4B9D90705E95A7B58EBBE /* MPAdDestinationDisplayAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E8F0BA1821C5F72F39DA01F336B4DE0 /* MPAdDestinationDisplayAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E95C37116D083974CDCF6D109A19753 /* MPBannerAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D8D180A327EDE07ABDD3B7F425E3C05 /* MPBannerAdManager.m */; }; + 5ED457C6C6E1582A0EDF57E5609B39CC /* MPBannerAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 22355F169BF11F9BB098AA2D1F34DECE /* MPBannerAdManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F03E14F63E920B11DABEE65D10525AF /* MPAdPlacerInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = AC9AD637CAF1C6863F7C127239C79948 /* MPAdPlacerInvocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F166B51A9E213AFF1E24E704C1B1C34 /* FBSDKBridgeAPIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 212321E5085DBA7FC62C102C7C23E603 /* FBSDKBridgeAPIResponse.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 5F232ABE66E4DB5C23DDB5804DD3BB1F /* FBSDKCoreKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A15C5653784E24AD12AE6063E26117 /* FBSDKCoreKit+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 5F318ABBC58720E606FF50FCF62770A1 /* MPAdServerKeys.m in Sources */ = {isa = PBXBuildFile; fileRef = 276A12FF8E9F11F8B21046A5EF52228C /* MPAdServerKeys.m */; }; + 5F3AE8FE4839A87469D65A90C473E676 /* FBSDKAddressFilterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 830DABC44391100D3241316B54764DB5 /* FBSDKAddressFilterManager.m */; }; + 5F8C8B05E073AB128D6CE8633F62C984 /* MPServerAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 9113537F8C5C4546583EC38BEF0F7AD2 /* MPServerAdPositioning.m */; }; + 603B128B3D26CBD875A8CCAB8233A0F0 /* FBSDKGraphRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 752F3FABF4AC08320F3F34A1BE2ACB14 /* FBSDKGraphRequest+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 604DF811303E72196BF3E133A3189B39 /* MOPUBNativeVideoAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = C7A9CD85641F1E4358582C2C433FCA79 /* MOPUBNativeVideoAdRendererSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6055746A15F10F410DAE146034C5B2C5 /* FBSDKMetadataIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = C489353961A5A10CAB96702867E8ABDF /* FBSDKMetadataIndexer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 609266EBDDFFBC6CE6E544D3CC068E57 /* MPVASTManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BE6AA695A1243C229327735B4AEDB65C /* MPVASTManager.m */; }; + 6138DAA10E2F0135253943C773616F8D /* FBSDKLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FBFD6477C3BF891597A3C5A1FCBF2B2B /* FBSDKLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61416C4EE78A64A227F28DA0075E5E49 /* MPAdConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D86C1DE3D160C2308DC872DE3D2DE3B /* MPAdConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61AB85D1CC040D9CAF34BB266A0F3B76 /* FBSDKEventInferencer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8705D61898B476FDCAC46A3E4C621678 /* FBSDKEventInferencer.mm */; }; + 61E758D85234B14DC73893B1021973FF /* MPClientAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D53AFED7E5E9CC5E731C7B45D34FA4F /* MPClientAdPositioning.m */; }; + 61F0AE40C57E56278714CEB0F8BC1284 /* MPInterstitialCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A88BE853735D98DD2CB27E60219422 /* MPInterstitialCustomEventAdapter.m */; }; + 621693D6508E92E1469D580D93BBA2DB /* FBSDKDynamicFrameworkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9E92C057DD12C14237347F2F3E4B2F /* FBSDKDynamicFrameworkLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 62235B80AE73CD6E6FC5277D08619527 /* NSDictionary+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF24FF965B163B35A6A1F7256E532F2 /* NSDictionary+MPAdditions.m */; }; + 625A7A6150E72573906A8EA6C2E2A7FD /* FBSDKConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CF0B8BA0D1CC8547941CF9F9AFF114 /* FBSDKConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 62B4748927C99171F7D8D8C1E5633BF3 /* FBSDKModelManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5631CF77F9DD01A8FA3A0BBD4BC00341 /* FBSDKModelManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 62B59E460675C59A7097DF0782BD8729 /* MPStreamAdPlacerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = B807205C484E2661499607C16A6E9225 /* MPStreamAdPlacerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 62B93BCFED9447D1237AB02F03B74B34 /* FBSDKAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = 4940329881BD0CFFD0A0365C014D5A73 /* FBSDKAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 62EFCDB438C72C641CFF5328FD56682A /* FBSDKAppEvents+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2709B1517AD1F1F70C92FC96DD46D24E /* FBSDKAppEvents+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 630D8B4A89C39005608D12485CF0BC1C /* MPContentBlocker.h in Headers */ = {isa = PBXBuildFile; fileRef = BF055D4767EEAEDDDF6F316FC80D01E0 /* MPContentBlocker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6342FD34EB5DE8D901E67BA1FAAC6E94 /* MPMoPubConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D271DDBA21E726ABF2556C28DFC8FE /* MPMoPubConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 634954BB2C33275F65B286162E374781 /* MPVASTAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E2733436B4C0444F92294CE1755EA69 /* MPVASTAd.m */; }; + 634D4257786AD6D7B1DF9F3FD4FAD2F6 /* FBSDKProfilePictureView.h in Headers */ = {isa = PBXBuildFile; fileRef = E9AB7E5055801BA24E9DFEE6961E7BAA /* FBSDKProfilePictureView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 639A32A8951AA4BCD36D1EA63864C130 /* MOPUBPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA2A13AF95552A9E591C9873DBA4507 /* MOPUBPlayerManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63BEFA1DEC784F8B5A755C755EDEB6F8 /* ActionSheetCustomPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C31FC567866474470186C507211ED48 /* ActionSheetCustomPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 63CEFB3E172C0F886B1F9837397E0048 /* FBSDKSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A06DD6B48F22EB61D9E3CF45032607E /* FBSDKSettings.m */; }; + 648C9247C15264ED1D27904A3A4E6CD3 /* MRProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = DFE717B1569AE3EDE5EA12247CD22CC8 /* MRProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 64C950B4C4808E89279D2E1BDCEB8AB5 /* MPMediationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2366B91A33BD2E8CF00FFA763E833314 /* MPMediationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 64EE33EB6EB613014E7CB2FCB8DFEA29 /* MPNativeAdSourceDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C9243623C2EEC3E811401AD292C9585 /* MPNativeAdSourceDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6506C56D737442CDB18F2682B78A0F3E /* MPContentBlocker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A4BA7AD3D00B4A3E17F5E68D0574BD3 /* MPContentBlocker.m */; }; + 65329895BE77866CC1472716B456ACBA /* MPImpressionTrackedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D99329498836CD82D748659666B8B9 /* MPImpressionTrackedNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65B7139EE1EC65CD58038003683D7F5E /* MPWebView+Viewability.h in Headers */ = {isa = PBXBuildFile; fileRef = 39D3971615A8B57D3BF0C850972DEBCA /* MPWebView+Viewability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65CFC70F92E96B5A32DA3EA33FB52FD1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + 65EFEC007600E6B5D2AC3617241A8D02 /* MPAdDestinationDisplayAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1233DABE131B7FCA66E2785227DE3A8E /* MPAdDestinationDisplayAgent.m */; }; + 65FDBEFC578D05EEDFE0C82D124C5B1A /* MPCollectionViewAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 337939E5164002DE8321DE8F5714CC56 /* MPCollectionViewAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6655FD0C2FA08EFEA0DA4B85B5C6C275 /* MPPlayBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F5F7BCD7BFC75F107394E70B1C7E158A /* MPPlayBtn@2x.png */; }; + 66607BAEE968424CEB69EC8D173E1B78 /* FBSDKKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 1330CDEA75AC8171E33A5BEA88FA6E85 /* FBSDKKeychainStore.m */; }; + 677CD7F633E49803C7369B6BDDCE6209 /* MPMediationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 69A102E51EBB7EB8CCF0521D150B341D /* MPMediationManager.m */; }; + 6799B366086E0FA39E1814FF3980D93A /* MPAdView.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E193415C4FDCA57FA826A6CDD8308A /* MPAdView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6813E46F26F41940A6F210041BA05C65 /* MPNativeAdConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A82E657D846BF8C13574BBA163EAEF /* MPNativeAdConstants.m */; }; + 685EA20FC3B7172E9476EA957AFB6808 /* FBSDKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D96AE4748D7956BB0A1BE7C732E3EC4 /* FBSDKUtility.m */; }; + 695387329EA4806C4416D89E8E48417E /* MPActivityViewControllerHelper+TweetShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB939DC78F393B43E92E0FB05770983 /* MPActivityViewControllerHelper+TweetShare.m */; }; + 6A2448AFAFCC00E1B8368FF5EFA718C7 /* MoPub_AvidManagedVideoAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EF4B298895D0E56F0362DA482C2E50F9 /* MoPub_AvidManagedVideoAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A29AA6B2FD03601D4680FEF5F5EFA2B /* MoPub.m in Sources */ = {isa = PBXBuildFile; fileRef = BD9C1DF434F83C00700CF117FF425DB8 /* MoPub.m */; }; + 6A8B75FF479CEE94559AB64BC1B9A338 /* MoPub_AvidVideoPlaybackListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 02A461C927F19BA74ED2B3B1FD6D363A /* MoPub_AvidVideoPlaybackListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AC0061C76FB25E31443DFD585F5A650 /* MPInterstitialAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1985E0C78A859F8865BB6FFD8D8426FB /* MPInterstitialAdManager.m */; }; + 6B1AAC720701D6697516DAD43ACA5FC1 /* MOPUBNativeVideoAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F4AF64484FA6C4C72A88B5A81FC06A22 /* MOPUBNativeVideoAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CC0EA8713EEF301A8F68935281D7840 /* FBSDKLoginKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E24598D1166C6CB4DA92BD9814FD41A6 /* FBSDKLoginKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D58C3431AA9E9984CD4987951D60C2F /* FBSDKURLSessionTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 07DF861E50FDA73373DDBB39815BE748 /* FBSDKURLSessionTask.m */; }; + 6DC16B6B39101A586900E6E5E279639F /* MPNativeAdSource.m in Sources */ = {isa = PBXBuildFile; fileRef = A68A055AFEA93ACEC7BF5DDB1869A84B /* MPNativeAdSource.m */; }; + 6E7CF151057F96CD1D8C0276E9332726 /* MPBaseAdapterConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CD6E18FD964B70B08F9D4BAF828DE52A /* MPBaseAdapterConfiguration.m */; }; + 6EAF2AF0CE0F9D405FCF151BC4006BCF /* MRController.m in Sources */ = {isa = PBXBuildFile; fileRef = 39407006E9C1FF3993373B817535A159 /* MRController.m */; }; + 6EC8F1E79495D3C82BC0922F64A9304F /* FacebookAdapterConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 733FF0A63A5E63E32114A3C475C99754 /* FacebookAdapterConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EFF6B10AEC0BD068920F49B3AACF748 /* FBSDKTestUsersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 501C8A534911DE7EE7D1963C96491CCD /* FBSDKTestUsersManager.m */; }; + 6FC30E7D5FE7048D1BE0AA0FCB650F8C /* MPVASTResource.m in Sources */ = {isa = PBXBuildFile; fileRef = 123829815E6758EECE5329D5D0695C78 /* MPVASTResource.m */; }; + 7099BD0E45302A5AEBB4813103C1C79A /* MPNativePositionResponseDeserializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F869F13A5CB9EF708A2048E0FDBECD /* MPNativePositionResponseDeserializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 711EAB36727C177F69C6D454D656D438 /* FBSDKTypeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EE4FC4EEB6833099B0A9C54CF6172B4 /* FBSDKTypeUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 71325B3E0CB811C679E86F8E07C9835C /* FBSDKAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 75B6D835E7193BE0204A3D61202D407E /* FBSDKAppLink_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 71586277FBCF79A1B72BDD4B2BDC2FD2 /* FBSDKStandaloneModel.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D8513A607D2B16709BB101D5508D44DA /* FBSDKStandaloneModel.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 726DE02C0632561539CB38CDAEA6BBF4 /* MPUnmutedBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D4D992CA6571C5391FFA64032BCA6243 /* MPUnmutedBtn@2x.png */; }; + 733C1410A5EC2221CF95DDC44D66499C /* FBSDKURLOpening.h in Headers */ = {isa = PBXBuildFile; fileRef = 68428AFCDE9D2DEB6121FF80F9B35883 /* FBSDKURLOpening.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 73CA1C6E7DBB28C4CC3BF2593AD2A5C6 /* MPNativeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63955E4F4F737B6D06DB1DF034B512BD /* MPNativeView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 73E1A4B6D6A6876560B4026D8E19F6FB /* MPConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8431C448F404B803148A5FBBF4548F /* MPConsoleLogger.m */; }; + 73EC7867EAAA71D94DCAFD25E16EACB8 /* MRBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F0669EE3EC010EB3612C96F6C48C04B /* MRBridge.m */; }; + 73EF6B3A1D33BCFD79FB052240F3CD68 /* MPConsentChangedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = F2A412F43B948AE0A464C0308714FE7E /* MPConsentChangedNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74630B58C9452458F2A473C0E329A91E /* MPBannerCustomEvent+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 33669BB30B376F1408C10B5533132475 /* MPBannerCustomEvent+Internal.m */; }; + 746AB91ED4ADECD514BD1364B239E9A0 /* FBSDKLoginManagerLoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 52298C7973616671B3B0DC5A5E8EEB07 /* FBSDKLoginManagerLoginResult.m */; }; + 748E1804D7E1DBB8579F680A9446BCD1 /* FBSDKDeviceLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DB2F2CB13781974D8A3D698D7089D6D7 /* FBSDKDeviceLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7493751D7E49D768C9BB556F1D2CC4CD /* MOPUBNativeVideoAdConfigValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D593E87257D2B9DB07FCE7060091E8 /* MOPUBNativeVideoAdConfigValues.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74C6FD9A74D5F484569D232DBB9928B1 /* MPXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D03154A17F2B2C28AEE2D661970B5F34 /* MPXMLParser.m */; }; + 753FFD3F748311837199510717F4E9BD /* FBSDKContainerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 225106CA0823A9905BE0CD0368475E58 /* FBSDKContainerViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 75E13B9C4291B650E1BF1948B423B8F8 /* MOPUBDisplayAgentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DA1F94AA1105EE86DF528ECC851CCCB /* MOPUBDisplayAgentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75F7487E11C96E66D980AACFE724155B /* MOPUBAVPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A9B4D11E50A089C4254DF5B9096019 /* MOPUBAVPlayerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 767C078B4C6A22B2E4D5878C5BE5B936 /* FBSDKCodelessParameterComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 297EC840D807B17A80C220D7D7C6AFAE /* FBSDKCodelessParameterComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 7694323A7175031EA979F1A00678C48C /* MPMediaFileCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BB914BD29A63398B1F2CBBC026F74DF2 /* MPMediaFileCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 778EFD2D0AA5936ABE6FE664AD0A9D35 /* FBSDKAddressFilterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E68D0E0DE2AFD94D3318C95D0284F2E4 /* FBSDKAddressFilterManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 77D29D76701215399A6D5D8C06E606D5 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBE09AD2DDB03674EF271071D0D19A41 /* SafariServices.framework */; }; + 7808ABF0A64A9F2593D97822452C0C06 /* MPMoPubNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = CE9290ABC6DC55518EEB631DE2828222 /* MPMoPubNativeAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 781E1C1849E6C579984EB82795A9A3A7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCD2FB4B26D095833E2EE883574545E3 /* SystemConfiguration.framework */; }; + 78897DEAA59A931DD8AEB98F6800D68E /* MPConsentDialogViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B4106CEC5B3A50684F2092D75E32E70B /* MPConsentDialogViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78CBF367C2EECFFA094EA7B0F097B5C7 /* NSDate+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B18350657A3A8ABB3A902CE3B364DD /* NSDate+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78F6242031052C0C8065AC4E62E70188 /* MPNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C43A134B25A805A03D18DB19ADCA9198 /* MPNativeCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79E8BC9D4032F60C836D16483CE4D9D0 /* _FBSDKLoginRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = C892A98B14CEBE998FB1D05EEEAAAF8C /* _FBSDKLoginRecoveryAttempter.m */; }; + 79FB8A111C842F3F6EF6117A65F2E99D /* MPImpressionData.m in Sources */ = {isa = PBXBuildFile; fileRef = FCB56E23BB027CBC50C8DDF6A79124FA /* MPImpressionData.m */; }; + 7A05F477B97C73CC78B472F515A52B1B /* MOPUBPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 672D07CE3FF65BA9CB60B288645971A4 /* MOPUBPlayerManager.m */; }; + 7A4E77DA4FC04AEA1E75266D6603F3E4 /* MPVASTCreative.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E108A00A30A1176AA41EB15C588B61C /* MPVASTCreative.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A5E9BA2743A6279BD278102DD2DB2E2 /* FBSDKModelUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C68E169BD7D0C6446FA7DF0CBE1A5F3 /* FBSDKModelUtility.m */; }; + 7B2245D85819B6D853DFD4768E7B4A09 /* FBSDKBridgeAPIProtocolWebV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D61BD893A557F7BFFA3B588C8B2F408 /* FBSDKBridgeAPIProtocolWebV1.m */; }; + 7C57ADBE382EC7D9FB9C82A0ABD222CF /* MPVASTCreative.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0F58385DA596725A53D3859C3C8C68 /* MPVASTCreative.m */; }; + 7D83204DE28936E8D78A92A1726F72AC /* MPNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = C4BB57E032320280EB787306526155D0 /* MPNativeAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DC330235E15B8DF43B1AA68C2C23B9C /* MPCollectionViewAdPlacerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D843C258AB8E6AAC8E061D79A1FA89EA /* MPCollectionViewAdPlacerCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DD7A8920ACEE56024676881B5539562 /* MPStaticNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = D64DADE6F35CD7BB28FBC0C6FA243CFF /* MPStaticNativeAdRenderer.m */; }; + 7E1D26FE680300C8806C666EA6D583EE /* ActionSheetLocalePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 57E4BA6C3815CEDA62CAB177D7EEAB4A /* ActionSheetLocalePicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7E6FDA138ECBA7FCFE765F80ED207D00 /* FBSDKDeviceLoginManagerResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BEC10D6C2ACE52A5E9223BC72F8E312D /* FBSDKDeviceLoginManagerResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E81C54E5A6FAF7E71DC95B29EEA84F6 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCD2FB4B26D095833E2EE883574545E3 /* SystemConfiguration.framework */; }; + 7E89EAA274BE2B10022D9B3E8BC8441D /* MPPlayBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4C4E32AB70900964EF850E599515ADD /* MPPlayBtn@3x.png */; }; + 7EB36B65E3C197BDA6BF5697C763EB33 /* FBSDKAccessTokenCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 44E0A21EC0F4A731E9444C12ED0E22A2 /* FBSDKAccessTokenCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 7F347E726A5B29C46ABEB4AA241A330B /* FBSDKCrashObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED68CA23FE476261775E003BCCFC40E /* FBSDKCrashObserver.m */; }; + 7FEBF4EEE7965D97B113497F4F08D83C /* MPAdAlertManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FBD33928A78E754BB3CF85BE4C3FDC /* MPAdAlertManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8006C1D3E2C81F3D262556E41B5619C6 /* MPNativeAdError.m in Sources */ = {isa = PBXBuildFile; fileRef = A3477F3D06F7112D3BE6CB6730600DF0 /* MPNativeAdError.m */; }; + 804B7A7A3554377F87BEFE7A5B3E686D /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55571D176840130F668ACD8891B32470 /* _FBSDKTemporaryErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 80FFE96C93D46CE6A8BD9EA6F28BC425 /* FacebookBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4150FB417868D4A7CFE38CD02B684ECF /* FacebookBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 817276D4EA1F987BED80809EF03D7730 /* FBSDKApplicationDelegate+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 27084E353C63925CEF2CF423422FD215 /* FBSDKApplicationDelegate+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 824BF771FCF57C0C182871F3B57C68B5 /* FBSDKBridgeAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 488E86747EA40209D2EC0C54B7CA8462 /* FBSDKBridgeAPIRequest.m */; }; + 8349EBD3335BD66A66C2ED4C0E12BC7D /* MPInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D8ED3FA8E3FC87CD92BDEF8306C0F33 /* MPInterstitialViewController.m */; }; + 83F82F9E24C4D8DF24FDA4A702136488 /* MPAdTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = E14BCF6C93261D2D3511D75AE2FEA0FE /* MPAdTargeting.m */; }; + 8505B82FFDB7CEB7AF2CF10DE143E342 /* FBSDKMeasurementEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E3784BFB1E4CD98BEC2FA444C5EC96 /* FBSDKMeasurementEventListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 853DBDF36308091F44B9BE359CD1F85E /* FBSDKRestrictiveDataFilterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D54DCF433B650978B2BE021712703EFE /* FBSDKRestrictiveDataFilterManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 854DD3D739187EB98A8CA8951816A7A6 /* MPDAAIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FFECA745E4E127C05F5043F8A435FACC /* MPDAAIcon@2x.png */; }; + 8555C431D4740655C8447CD66BB74038 /* FBSDKTriStateBOOL.h in Headers */ = {isa = PBXBuildFile; fileRef = 378DB89FEFF9BBD1FB03532BD5A36DB5 /* FBSDKTriStateBOOL.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8559003F0CFE87A98EB2FFCC5561D7B5 /* FBSDKCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 05E2C3DFD00A7C22FD11778C080669C3 /* FBSDKCrypto.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 858E64D71F101C506406D4D04BE34560 /* FBSDKMeasurementEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = EA65880AF47FCC8B0BC6E2E129C16546 /* FBSDKMeasurementEventListener.m */; }; + 85A28D5F7B3F5006696C629047C9AB88 /* MPHTTPNetworkTaskData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CCC6D9B6582B2944D8D3CDF726C3D7E /* MPHTTPNetworkTaskData.m */; }; + 85DF52AA1E078B55BE63B8BE7969D85B /* FBSDKCodelessIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F3802F629F41A555BBFA1B51D8344E /* FBSDKCodelessIndexer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 862A5DA61C28D4C7BD936893656373BF /* FBSDKBridgeAPIProtocolType.h in Headers */ = {isa = PBXBuildFile; fileRef = 48D19D7EF75807769915FD51960E3F94 /* FBSDKBridgeAPIProtocolType.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8683D8486220758D2D67E4C8C4A73980 /* MPConsentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 70EE9A5E8A0D640EB95232BEF4529A9D /* MPConsentManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86851C31BFD0A60145CECEF9E30DEBCE /* MPBLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F432D8890E5C58E8F9346D22CFA439E9 /* MPBLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86DDBC7D015B17059B6F59072C6C1FF5 /* MPViewabilityAdapterMoat.h in Headers */ = {isa = PBXBuildFile; fileRef = 777F01027D6974230DFE5AE5103EA09B /* MPViewabilityAdapterMoat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86FEB4F55F75A813B4282B7FEC0AEAB7 /* MPVASTIndustryIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E2AE5344FCBE356171F0BAB71E0E856 /* MPVASTIndustryIcon.m */; }; + 8737077302181C5CD1954DD9E021C4E4 /* MPMoPubConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC658E0FFBADD4F78379492E9D4303D /* MPMoPubConfiguration.m */; }; + 8813D5F3084F274EF427579491A137C8 /* MPAnalyticsTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = C01431716813CFFBA7A4D5A45ABF51B9 /* MPAnalyticsTracker.m */; }; + 8841C5C992BC89A040D8610CC08F83D1 /* MRController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3222A660AA76FDE4042164F5211E3770 /* MRController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8864F1B9EFBB01C0FD97E2979C2AAFE2 /* MPBaseAdapterConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = A03F02892CF56F0F8ECABF0B778A87A7 /* MPBaseAdapterConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 886D8BF5EE3FDCC2B1E34D66E0E343D9 /* NSError+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E8EFAB0C262822AF60ECF9D9D1C082 /* NSError+MPAdditions.m */; }; + 88CAF50E7B47E012C340C46F3C8940B4 /* FBSDKLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A465A3B2B6F28AA4A989CF1B8CF1F09B /* FBSDKLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 89267435178CA68399198F8EEF4F3E22 /* NSString+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 253B55A5F9C406C5541903CC8F45B708 /* NSString+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 898E3DBFB33192D735C9C26C0A24B3C0 /* MPNativeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FA399F7C9FD2D0836E0666ADAA2354C /* MPNativeCache.m */; }; + 899C6CAC4D19F0735AF8BDD7AF90B1F6 /* MPRewardedVideoAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = D0DC89E0B3F421A54F512B482427D6BF /* MPRewardedVideoAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8AB0CFC27BC146E29BC6D6B6D400621B /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 02696A1E9673DABEF9C32A2FC7DDAB33 /* FBSDKHybridAppEventsScriptMessageHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8AF367C4169DAD3CA7B92847F191EA18 /* FBSDKCoreKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D085AA2C86D826CF02F11DAEBF133AC /* FBSDKCoreKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B7109D912478AEFD484A2F779E0EF84 /* FBSDKLoginButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DFE1C007297070AE92A8FB89AA7D038 /* FBSDKLoginButton.m */; }; + 8B7EDAC95B7EC47A24E2856FB2FAA891 /* FBSDKMonotonicTime.h in Headers */ = {isa = PBXBuildFile; fileRef = B04B3681D9ED0D6FE3ED94F48426B75B /* FBSDKMonotonicTime.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8B95E73264E738625B624A6E46042D5B /* MPNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 78A9A16575459C01B0D806781FA91BE6 /* MPNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C6C0806DB2B7E1B6BF730C3DAD40C6E /* FBSDKServerConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 110EA9182671792B69AEC591C4944AD0 /* FBSDKServerConfiguration+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8C76D7F03212DD8A8F6EE1CE9A24543F /* FBSDKLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59C7897821E3E63040B9EE7D6C762F8E /* FBSDKLoginManager.m */; }; + 8CE89C00B5B29B8C31C8301894C5FA9F /* MPLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 79C95AF9466B4CA8F786C16186BC2133 /* MPLogManager.m */; }; + 8CF1CACB012A40FBC7A73BD745892939 /* MPVASTResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EBE8A5369286502900D0FF7E9636017 /* MPVASTResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D509A021EFDBAC4F49D47574975BEF5 /* FBSDKBridgeAPIProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF465F0A77A164FE8153BCB13B1ED10 /* FBSDKBridgeAPIProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8D5A0313D4FE1087442735B5598A43FE /* MOPUBPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7CEC3B8B46188033AD5A867E690AE5 /* MOPUBPlayerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D7A43A9B2B9130D653B8A7B72EAE521 /* FBSDKViewHierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E259E6E3D19C982AFA51B732ABF05BB /* FBSDKViewHierarchy.m */; }; + 8DA11A26C3945AF76105A9CCDBBDABB6 /* MPVASTMediaFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 9295D48241321877C9FE74BC6AB6A0C9 /* MPVASTMediaFile.m */; }; + 8DCCB306BA52E23F376378DF5C03630F /* MoPub_AvidManagedDisplayAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A2D20D7993E608818EF3AF40F0BDE0 /* MoPub_AvidManagedDisplayAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DFC7686165EF5FE682F714AA4F70712 /* MOPUBNativeVideoAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 943C60AA863EF1CE4BF6E79443FB8AD8 /* MOPUBNativeVideoAdRendererSettings.m */; }; + 8E137DC5E8951A24AAEC957BCB6559E8 /* MPVideoConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D148011ADBC4DB85E3A8208E165BDC /* MPVideoConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E2A08282A2070904B1E08640D9F87BE /* MPUserInteractionGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 775479F1B123573F2321C2FE7ADD8528 /* MPUserInteractionGestureRecognizer.m */; }; + 8E2CED11F9946D5A0FA12AB52A71E6AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + 8E5820C207E42B0DEA579571B1209DF1 /* MPActivityViewControllerHelper+TweetShare.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D3C0EED3BAA5ED67B96FCF0713D78FF /* MPActivityViewControllerHelper+TweetShare.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8EE0E622983E6E9B69C41AC47D6846E1 /* FBSDKBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 04461A55626848FDECB4D6696F42E123 /* FBSDKBase64.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8FA0C73F0245B15D0F0431EBE81EECA6 /* FBSDKCodelessPathComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 348C45134BA2B908CBBD2CABB7180211 /* FBSDKCodelessPathComponent.m */; }; + 9029916FDD5DCCB4D78C6012D41590DF /* MPReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E27063B51D90CBCE78AF2B83B072C0 /* MPReachability.m */; }; + 9044E7DB3D14ABDFCEB2ED2669056D60 /* MPVASTModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 96D1FB37A3A92C36D6EB3219C1B36AA1 /* MPVASTModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 904EDA9F1D6CC4ADBFCBE471547FD3C2 /* MPNativeAdConfigValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 3381200DCBAA53514E00DE88FBB6A11C /* MPNativeAdConfigValues.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9050E939BA0F6B2FBFD1B777DBE13E88 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + 906BD1BF0FBBA09FB2FA44F1E3329F18 /* MPNativeAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 5184D952BECA90E5A4B5D5470129725F /* MPNativeAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9084B34C40D45898E85F699B20079482 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = F7139F7CC8146FF584A83ADDCFC010B7 /* FBSDKGraphErrorRecoveryProcessor.m */; }; + 90EEF58EE06BDAD60AC49C14DBD1EF92 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3156DBAB3A2BF6A7FE510D9D3619F782 /* MediaPlayer.framework */; }; + 91A86F111D1DF064A1A6ABD11354B068 /* FBSDKLoginTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4710B010F3CBE25B1A77094DC1255A9B /* FBSDKLoginTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91D2FF6842C88F477E7C2067381F13D2 /* MPCoreInstanceProvider+MRAID.h in Headers */ = {isa = PBXBuildFile; fileRef = 3553067D69289A14BF958D4CB1A769E4 /* MPCoreInstanceProvider+MRAID.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91ECEE7D67DB91CAE00CE4F7F626A841 /* MoPub_AvidDisplayAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A0C8C574B881BB5E7514975886865A3 /* MoPub_AvidDisplayAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 92237C7EAB3E1009AB7F6C72A90814FA /* MPNativeAdError+VAST.h in Headers */ = {isa = PBXBuildFile; fileRef = 46EC0D2DD50AC9981E42A59136E366A1 /* MPNativeAdError+VAST.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 933D8B3D494AA2ABBF079AF5B64737B8 /* MPNativeAdRendererImageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D73DAFD979E01E211CBCCC3F3D5FB35 /* MPNativeAdRendererImageHandler.m */; }; + 93418BCD4C1A01F71B3DEED73DDF6AC2 /* FBSDKAppEventsState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7799C1A9ED6ACAEB8C73CFC969D35455 /* FBSDKAppEventsState.m */; }; + 949A8369F2434A250DAD664A212D14CA /* MPConsentChangedReason.m in Sources */ = {isa = PBXBuildFile; fileRef = 4055012FAC722795AA7452ADD20EAD9C /* MPConsentChangedReason.m */; }; + 94A4538D76D3E96D6A3ACFB8B864F398 /* MPCloseButtonX@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = E480E0ACD2323B6A2EDD1F1865F6F9DE /* MPCloseButtonX@3x.png */; }; + 94A6877945A38755C00F1F459BB407B9 /* MPMutedBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 66972B12227B9E93D7FAC0A8CD8356D5 /* MPMutedBtn@3x.png */; }; + 94CD717F0AEF4E8A2BF0153B6B62E9A9 /* MPLastResortDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C19EF40F96FF83DBCD40007BBECEA746 /* MPLastResortDelegate.m */; }; + 94DBAA96B2E94B3EDBA5CE812B5871C8 /* NSMutableArray+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 06757E5666943EE6196D8B301E12AEE1 /* NSMutableArray+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95C423F3B5A89F1F63C55C222E5B1554 /* MPIdentityProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 70A74EA69D29EEE2738DB05AC058A94F /* MPIdentityProvider.m */; }; + 95E36714E71DF039CA75C2ABAD950485 /* FacebookNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = D619BF41E829342FD8A2D2A80B3C5333 /* FacebookNativeAdRenderer.m */; }; + 967EAD0A3C269D5250C44C5912A23918 /* NSHTTPURLResponse+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5723C12544848708ED3A50705397BB9D /* NSHTTPURLResponse+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 967FA55DAFAFF5EF8775E012E0F6F29D /* MPInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F58F9028375B7C2D62CFC9C646ABD50 /* MPInterstitialCustomEvent.m */; }; + 972501C66BD0378911249362C6CA68B3 /* FBSDKLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = A7E4B2EB2EB3911221EE5B823DEB0718 /* FBSDKLogger.m */; }; + 97E49FF7D423C8596409D2773EE384CA /* MPStreamAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C449BA26D872881ECD678859C27B43 /* MPStreamAdPlacer.m */; }; + 98407617BFAAEBED0A6C833724A0BE87 /* MPBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 777C16BBC363F0C83179312D32086A56 /* MPBannerCustomEvent.m */; }; + 994643393FF400075BDD02041BE1DA2E /* FBSDKColor.h in Headers */ = {isa = PBXBuildFile; fileRef = C76FD70E0AF203EBF7AD305BF2556352 /* FBSDKColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 998F60E61CA9E5FBBC160C4C28B4042C /* MRVideoPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CE1CF550E23B510D2C6F68F29A7AD03 /* MRVideoPlayerManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A1FA421DE5BBFD68E5FCEBBED07DE16 /* FBSDKInstrumentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53F0B0735D8A3242B97FF7CEB9C29047 /* FBSDKInstrumentManager.m */; }; + 9ABB7E62F358F48B6A6AD16DF8BF210C /* FBSDKUserDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E6CEA7C7EF38700FEFC5CCF29FCE88F /* FBSDKUserDataStore.m */; }; + 9ABBE2C39CEE6C9E41DAC57B6055228C /* MPGeolocationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BA6157D1625CEC0C628D38D222EEC62 /* MPGeolocationProvider.m */; }; + 9B13B2B8FB13FD4B5C1DCA3D67F4CD6D /* MPAdConversionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = DADD834F93E695F68C1379C591E7B845 /* MPAdConversionTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B2C62C7EE304DD76D2F83E9127792FD /* MPConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 593BE715D12FA111F2FBE47ADE8AC9A2 /* MPConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B534D1930CE25D36AF3C3918A8C7636 /* DistancePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BF3A43B2EA317162AC3CCB54B5BD6E /* DistancePickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9BA3E0E9A45078DB22331D8AE17C4848 /* FBSDKWebDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B51958FA5570084434E46FD5CEB51B4 /* FBSDKWebDialog.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9BD272B22C532336C1E249CF98B3904F /* MOPUBReplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 63C13850004ED10B7D1451A1332C3FF2 /* MOPUBReplayView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9BDE03A113BCCE93A024C249A4FF1F11 /* FBSDKAccessTokenExpirer.m in Sources */ = {isa = PBXBuildFile; fileRef = DA7B4355BFD9D18ADC15C7646FC9E971 /* FBSDKAccessTokenExpirer.m */; }; + 9CBE20164098E0D4DE97DBA4DC0FB9C0 /* MPAdConversionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 481EF3FAD79EB451F840E84E750B9974 /* MPAdConversionTracker.m */; }; + 9CD1BBBB6E89BF8600105859667911BD /* MPAdServerURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D49BB12C479517F693968E77057F55D /* MPAdServerURLBuilder.m */; }; + 9D2F64261FFDFE9B4C67BF15D3980B7F /* MPBannerCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E7BE70F36A2033F11FAACC1DC86E909 /* MPBannerCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D46CE25D319B6DECD64B62C6AF66B70 /* MPCoreInstanceProvider+MRAID.m in Sources */ = {isa = PBXBuildFile; fileRef = 24CA4B2A7047159346094DBA275C905C /* MPCoreInstanceProvider+MRAID.m */; }; + 9D89CF11DDF50A71681215A6B00571E7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E67C7E0311D18E5905370B8D8AAD9934 /* QuartzCore.framework */; }; + 9DF307F86061E2716C3E982229D9AADB /* MOPUBActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = E41120F51714C91D6F930D4C4CED9448 /* MOPUBActivityIndicatorView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DFD96064F31C20AA5970AED36ACAA83 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 279CB81A80DF1E1FB11A341C5DCA3788 /* UIKit.framework */; }; + 9E00C23C1555AA3D7604A3655CA595F4 /* FBSDKAccessTokenCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 06AC4DC227D4B1E16D53F079EDDAEA8C /* FBSDKAccessTokenCache.m */; }; + 9E2A96AFCE9CAFE79B2C403AD9141283 /* FacebookSDKStrings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BE4BA4E04D1FDEB4A08DAA37DB048A77 /* FacebookSDKStrings.bundle */; }; + 9E681A9E18BEFF00C5980154AFEDFF4D /* FBSDKAppEventsDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E4FD2174FAF8D0EE2345C15BA850205D /* FBSDKAppEventsDeviceInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9EDA2048D01FCA6820F83E7D6A2821F8 /* MPNativeAdConfigValues+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CA63F538A0BAC2E440F16A216E0375BC /* MPNativeAdConfigValues+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F0FB121CF133CF44B2FD7C516139F12 /* MPWebBrowserUserAgentInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C23D5519090AE7A2791FB566E69A5EC /* MPWebBrowserUserAgentInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9FF2AC925005FDE7E4235E5F61778877 /* FBSDKInternalUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 323FCD99E8787D4E0D81E6B1F3118469 /* FBSDKInternalUtility.m */; }; + 9FF7927C0BB5D85D2478956062AA65C2 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AA95A2DDFE61900F052C891C37878E2 /* CoreTelephony.framework */; }; + A011267AF3857695A23B69529364B327 /* MoPub_Avid.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F76FE05C3A10B10D401A281E37400C9 /* MoPub_Avid.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A05F1219176C7E28D47B8310BC89D653 /* FacebookNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BB07E018E8B94837165D71C4D9229E82 /* FacebookNativeCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1476CDB911EC2BDAC4A4F5A85375A90 /* MOPUBReplayView.m in Sources */ = {isa = PBXBuildFile; fileRef = E862213BC8437635BD90EE2AE196B93B /* MOPUBReplayView.m */; }; + A1692F3790586764CE8EF77063F8C51C /* MPCoreInstanceProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 38C83CCDD174A0877B3A34F444A927B5 /* MPCoreInstanceProvider.m */; }; + A1B66BFE9F6A50AC7DFC9A1A5A0CBB51 /* FBSDKCloseIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 09001803CFE588FF690919A09DD61453 /* FBSDKCloseIcon.m */; }; + A1E9D903AD5CA376C03D69F39EF32A6F /* FBSDKURLSessionTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A439B067378E5ECAAC8167747EDF530 /* FBSDKURLSessionTask.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A24AFB37CD3D65296C23D68A6673FF81 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA6846AAECE0D64B6E28A5F615BFECE /* FBSDKAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A2D462DCDA3A70993D0CD983239D8356 /* MPRealTimeTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D607DE87A2DDEC9FC7F9E145507C57 /* MPRealTimeTimer.m */; }; + A2EF899BC769BEEE288479DFF2772F41 /* ActionSheetStringPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1157A8F98AC3F381302EEC958F1CF015 /* ActionSheetStringPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A323F77BB0C39585F5063E5D1F4C7CB3 /* FBSDKEventBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = D280B520676BCBE4BE0C4A73EBFCF93D /* FBSDKEventBinding.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A34BDD9B0D93EDB9B94080CA2A20ADE2 /* FBSDKAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DDA4F6DDADC4B7C7845788A03C85A74 /* FBSDKAppLinkReturnToRefererView.m */; }; + A37CE5B8694D24797927B895F023845B /* MPIdentityProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 110523D99609BBC332C17E07B6B8828B /* MPIdentityProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A39BDB2A0D91CC6715B22561966A0A7C /* MPCountdownTimerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 429F6E9B5D6776BA92727D1A976B6C7A /* MPCountdownTimerView.m */; }; + A3C941B39195C129893BAF39D06E7DBD /* FBSDKLoginError.h in Headers */ = {isa = PBXBuildFile; fileRef = CE4FED88BE35D1B2E13FD57E2967329E /* FBSDKLoginError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3E97A31D3756E1D02A41144E4AED2A6 /* FBSDKMutableCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = EF7738EEB176B4C37E08A1CFA535CAEE /* FBSDKMutableCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4517C16A5981529EDD39D09BBAE106E /* MPInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B40E47DFA15A97FC8B30D4E8BF2407DB /* MPInterstitialViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4570302110B5FEF5C0E3A30DD218910 /* MPNativeAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C0F422BF024FFADE6E1DCA93A9D9392 /* MPNativeAd.m */; }; + A4B3BFD200AECF01E889D1161B17B8A2 /* MPAdServerURLBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = D17ED6E113B47357BC1B1C19C5C92F40 /* MPAdServerURLBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4BDF3A7DF9F9E4587DAE238B8BDDAF5 /* MPPrivateRewardedVideoCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EF1E0E526F9393A3082A02D9BC62D815 /* MPPrivateRewardedVideoCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4C57A541753427184E516AEE91E43D5 /* MoPub.h in Headers */ = {isa = PBXBuildFile; fileRef = E1ED39001A78BBFFCBF1F48878403C27 /* MoPub.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4CD07154114E828A14B3FBA023A09B4 /* FBSDKModelUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E81BA723F41409BE9A16A388DB565B0 /* FBSDKModelUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A4D622FD6F5BFB399FBCCD258D3A98BB /* MPMoPubRewardedPlayableCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 901F47300BBE057457E27F80A648E15A /* MPMoPubRewardedPlayableCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A53A618100745FF5C40CD5CCBA28138D /* MPRateLimitManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FC8ECB0B0AC2F04D218EA34CD8D7CF9 /* MPRateLimitManager.m */; }; + A55E5603D2C6F3C70C6BEE3F891413C8 /* NSBundle+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5CC01AABDBC06D4379BC716186E002 /* NSBundle+MPAdditions.m */; }; + A565BAAB2D5826C6D6E9395049E475F2 /* MoPub_AvidAdSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5E4C3AE4806DE03A7B41F1C28EC893 /* MoPub_AvidAdSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5777451B6F23747D746F47D4238132D /* FBSDKBridgeAPIProtocolWebV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6243759D9403FA1910870052B4B7DC /* FBSDKBridgeAPIProtocolWebV2.m */; }; + A58838AFCF70C74948457AB635A8F5EE /* mopub-ios-sdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FF6E8C2F6E3D4E66751CE3CDAB12D830 /* mopub-ios-sdk-dummy.m */; }; + A621829BC3E5F93D86A4D2901F7E71FE /* FBSDKInstrumentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CC4A944132D641A792C0FCF3E920A185 /* FBSDKInstrumentManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A65E7FDCCCECA91A201156DD09CCF137 /* MPNativeAdUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 40AA539E8B036523C84511ECA73C6A2F /* MPNativeAdUtils.m */; }; + A6AA3966E3FC4FF7F0D03F23D2F32AA2 /* FBSDKLoginError.m in Sources */ = {isa = PBXBuildFile; fileRef = DB30C55E31E06B3A699CEB1FD5E79F34 /* FBSDKLoginError.m */; }; + A6C44ABECA761EF1CB3109B28AAE8959 /* MPEngineInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 53BC3CB3982B71C708D28F18038C32CA /* MPEngineInfo.m */; }; + A72591EDDA14B3E826D3BD557F237ADF /* MRCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA8F0B19D9D0B45167526ABF5B96757 /* MRCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A76CC1B8C876B1BE075BE517641ED4BB /* MPRewardedVideoReward.m in Sources */ = {isa = PBXBuildFile; fileRef = A7DAE76FEFC3D71F73225299036F4E8C /* MPRewardedVideoReward.m */; }; + A78921E1383B7EC5BDCBBFAB0A8C09ED /* MPMRAIDInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C5F0DAC6881EE657664B00EBBF94D5 /* MPMRAIDInterstitialViewController.m */; }; + A7F373A19C86747C781DEE9DD05D3E3E /* MPBaseInterstitialAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = A458F03247D14AF47B6A63934D383A77 /* MPBaseInterstitialAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A863AC82EEB2F9FAFC5D8E4105A43DA4 /* NSJSONSerialization+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BE10FE7F4AE12647177883F5827B63F /* NSJSONSerialization+MPAdditions.m */; }; + A88830E30039D2DE548EA93C695F05B9 /* MPConsentError.h in Headers */ = {isa = PBXBuildFile; fileRef = 008F93DD87706371A30DD9079345D216 /* MPConsentError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A89AB2C1170F9F9212A146C0A23CFE9D /* MPNativeAdSource.h in Headers */ = {isa = PBXBuildFile; fileRef = AC43C8DB0218F9E556E2E43641A52444 /* MPNativeAdSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8C1DFB20CDD8F99F65279D7C9105801 /* MPTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C0CC63A891D79F760E49C0FE2EC9263 /* MPTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8D12E18BCE4E2B17F0744323336B84E /* FBSDKAppEventsStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40DECFC95AD82A9905D38F840E076FF5 /* FBSDKAppEventsStateManager.m */; }; + A918586B76F072B14781AA3CF161D62E /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AB53EE7A8380257496157BD03C9AAA02 /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m */; }; + A9212805D7438FDE213D02E9EB547CE2 /* FBSDKLoginManagerLoginResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F3F179701FC208A10BCE26FC48F71F /* FBSDKLoginManagerLoginResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9A7AA092DF526C679B1AA137E08FDE6 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 200662F8DFB100E592E0456FCD3191B5 /* AVFoundation.framework */; }; + A9BE7579BF22DFBEBFDAFDB845CA690D /* FBSDKErrorRecoveryConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8723F0095B9EAF124C898CA7D78807 /* FBSDKErrorRecoveryConfiguration.m */; }; + AB059296191108CBD784A40C30AA1C3B /* MPImageDownloadQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F32A1022D86582175CCFB8976F259F1B /* MPImageDownloadQueue.m */; }; + AB0D45A3ABAB8CEA33A4C2C6682594ED /* MPURLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D1C4F2BDDC1A2DAA7C9EF6A4DE772FD /* MPURLRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB50BE1BFFB89FB20A90B80302EE2D87 /* FBSDKBasicUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = A1F79B81F3521071C1B3CC59DAE647C5 /* FBSDKBasicUtility.m */; }; + ABBFC1A930D22F5F17F10D1636E6C1AC /* MOPUBFullscreenPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FE2A4DCF4177B35E10F3046B363D28D9 /* MOPUBFullscreenPlayerViewController.m */; }; + ABDB485D16D893AB11EB7173B54301E7 /* FBSDKGateKeeperManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D1CD01692208ADC8B5D34E8625D1E884 /* FBSDKGateKeeperManager.m */; }; + ABE209F90E2AC6AD4076E738A272232F /* MPConsentChangedNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = FAE4E5837E2A9714C55713E81E8BCD12 /* MPConsentChangedNotification.m */; }; + AC8EBC4BD9ED76364A624C967DF95CDF /* FBSDKKeychainStoreViaBundleID.m in Sources */ = {isa = PBXBuildFile; fileRef = 41C3B8D760B02AE7B31A3F45C538B047 /* FBSDKKeychainStoreViaBundleID.m */; }; + ACE52F73FE8EA2D25FC60AA41ECBACD5 /* MPVASTWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 19FEBAF7B1AD4C939CD21F125EEC367D /* MPVASTWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACE6AA65AC669A5C047369D549D99797 /* FBSDKLoginConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 157ACB16A8CE19A04BA17469AF29C307 /* FBSDKLoginConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD569C7DABFA469E3996A349ED215993 /* FacebookNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC325E88FE86F0ED5B69CAD4C4035600 /* FacebookNativeAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD819AF5EC74A50F97D31108E7FB3CB7 /* FBSDKEventBindingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F3DB6C27D533C8F222BDA7B129D50C53 /* FBSDKEventBindingManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + AD8C670386E26C4B7958942868881958 /* MPInterstitialCustomEventAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 12664A9327783FCD1F087A641F758F8A /* MPInterstitialCustomEventAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEDA52B1C604D990C73DA8074DC595E6 /* mopub-ios-sdk-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 915F9A8728AD7BBEDE3AF872546E2A97 /* mopub-ios-sdk-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEEFFB0497E3A8B6A09A8E94E8C19381 /* NSBundle+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F538853FB162911DD9A83C235AAE34E7 /* NSBundle+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF85AD4A7EB2F9E0540339115B3C46D2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 279CB81A80DF1E1FB11A341C5DCA3788 /* UIKit.framework */; }; + B0C6DFFCD7CA4E4EC3A1E385340253C9 /* MOPUBExperimentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD8A362659C83A68FAEC6F024764EB2 /* MOPUBExperimentProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0EF1405DEBCCE2014C180CED61A5059 /* MPAdTargeting.h in Headers */ = {isa = PBXBuildFile; fileRef = 0867A32E414B06D0FD80A054063E2A47 /* MPAdTargeting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0FCD5B5793D7839B56EF408BADAF486 /* FBSDKBridgeAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 48910A90014E4A24C35BED04DFFB6183 /* FBSDKBridgeAPI.m */; }; + B1C28C8AE1C5879EFF73EB75307332B9 /* NSString+MPConsentStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D390CFF8696121F3FE27BF99A55CE7 /* NSString+MPConsentStatus.m */; }; + B21CCF8F79D8970BA8E5769C2522F5C6 /* FBSDKViewHierarchyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = F72291810FE39CCB20903C582D447635 /* FBSDKViewHierarchyMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B272DEF0933D936168CA2765BB53355A /* FBSDKWebDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C232FA77DF01FA491AAA8587CA19F6 /* FBSDKWebDialogView.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B2767BA0803662F0E5B0E1E6811B2CD2 /* FBSDKGraphRequestConnection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 95CE822433892D87233CBA161A5FA85C /* FBSDKGraphRequestConnection+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B28B1A9E4DBB0C4F2C8E268FE9C41E34 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB6CADD9DE1AD5FD17805AF92E4C5577 /* CoreLocation.framework */; }; + B2B23F791ACF16B606FE2AAD18327DFD /* AbstractActionSheetPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = C0F9BFA0A7E47A8B7BE3952A7A47D53D /* AbstractActionSheetPicker.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B36EA516901BCD3DF63C202EFE4C3C0C /* FBSDKErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D60697DE18AD8DAB499A99EA1064421 /* FBSDKErrorRecoveryAttempter.m */; }; + B37F4F53B8FA9A477E9F9D8CE100345E /* FacebookNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD67B4F78E13E576A721FDF0F147BDA /* FacebookNativeAdAdapter.m */; }; + B454D63C49ACE260B234B6DC57036FF3 /* MPEnhancedDeeplinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 51573793E30701F329FC4B585DCA9B6D /* MPEnhancedDeeplinkRequest.m */; }; + B4AB39977EDBAC669D285E0D905E7182 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + B5BB92F54F36648952B7B43C380B2E16 /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C68760CED9FB9C7AFEB3506818E770 /* _FBSDKTemporaryErrorRecoveryAttempter.m */; }; + B66AAEA5A8CEA0751854F182C211FF78 /* FBSDKMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E94E817640FE5976D2180005058D01 /* FBSDKMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B6C492026D450D440902B5F5F79F233B /* MPVASTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 6955FA68A34770181A88C0BFE3A5DE3C /* MPVASTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B6FDED9E03376A01BBCEF073F10D5E52 /* FBSDKAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = B93F614C8A2BB81E71CE9B623ACCE8CB /* FBSDKAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B764FF514CE79D03FEFB0B1C7EEAA7B2 /* MPCloseBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C800DFCE2A0755D0B5BD4A848C78EF7D /* MPCloseBtn@2x.png */; }; + B7A47A54476F57192ECC997BE03D1FF7 /* FBSDKServerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CA98E198A4B97875050B3AD61B4EBC1 /* FBSDKServerConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B7F22139B1E7A57FD250A7AA1152761C /* FBSDKAppEventsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D739482B09B77F68181E9AF62811FF5 /* FBSDKAppEventsState.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B854A85F981D13CB4A472909AAA7CDCC /* MPNativeAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D8B85F47E2DB8337E61804A6C0CD2F /* MPNativeAdRendererSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9473C65866D10C65EC505508DD26BBF /* MoPub_AbstractAvidManagedAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = F09B98D1E0717E9E51CCADA8989DB1C1 /* MoPub_AbstractAvidManagedAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9949DEA35326F5EC41F6DC03418752A /* FBSDKButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 99FA665EB2BACDB25146E5D87EBDE81A /* FBSDKButton.m */; }; + B9D4400960D54EB686599CFD0ABDF629 /* MPMoPubRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EA7D77DB3FEF0D6DC0745E21E2A0865A /* MPMoPubRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA0CA6AE91BBD4510121CEAFB8F30295 /* MPEnhancedDeeplinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D16E8165E37857ACF68A72747C36DF0B /* MPEnhancedDeeplinkRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA2DA4C9B665EF880642E42A5DAAA5FB /* FBSDKProfilePictureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71A06BB30009F32E400270D235147D25 /* FBSDKProfilePictureView.m */; }; + BA329794EDF2DD10438C7A3B4AB0C78E /* MPTableViewAdPlacerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C2ACF1656B62A5AA447D93EEEBDB8F05 /* MPTableViewAdPlacerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA63CAC6FB5ADE91742AE7885B61E110 /* MRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DECC32DB4046B242175C9C8B2A8500C /* MRError.m */; }; + BA813553A8175149466B9CE80EB91FD2 /* FBSDKBridgeAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CC4273B6C94CAA829E7BF24BE2422D68 /* FBSDKBridgeAPIRequest.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BAAB3444DCAEB195141F8B5BD6919478 /* FBSDKImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C9619FF7B8C6B9506112632C4268CF46 /* FBSDKImageDownloader.m */; }; + BAC2FB9A585F1D6C704DD6EA20D2EF03 /* MPTableViewAdPlacerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 29D7E62007F4E97F085CE0F45D5DDCF7 /* MPTableViewAdPlacerCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC5CDDB19E832B26D9BB0C2384AF4F89 /* FBSDKTypeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = D2DFE685023ECCFA9855178CC0DEE9BD /* FBSDKTypeUtility.m */; }; + BC7D5590B5C7F5585A7CFA4C75B919E9 /* MPAdapterConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 222BBC66E350FF4E01C2CD6221CD98F9 /* MPAdapterConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD4A3D42A0EA06E90FEE0E56BFB96889 /* FBSDKDialogConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEB0A8DC7879A09C054FB7C39872C17 /* FBSDKDialogConfiguration.m */; }; + BD6DD779349FC3417D505CBD1A7DA6C5 /* FBSDKGraphRequestPiggybackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B71441BCD93B2028FAE0D7909D25533A /* FBSDKGraphRequestPiggybackManager.m */; }; + BE270414FF53EAB5CD235F0E179CD5A0 /* MPAdServerCommunicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 47135979C1F938BFBAAD320D42C8D6B9 /* MPAdServerCommunicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE420C3B3B75B160F254287758A606B3 /* ActionSheetCustomPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 79559A0B662BA3EEABDF38DFD41DAEC8 /* ActionSheetCustomPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE519BCC7F2D5F0A577FEC4B8581B145 /* MPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = A404A78E5C43B4C82E8A4C589415A293 /* MPLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE9144253BEF7ADBAB00C386E5F8DD28 /* ActionSheetStringPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EF6EE8844E339C10613416C512B82E5 /* ActionSheetStringPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BEDAA29F039AF2F6B4537D6D3CDEC484 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD71A7861ADDCDA83F5979BFBC8BFBE /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF1EAA66E73F33914957FD8A152DAB64 /* MPAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B067FEBE1405CB90DE0F916EDC8F7C3 /* MPAdPositioning.m */; }; + BF5A87A4511EAFEB94E0E4F589934512 /* FBSDKAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = B6843C284E7B1E4C4C3AAC88BF5BF9F9 /* FBSDKAppLink.m */; }; + BFF8738B164BDD533AE8EE677BFC69FB /* MPImpressionTrackedNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 23285F5C86C0AD01FC461E453763B6A5 /* MPImpressionTrackedNotification.m */; }; + C0D323A7712CA108D737F65C83D38B98 /* MPPrivateBannerCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E5C0551E6E0F447355893182A32E06C6 /* MPPrivateBannerCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C18AF2F84B93E829BD8A76BD516903B0 /* MPMutedBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 204F39D6D9A79DD3781AFD897AB66B13 /* MPMutedBtn.png */; }; + C22EEF15745C025AC0DB2E048BE47BAC /* MPStaticNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B603800F1CAEF40BF5B66BF307538A /* MPStaticNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C290179051C71789BA76B2D42532D16D /* FacebookRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 205BD6AAFBB2D909CD63A91E747795EB /* FacebookRewardedVideoCustomEvent.m */; }; + C35D48D75D05B89392C23F912154B086 /* MPPlayBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 516DF1E6D460CD202A1FA8A8EEB1BEA3 /* MPPlayBtn.png */; }; + C36A59F0C45FB5EB77B24B5683F2495A /* FBSDKLoginManagerLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD77AA074009DF6C650D28555AF080A /* FBSDKLoginManagerLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C37CE38415220932B38155BD3EC5F57B /* FBSDKBridgeAPIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 62065542E1A98929CB1559E35BB6C3D4 /* FBSDKBridgeAPIResponse.m */; }; + C37D8C509FC9799E33EF27B4E371E36C /* FBSDKGateKeeperManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D8A5C8250A70C5C791AFF608EE23F5 /* FBSDKGateKeeperManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C3AC2BE0F184D30A3105B48734D05FA9 /* MPEngineInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E42F4AA85A9EE2AD782966045AAEC654 /* MPEngineInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3E612990F8C93410D0AE58D7866B96A /* FBSDKCrashObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C19D2E77BE770CDF8C2DED6FBC8FD8 /* FBSDKCrashObserving.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C405AEFCEF08D2D06D297B6B9E88BB2C /* MPClosableView.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C775F7CC59EC88AAFAE75BBD5935AB /* MPClosableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C41B538A846E32B1D3F4FF8FC3375918 /* MPGeolocationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 755B63DFE64AC680C8976B22CA5F8CAF /* MPGeolocationProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C41FA6C38085BD053D54514C75D0425A /* FBSDKLoginConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C6AEE6B0E494E78FBA2C2173B19A1213 /* FBSDKLoginConstants.m */; }; + C43DB9A6CB32185147306E589DD08B56 /* FBSDKKeychainStoreViaBundleID.h in Headers */ = {isa = PBXBuildFile; fileRef = 23677EE99356D5BA21D4ED3B199730BE /* FBSDKKeychainStoreViaBundleID.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C48876F9C3087E035993B84C3C6AC27A /* FBSDKColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C83E26609C9CE75FB7857E46CD23457 /* FBSDKColor.m */; }; + C490F00F45D01A4A560A423AA9C649EE /* MPWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = C5EEE842FD14BDABF6B75D508EF597AB /* MPWebView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C49593F0B56B8AE0ECF64F1B26A64E9D /* MPDAAIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8DF5666FA0A3694AE64B515DAAFC67C3 /* MPDAAIcon@3x.png */; }; + C4F041B195BEBE34216663CC8C14AC09 /* FBSDKTimeSpentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB91A037064C3C44641BC84A4B262B4 /* FBSDKTimeSpentData.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C54931F60BD1A00FC404048CC1A03F20 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */; }; + C5B7B84103999E2D556E3DECE987E2ED /* MPVASTInline.h in Headers */ = {isa = PBXBuildFile; fileRef = 74F8BCC2C46C026ECC22EBD02B844B87 /* MPVASTInline.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5E0CA2B3003C90D9A3153DA06C8E70C /* MPURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C746E2E0A9C781A3787FDE42FF6D82F /* MPURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5E467CCFE9B91D80955C8EF02EE676D /* MPRewardedVideoAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D2996792055AC9D459F58B61F54320 /* MPRewardedVideoAdManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C6280F50A58827241E49DD7367A24BF2 /* MPAdPlacerInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5850B55677B3029BBB8BF92A26549EF8 /* MPAdPlacerInvocation.m */; }; + C630D534C348B21A9B80C871F9B63338 /* FBSDKGraphRequestMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CD9742EDB84EBCD2D6AD5BF23B832E7 /* FBSDKGraphRequestMetadata.m */; }; + C63E819562D9C176AA89EBD61764772A /* FBSDKAppEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 09994FB7A2D472E4F66B87D155A6D13A /* FBSDKAppEvents.m */; }; + C6A820DABDB27A823C8928B27AEBCFFA /* MOPUBPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B37A1AE0F01C051CD0EACDC5F2A3003 /* MOPUBPlayerViewController.m */; }; + C72408FB97AE26D31EB56AB90C2D354B /* MPConsentChangedReason.h in Headers */ = {isa = PBXBuildFile; fileRef = E0BA71712E5371FDB33E10230DF27767 /* MPConsentChangedReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C7421D95D2E582BCCDE7E7AE74111504 /* FBSDKCoreKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 40CF1452EBFB5FD75ECADA5BBE5CD2DF /* FBSDKCoreKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C7902134DB993D0164C93F9F42305573 /* MPWebBrowserUserAgentInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7440508D561A617A31F3661D11DBE4E4 /* MPWebBrowserUserAgentInfo.m */; }; + C7C74FCC4A33AC994AAE336F7B9DBDE4 /* MPActivityViewControllerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E167BCEDF50D52BE36ED1B1EBEED9D69 /* MPActivityViewControllerHelper.m */; }; + C8ADF29930531B3202DB633F63669820 /* MPAPIEndpoints.m in Sources */ = {isa = PBXBuildFile; fileRef = 878E6082F5AC49C23F646E8D6DB65E00 /* MPAPIEndpoints.m */; }; + C8DCCD2022E5DAD88FBB81BC5C8FEB9E /* UIView+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B3D334ECEED0074F4AD58F7103C02938 /* UIView+MPAdditions.m */; }; + C991AD0A9329ADF6E8B16A4DA1B597D6 /* FBSDKDynamicFrameworkLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F42BE1CF7148411F475B7A893EFCF86 /* FBSDKDynamicFrameworkLoader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + C9D9E5451AD69BF47E3E06721493E180 /* FBSDKKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 34CA781CF32FA494FBDA5999BF916C92 /* FBSDKKeychainStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C9E2BE2935BBB95C18C90C01647BF6EB /* FBSDKProfile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B52F6C34A843E42FD64F0ED172D75F7 /* FBSDKProfile+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CA010AE74015E5834387240152856803 /* MPVASTInline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE65EF010803C6674566E2D9DE335C96 /* MPVASTInline.m */; }; + CA326429E2D92F3B5D277A7DE58C2EEF /* MPMRAIDInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FCCC13F94E233F98949445DC1B8015B /* MPMRAIDInterstitialViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA416E229DE634A723480C13C420662E /* MRNativeCommandHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 0629A4CF913403ED8BF8A587F51E5AFF /* MRNativeCommandHandler.m */; }; + CA5F17A9BFD77BE441B4E178F42D29E8 /* MOPUBNativeVideoAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E92E5EE9CA95519175CD43916EF8F0 /* MOPUBNativeVideoAdRenderer.m */; }; + CBB4D9260D03A59BFD36973CEFC47C51 /* MPAdAlertGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 837C9B637F543D90B0F18515DADC4EDD /* MPAdAlertGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBBC3F8C7788D3B7C14EA9431D57341F /* MPInterstitialAdController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17ECD05CA2ACA6D69B4BC5685C4BADD1 /* MPInterstitialAdController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC0D5667D474D47C9D19A9007C807B2A /* FBSDKAccessTokenExpirer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A4CA1A090D8369F2579AEA5FC6BAE00 /* FBSDKAccessTokenExpirer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CC7B4C736FFB0639C2757B7264151177 /* MPReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA9B99F13BC0E6806D0B5D2155F779C /* MPReachabilityManager.m */; }; + CC93F5D18EBAD6473A9A80B2463A63CC /* FBSDKCloseIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 5349F6B96CA8A47E46EA38ECF9D2E3E4 /* FBSDKCloseIcon.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CE3DA82BE50B5E3A1C23BB1E373DF220 /* MPNativeAdRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2198FEBD707153A061873D910AEB16 /* MPNativeAdRendererConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE61BCC5F7CE907728D40CCC6DF10DC8 /* NSString+MPConsentStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 60863948D4E605FFAE575ED46939DA12 /* NSString+MPConsentStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CED12A07E95C33A6F6E38332AB227EB6 /* FBSDKBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = EE0C49FA8A473D1D6E3833449EA2FA1A /* FBSDKBase64.m */; }; + CEEA193D67D9393D8A7A5440CD8D5AD3 /* MPViewabilityAdapterAvid.m in Sources */ = {isa = PBXBuildFile; fileRef = 717C7C323A9013570CD9C34AF5E16965 /* MPViewabilityAdapterAvid.m */; }; + CF75D1A3884DE92C4EEC8E69AE509FBB /* MPVASTTrackingEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A679A574C99F682298C6F165A995670E /* MPVASTTrackingEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CFE5FC7993FA7997CB86EB3015639597 /* MOPUBNativeVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F82E383530F945BF727E9A15322A4647 /* MOPUBNativeVideoCustomEvent.m */; }; + D0068271BF438A2176CAE513F6B4D0EF /* FBSDKLogo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F529CCEB89009735EBC5E0848B8C02A /* FBSDKLogo.m */; }; + D0414EEBBBB38955013EF23BC71A0C36 /* MPNativeAdRenderingImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B5EF0DA2500F915C96625ABB9C9B91B /* MPNativeAdRenderingImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0B2F480337B7A3EED740272DE79E97B /* FBSDKCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2F087C555FCCB0CC1355C58B0547A5 /* FBSDKCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0B835E099953E4BC60D54D0C776623F /* MOPUBPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC4C6AF4144870305222E06AED8ED8B /* MOPUBPlayerView.m */; }; + D0CBB65589747232A98AC1A8023D10D1 /* FBSDKProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 636A68168EC4733D9F61624E6757FA76 /* FBSDKProfile.m */; }; + D220F58AE120E0BD26BC3168EE919F25 /* MPVASTAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 22D013D7719F2E60F07C8F150F150B32 /* MPVASTAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D285F6CB2EF57198AE246D85BAF42C1C /* MPConsentStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = D43CBC300B6EAB3D1D61E89FB9FB654B /* MPConsentStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D32A1DD9868864E844603A60A5572659 /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 329F8150FA690A1AC8E66F102DC1E11E /* FBSDKCoreKit.framework */; }; + D33C29C93C0990769B0F7FAE3510F982 /* MPURLActionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D616BA0574DA45CAEFF05CD38215AFE0 /* MPURLActionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D388DF85A06EAB1B331E8BB15EFD7661 /* FBSDKSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = BC933DCA1AC52030C0D6FE0F47134977 /* FBSDKSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + D470419DDC9499F347F5626AB36A9B14 /* FBSDKSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 25D82AD06CB92CB3D706398BD0C20FA7 /* FBSDKSwizzler.m */; }; + D59951463EB36B14E5B116F76EDCAF0C /* FBSDKCrashObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 337C9E4DD15533302A7D43A6C3502241 /* FBSDKCrashObserver.h */; settings = {ATTRIBUTES = (Private, ); }; }; + D5FDF3A85F9834AF8D6534B11D90872D /* MPVASTMediaFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 966574BBF13F33EE3DD660C9DFB688C1 /* MPVASTMediaFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8E35E15A594B14172003C6487FE35CC /* NSDate+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A55BDFD69D3689D1AFA0F4CE297A5679 /* NSDate+MPAdditions.m */; }; + D8FBF90A13D05FA19CAD9A3F95117E4B /* FBSDKTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = 341F752C4D61196520BD487E733807DF /* FBSDKTooltipView.m */; }; + D922C8B8E4816C71A2224B8B8E6F947F /* FBSDKCrashShield.h in Headers */ = {isa = PBXBuildFile; fileRef = 655FBAF72D7D2F65781B5838F489B194 /* FBSDKCrashShield.h */; settings = {ATTRIBUTES = (Private, ); }; }; + D954C8A06A784E56F0C6E38407F9DD2E /* MPRewardedVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D36F30D658A2459997378A67A10691 /* MPRewardedVideo.m */; }; + DA450774BEFF3290BACAB7228E18C3AF /* MoPub_AvidDeferredAdSessionListener.h in Headers */ = {isa = PBXBuildFile; fileRef = EB21B0A94FF4B4299A6DCF6B60985AD9 /* MoPub_AvidDeferredAdSessionListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA93BCB4AB338D2564FB41ECBAE73DE9 /* FBSDKFeatureExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8264E457360906E19278556842BA058B /* FBSDKFeatureExtractor.m */; }; + DB25A0F191FC76FF5EFC77139025CBD4 /* FBSDKSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 68322907696B557517A8AE7622CCEE74 /* FBSDKSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB6A27CF25EA8027345E71BB62EB817D /* MOPUBAVPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF488C534F8903F2B100F31200CA1F4 /* MOPUBAVPlayerView.m */; }; + DB79CEA087D1AE39CD621D8C0F7EE0FC /* MPWebView+Viewability.m in Sources */ = {isa = PBXBuildFile; fileRef = 96D5B3C9355BF0FD6259C04CE54A5D87 /* MPWebView+Viewability.m */; }; + DBD7351F44ACDFC58A6D44D179E1541B /* NSHTTPURLResponse+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EB0A61CE9D2654A7A63E42E4BB9D8C43 /* NSHTTPURLResponse+MPAdditions.m */; }; + DD0BCF17F675BBC91CA1491392528077 /* MPBool.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA1D3C489B84543139AC54F16A71AB9 /* MPBool.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD2F269933E04993BFFBCF712350A1E0 /* FBSDKErrorRecoveryConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AE3B4A15ADE57DA5F1A66A470758F91 /* FBSDKErrorRecoveryConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + DDA01AF0AFAF010BB99126FB9A1C11A8 /* MPURL.m in Sources */ = {isa = PBXBuildFile; fileRef = EF63751A556A1BD133ABC30D6CA05E47 /* MPURL.m */; }; + DDEA2121BF00460785B6E133B7E88BDF /* MRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 48293070A0F825A59DA3BB37DD55A101 /* MRConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDF1FFF371F4DFD77483D5FBED95B460 /* MPBaseInterstitialAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB56BDBFFCF3B94A1D816B9260A1D8B /* MPBaseInterstitialAdapter.m */; }; + DE498982A95D2F08119B4B854E0F68B7 /* FBSDKServerConfigurationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E35CB065E29FB2533BA836083DB38C63 /* FBSDKServerConfigurationManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + DE6D300B0EF8169A7AB45B11D3E6D99A /* FBSDKLoginKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C4A859DA26526CC22A1C502E3DB6A8 /* FBSDKLoginKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF2ADA01BAE8FFB98AAA7FD20891AD48 /* FacebookNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E35005E99FA184A8812CB7DBEF771F7 /* FacebookNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF4DCB3DCE680F09750E65A4DD239757 /* FBSDKDeviceRequestsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = BACFE3B37B6AF8B884BDBC75AE53775F /* FBSDKDeviceRequestsHelper.m */; }; + E02F89B80434B83BB3853DA4CD5CBA9E /* MPConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = FE15101B8B396F7595B709AE49680129 /* MPConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E069A2F673FB814ED08DA47B804B5551 /* MPVASTTrackingEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = ABCFF4FAC93BC2C51CBF81D27E49FDB7 /* MPVASTTrackingEvent.m */; }; + E17E02BC00417D9A5EAD55B77A666EF8 /* FBSDKLogo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6F9603EDB276B5C7641C82E272DA9D /* FBSDKLogo.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E1E1F2BBCC80829E556B3728FF380B2D /* FBSDKLibAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9477445BB8D4D813D222AC484C2230DA /* FBSDKLibAnalyzer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E2A5EAF2265A65CA9769D0A6152F245E /* MPDAAIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = BC10EE88659EF168B77BABCE7022C519 /* MPDAAIcon.png */; }; + E2FB83714AC2725E53D43E1DA2B9F856 /* FBSDKBasicUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C77219B12E5D3A76DBCF836A9468E3B /* FBSDKBasicUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E31DA80F64F401E9F99818549AE9A9AF /* MPViewabilityAdapterMoat.m in Sources */ = {isa = PBXBuildFile; fileRef = 603042150D80603D987E5D656BF626D7 /* MPViewabilityAdapterMoat.m */; }; + E376898278769F32D9D5026F5728E021 /* MPSessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = C00EE2DCD9D49B863F78C6F885A7369D /* MPSessionTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E41E542C60DDCD811442E2AE0712E998 /* MPVASTLinearAd.h in Headers */ = {isa = PBXBuildFile; fileRef = E26AE9638199D65BA27C8E2B0ECCA247 /* MPVASTLinearAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E462BE763F4FA31600C8D31625CBA6B8 /* FBSDKAudioResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 116DC3DD704501DA3ECEA62915917A41 /* FBSDKAudioResourceLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E47F60210C4D4D257211E12F07103436 /* MPHTTPNetworkSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 65B45BB217FF4829276E865984B2A0ED /* MPHTTPNetworkSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E48DA8E4B267DAFA77557C3B882FA7F5 /* MPAdWebViewAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = A8D1683CF2B4C7272830B5CD282C4C4B /* MPAdWebViewAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4AADBC57A59E02C6F797100689C639A /* FBSDKApplicationObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4185FA59433F9E87FD3186B135E28C /* FBSDKApplicationObserving.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E5F626539772EC85D0AC0FECAAE88489 /* FBSDKWebDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D327794FFA0E3A7AC54F981ABC5972 /* FBSDKWebDialog.m */; }; + E6201AAE15DEFDCAC9E5E45E702C6C87 /* MPStaticNativeAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F9565EB82C022835E0A5257A2EFD1B0 /* MPStaticNativeAdRendererSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E643F1079B5FDF8F5E524211AE40DCC0 /* MPRewardedVideoReward.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF494E03636BDFC1AEF93C125FEBCF2 /* MPRewardedVideoReward.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6C5627DF1F42C53EFBD8F09B386A7D5 /* MOPUBNativeVideoAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = A7E29FA889C79F264E45301FC453ED97 /* MOPUBNativeVideoAdConfigValues.m */; }; + E73B3B5284816B48E901BB873AF2E5DD /* MRProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = E753705DBA15FA24567AC97FF80B0465 /* MRProperty.m */; }; + E762434FB8357C4EEF51A507F07A0CC0 /* FBSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = A17C7D33DE6709A50ECBE421B8E0FF2D /* FBSDKError.h */; settings = {ATTRIBUTES = (Private, ); }; }; + E7F82883E5335F6B8AF1F96C3E072F2A /* FBSDKLoginKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0BFC35340F99750CE136136ADEE7667 /* FBSDKLoginKit-dummy.m */; }; + E8867E9BAE40AB06BF3F495D967A34C5 /* MPCloseBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7E74158695DEDCDAACDBCB95DA0D3BA /* MPCloseBtn@3x.png */; }; + E89C57E5F0DEC1E546397F7B0C8B14E6 /* MPTableViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6586A589843DB8F3F358004ADC84ECAD /* MPTableViewAdPlacerCell.m */; }; + E8C975363C56DE178CAC0C48D42696CF /* MRBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ADA3CC8949A9F999611C4DF2262A3DF /* MRBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E99E9B79DE4C8B08C9E2860E0B238948 /* FBSDKImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 692D67CBA4BB1964A70203E54B586986 /* FBSDKImageDownloader.h */; settings = {ATTRIBUTES = (Private, ); }; }; + EA2232A0CCB020779946D66F22C17D16 /* MPBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C68170AE51E8A9C6B91656BBB9A92E37 /* MPBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA54E24E37FD28BE0F059B0DEF66C66F /* FBSDKDeviceLoginCodeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C4966589A48FFD501A4F3DF5F3B78D6C /* FBSDKDeviceLoginCodeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA6F781F751B13CB42A2511A0F623BBC /* FBSDKRestrictiveDataFilterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8165EC86DD47D40A6EDC50FFD343565D /* FBSDKRestrictiveDataFilterManager.m */; }; + EA7499CD2438E38933BB8B890F8612E3 /* MPBannerCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C31E7C923D59B35A34CAE619546BC4 /* MPBannerCustomEventAdapter.m */; }; + EADCEB2E23894517C29C51B41EF9F77A /* FBSDKSuggestedEventsIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A00E20D5DE70A3808DF6711419FC460 /* FBSDKSuggestedEventsIndexer.m */; }; + EB2B562C8195755A62FDFA41278E8A89 /* MPExtendedHitBoxButton.h in Headers */ = {isa = PBXBuildFile; fileRef = A5EA4BEB66C7CB06A927DA65FF7BBC94 /* MPExtendedHitBoxButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB2FA7A93337F35226BEAF61500CE42B /* FBSDKURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E8140B372BFB565A831F487A84FCCB /* FBSDKURLSession.m */; }; + EC8913260E5EFD865FFCB4FE5D27C455 /* FBSDKErrorConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 47233AF5A5CFF0E9E66C4B08D193CDA8 /* FBSDKErrorConfiguration.m */; }; + ECADF5D3E08EE4EBA2D1C72F54F19B8A /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */ = {isa = PBXBuildFile; fileRef = CE636FA26A28194374E285CACD418EAD /* FBSDKBridgeAPIProtocolNativeV1.m */; }; + ECE3F8E4E9F5F9D353E18C6630D22F6B /* MPNativeAdRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A68F24D96C2A714846BD0101868E3BBF /* MPNativeAdRequest.m */; }; + ED67F2E81742D7B483D15C0FF885E9AB /* MPNativePositionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 384B19B6C54F9385A814116E6306F644 /* MPNativePositionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ED817A7E9666C0B365AECEE707B94E9B /* FBSDKAppEventsDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FFDAA6DE15B8D7E990C8F0D00237CFF /* FBSDKAppEventsDeviceInfo.m */; }; + ED859F789A33FB57F91E9AA3626F7FC0 /* MPTableViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = A5DDBDE0EDCBBCC85F7CC5549887DA8F /* MPTableViewAdPlacer.m */; }; + ED9C531A394DB72A8638950F9EE51F69 /* FBSDKFeatureManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E012BF733FEA4F89BC9D80EA6EAE6CF3 /* FBSDKFeatureManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + EE17C766042CFEFAF58237F524639898 /* FlurryEmpty.m in Sources */ = {isa = PBXBuildFile; fileRef = A64353FF22F2A7500F0048D3A90E56A2 /* FlurryEmpty.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + EE1844AFBB3ECA923A702091DA6C5551 /* MPNativeAd+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 18B488FEB32C633B59C98DC68C21F8FF /* MPNativeAd+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE2655E9459619A2700C5C97A975260B /* MPVASTStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A73DF0C449187B9EA68A4C6AAE220C8F /* MPVASTStringUtilities.m */; }; + EEA983AEF29CE65E91369951EA4D2BFC /* FBSDKBridgeAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = ACDCEC9567F00406EC33605D23B2F518 /* FBSDKBridgeAPI.h */; settings = {ATTRIBUTES = (Private, ); }; }; + EEB783B198D694D8DAB50BAF4C80CC6D /* FBSDKGraphErrorRecoveryProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 24171AA4A463C05AD364E79706BAC07B /* FBSDKGraphErrorRecoveryProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF963020D1F4C9015F426FF4000FD2FE /* FBSDKURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 45B56CD9DF3A415949C13BCE153B3CAB /* FBSDKURL_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + EFA8A5F8C249305A5846C01945A7CD94 /* FBSDKWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D06271E8C2B970012EE88EC976B4B8D /* FBSDKWebViewAppLinkResolver.m */; }; + F00EFB863CAC794A2D5F81CC6A8F6911 /* NSError+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B35BE8B12E043B3742817CD8B61CB38 /* NSError+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0693FE70E00674E88A37ECE39F65C20 /* MPImpressionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CD7114BDD12615F4CABC9B12465308 /* MPImpressionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1B3C54D3963AC092B7007E8D17B9ED8 /* MPLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = C932706C872C628422065773221CCEF7 /* MPLogging.m */; }; + F2151BC04CD39E0DA7090A74265C09CA /* FBSDKEventBindingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 169132F7253965F74EB91AFF85485189 /* FBSDKEventBindingManager.m */; }; + F26A30A0DA5A07CA6BC786188F535D9F /* UIView+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = ABEC294AC9E3A5C3FD9ABCB63FC9B7BF /* UIView+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2D8AEFEEE3E7D818E2B7FDE236AB49B /* FBSDKAudioResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = D4B6A28BD47B735DD6580C6B750F7443 /* FBSDKAudioResourceLoader.m */; }; + F2DB1B26B70B28CE3FBF2EE1B2A9DFA4 /* FBSDKLoginManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A4DC0070F0CF1A8F2644FB9247EF0FDF /* FBSDKLoginManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F32861B7E19C50912AF2B80016F03B3C /* MPRewardedVideo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FBB8BE5B6013C39A11EB8C1FF454EDD /* MPRewardedVideo+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F35CC464259D98986B73DCC113EC5789 /* MPNativeAdError+VAST.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EC50DD9A926C0225E7D8D7C99F19B30 /* MPNativeAdError+VAST.m */; }; + F39DF214A9F312AAC64147A90E503B6D /* FBSDKGraphRequestBody.m in Sources */ = {isa = PBXBuildFile; fileRef = 50915A5B2B745F9478733D9821BF2073 /* FBSDKGraphRequestBody.m */; }; + F45B0DEDEAAD73B109EC444D31BCC525 /* FBSDKAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = B9A00D309DC505BB435B02E80959EF81 /* FBSDKAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4B0E21B16B1979ED9D7564BA5265952 /* FBSDKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 345C7F3661C9350C77DBE330548F9C74 /* FBSDKIcon.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F5C8252D886800AE115FD6775CC6A5A4 /* MPMRAIDInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E52876BE401A05D3024EDF9D2040BAD /* MPMRAIDInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5D24230C39641F78C0DA21247C3AB88 /* FBSDKAppEventsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC013846E603B0DCB2154335EF1F42C /* FBSDKAppEventsUtility.m */; }; + F5FBABCC8A78388D18BDF2EDFCB57C87 /* FBSDKSuggestedEventsIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A91CE36DBA01B4CAB82DD92E949DCF9 /* FBSDKSuggestedEventsIndexer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + F61879584F19C73EDA297B8668E6F686 /* MRExpandModalViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C6FFFEA3F59060DB53CDF59945AADD66 /* MRExpandModalViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6202B8FFE1A6FED5D8C3C4C59BE0E4C /* MPAnalyticsTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 94EBDEA67E356B45E7A5168040CA58AA /* MPAnalyticsTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6251F594B3DDB13CE089C8459537B05 /* FBSDKMetadataIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 329B67D0590B3383A55A0805548DB7EC /* FBSDKMetadataIndexer.m */; }; + F696F9D23DCC05DD6BEDA4E0D735879D /* MPGlobal.h in Headers */ = {isa = PBXBuildFile; fileRef = 198A044FC22435493B92E1EF208A9F2A /* MPGlobal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6A52B91765A3A6ABAC7699CCC444B33 /* MPNativeAdSourceQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3787CEAE775611EDFA2FE56C0C216395 /* MPNativeAdSourceQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6AC5495FB298D0D438576B99AEED3E3 /* MPRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FB6AC97DA8B6DDB58BAFAD6892BD25 /* MPRewardedVideoCustomEvent.m */; }; + F6EC932037BA6072A27C5295559DE4B5 /* MOPUBFullscreenPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C918FF7721864FFABC4CE297964C3A2 /* MOPUBFullscreenPlayerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6FBE427650698EA3FA6E82933E5710D /* MPHTMLBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 40E8FADE08C7EC74A9D73199F5F5AD57 /* MPHTMLBannerCustomEvent.m */; }; + F7180C999A5DD215C7C93AE0BEDECFBF /* MPLastResortDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D3745DCA98D941EB4F8C14DAC7633D27 /* MPLastResortDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F723CA86766868956AABD3216A8FBE49 /* MPBLogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 0085F0318135DFE58E7F516FC5DE0B0A /* MPBLogLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C9795E543C14E0CCA3DE702E2800F /* FBSDKFeatureManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C187D6D907065310867EFDA7FDD591 /* FBSDKFeatureManager.m */; }; + F77DB69CA5034CD59D4014FC0E0F214A /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 160708D4D61D75C8D96CFB2C7277FFFE /* FBSDKHybridAppEventsScriptMessageHandler.m */; }; + F81F0FE191D29B67581DA0C863842BBA /* MPVASTIndustryIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 90F86564B3EC25D60A1BD2D3E1ADB2F3 /* MPVASTIndustryIcon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F850BFA68CA30186A3118593E94935BC /* MPLogEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 313F763C5FF890729EB53A69A62C3334 /* MPLogEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F87185B2FC1341FD754AED13A0CCDAB1 /* MoPub+Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = EAC89CE26A5883DB3EEB6224E6538EC8 /* MoPub+Utility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F87C28247D0D77360C235EA063CC6EA6 /* FBSDKLoginKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A6FE9015B589E5DA446821CFB88039 /* FBSDKLoginKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F8878443E20309F3B6ADD0EBF8B73A4D /* MPVASTMacroProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9E0D2E2DD8DA0F0DD28282A817EB4A /* MPVASTMacroProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F920EB30554D16BFF1BF7B71726D9151 /* MPHTMLInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5466F3D7A3CD085C3E453B4B2C5E662E /* MPHTMLInterstitialCustomEvent.m */; }; + F9256E936E6CC61E8B3CCFCD78D0E307 /* MRCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C068E9221648C9D43880EC57CDAC05E6 /* MRCommand.m */; }; + F994C11A6B4D3C22EE4285C41F13C217 /* MPAdServerCommunicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 312F0B884CAC3F5F21BC932A402F4AE7 /* MPAdServerCommunicator.m */; }; + FA3AA7E0F8F2B4C75D7CAC80B61883FD /* FBSDKEventDeactivationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F5E7861B5C8E6B1F8F0920E64AE7C7EE /* FBSDKEventDeactivationManager.m */; }; + FA6CEADC7B781B6113531E01EEB5F1A3 /* MPVASTManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7057094CE5447E7FBD6B6406D558E201 /* MPVASTManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FAC80914A298EDAC4B45CDE69B3ED376 /* MPNativeAdRendererConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D2F4F54F9C024B5D2FF91E211A1A64 /* MPNativeAdRendererConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB310CF1A49200A95E429CE45FF32109 /* MPVASTStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F66ECA950B107ADFCEC708B17A751127 /* MPVASTStringUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB6FE92203D4575B3A21F161A30D1F80 /* MRNativeCommandHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 77BEDD7554CE6572DEAA5130F9BE091E /* MRNativeCommandHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB7BFC6B27D1B01592B395A388BE0B79 /* UIColor+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C1780139C3FEABBD2A81C413C999D001 /* UIColor+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FBB08756A57C8B6E9A73A01905A98009 /* MPRealTimeTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 835C43B4AFCE8FF0A12E5A69E4E83BF8 /* MPRealTimeTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD072A8CCC977B2E384E2EE9ACB09183 /* FBSDKDialogConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F32F9F1AE611D56483A036F07FC3062 /* FBSDKDialogConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; + FD9268BB64BC18D7DD7CD3C469B85200 /* MPStreamAdPlacementData.m in Sources */ = {isa = PBXBuildFile; fileRef = 559F7EAE03EA94D72F7A73BC6DF86A0E /* MPStreamAdPlacementData.m */; }; + FDD1539D2A9FFF1E16B1073269C1DE26 /* MPHTMLInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F3244FC531DA3A8C4CE676BBBBB7036C /* MPHTMLInterstitialViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FEA041E6D6FFCA7B58294A6065C4D30C /* FBSDKURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 01C2A25DE0F502E685105850791B7150 /* FBSDKURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FEE8A77B49B345E0C091D8B5F8E0BD16 /* MPUserInteractionGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = ADA6AF43A36323C557811C3806F544A6 /* MPUserInteractionGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FF7150E2BA00315E9FCEBFE777C960F6 /* Flurry-iOS-SDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2552FDCD9818F7CD0B109D8EDB879B62 /* Flurry-iOS-SDK-dummy.m */; }; + FF974645D11EAA9A6183A0632A081D10 /* MPGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 76BFEB1255A5D7756F8E034C49CC75C5 /* MPGlobal.m */; }; + FFE4A96678CD06FB12FF58ACCEFFC053 /* FBSDKDeviceLoginCodeInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0ED7C29ABEB9D14E781BB76E6936EA /* FBSDKDeviceLoginCodeInfo.m */; }; + FFEFA493963CAE6C9247B4984669DABB /* MoPub_ExternalAvidAdSessionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 92AE8ADB5D67B1993A87D63E728D85F6 /* MoPub_ExternalAvidAdSessionContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1298995ED8C5370B0EEAF24274EEE4EE /* PBXContainerItemProxy */ = { + 0076E0CF467BC808599073DACF7E2CB6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 23EE62D8F7B4475F49FFAC72AEF81FAF; remoteInfo = "Flurry-iOS-SDK"; }; - 2C886C935EA94AAAD54177F693B49FAA /* PBXContainerItemProxy */ = { + 0EE0708CAE76929DFBEAEC5C4A860EED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 42465A188431886AB035275F049824D3; - remoteInfo = Bolts; + remoteGlobalIDString = A43B25DDF20FCB9228471F8F5135C866; + remoteInfo = "ActionSheetPicker-3.0"; }; - 4C19BE671C2AE9E8BF1BA9528D43349A /* PBXContainerItemProxy */ = { + 286856CC144705C25B780A911762E7D9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 10C5885FCB0908EF785774EE52473DAB; remoteInfo = FBSDKLoginKit; }; - 5C2EF5C0413FDBF6D72019068760AB1E /* PBXContainerItemProxy */ = { + 36579B93B222F391ED53F76520CAEB85 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; - remoteInfo = FBSDKCoreKit; + remoteGlobalIDString = B0B23938B1EBCBAD2419AB6E9D222A0B; + remoteInfo = AppsFlyerFramework; + }; + 8B5378197C941F8E8BD9120AE852F274 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BE4A4ECC8A801924F03DA6FFE943E04C; + remoteInfo = "mopub-ios-sdk"; }; 8E15B91A21E9980620C05C3BC02D95F1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -394,424 +872,967 @@ remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; remoteInfo = FBSDKCoreKit; }; - 916176E0F6A618C854D24514A4D58065 /* PBXContainerItemProxy */ = { + 96509DFF23AC60FAA63EBE674C7B9D91 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B0B23938B1EBCBAD2419AB6E9D222A0B; - remoteInfo = AppsFlyerFramework; + remoteGlobalIDString = D53454FBB630479B01CA0A777383E94F; + remoteInfo = FBAudienceNetwork; }; - 952EB30A7B22DB2CABE5894AD7A0231B /* PBXContainerItemProxy */ = { + A26E8F1274D07F47A98956ED66D2165F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BE4A4ECC8A801924F03DA6FFE943E04C; + remoteInfo = "mopub-ios-sdk"; + }; + A3DE0204A3DFB60D6CC559EB69F993D4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; + remoteInfo = FBSDKCoreKit; + }; + C4C992E2E2F9F193DBD5A84941DD61AB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 803EF1AFD27445A470912B1033353BFC; remoteInfo = Pushwoosh; }; - E18CFECDB1F2548FA93A0EA7EF2BFE87 /* PBXContainerItemProxy */ = { + CB560DCDD2B3BAE1EFA6C5DFF3FFCCCB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 42465A188431886AB035275F049824D3; - remoteInfo = Bolts; + remoteGlobalIDString = 8D115411ACEA387C9D854E11FDDD914F; + remoteInfo = "MoPub-FacebookAudienceNetwork-Adapters"; }; - F2B541E4559F53AB877390EBC6B6C40E /* PBXContainerItemProxy */ = { + DE96F701FE363BC812998A9BF9209AC5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A43B25DDF20FCB9228471F8F5135C866; - remoteInfo = "ActionSheetPicker-3.0"; + remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; + remoteInfo = FBSDKCoreKit; + }; + E7DBA4F4D1EC6E603C837F345EDCBBC9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D53454FBB630479B01CA0A777383E94F; + remoteInfo = FBAudienceNetwork; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00D7C023304AB12B93140D0BD4C9B6B8 /* FBSDKCloseIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCloseIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h; sourceTree = ""; }; - 00F0C7E9A83E8D98832B67FCED7ECF2C /* FacebookSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = FacebookSDKStrings.bundle; sourceTree = ""; }; - 01299E755C98EA0FE3F86B539722A8E4 /* FBSDKWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebViewAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m; sourceTree = ""; }; - 01DA14DC4990DC278B934E6DC0CC93DE /* FBSDKConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKConstants.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m; sourceTree = ""; }; - 020236ECB8EFACF5ED33285B9354DFDE /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 02165857BE0FB8880CD5A2A74E0B2480 /* FBSDKLoginManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManager+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h"; sourceTree = ""; }; - 035429A1F2450E95542AA92CDCB860BF /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; - 0394679FC4921C447C6415940942F462 /* FBSDKLoginCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginCompletion.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h; sourceTree = ""; }; - 05355A8AF30ED16B0A0D5C6EE8D8E688 /* FBSDKAppEventsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsState.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h; sourceTree = ""; }; - 0622B457A95985591738FB9450D9F77E /* BFMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent.h; path = Bolts/iOS/BFMeasurementEvent.h; sourceTree = ""; }; - 06ACBF01504EF7D75398A4EC06168725 /* AbstractActionSheetPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractActionSheetPicker.m; path = Pickers/AbstractActionSheetPicker.m; sourceTree = ""; }; - 081A457A95C15D3A2320B5A97F082618 /* FBSDKKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStore.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m; sourceTree = ""; }; - 0C9CF4AF4E2C437FDA3A35B53B26C0B5 /* FBSDKAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h; sourceTree = ""; }; - 0DEA12EF5C950165684A2AC027AFE824 /* FBSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKError.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h; sourceTree = ""; }; - 0DF42242B27B5B9D61765395EADB466B /* FBSDKAppEventsUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h; sourceTree = ""; }; - 0E15DA59B842EC4332D2115D33CAF40A /* BFAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererController.m; path = Bolts/iOS/BFAppLinkReturnToRefererController.m; sourceTree = ""; }; - 0EBD397C3455AEAABE02E4DCEF3A3450 /* FBSDKDialogConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDialogConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h; sourceTree = ""; }; - 0F24AE9432C17B8C178FB43A321BA301 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 10DED6A0EC820A9356CAF472EA0EB093 /* FBSDKGateKeeperManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGateKeeperManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h; sourceTree = ""; }; - 12E53CECEC9E7CEA316A4DC003E28E68 /* FBSDKURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h; sourceTree = ""; }; - 139EA7EC40F949B472050B6E0856647F /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; - 13FD70BA3EAAB3FC86A80010FB84CB63 /* FBSDKLogo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h; sourceTree = ""; }; - 140F4D403CAD01805386B3EBD621A4C8 /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; - 1429C054D28944E8707918F332AD0300 /* FBSDKAccessTokenCacheV3.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.m; sourceTree = ""; }; - 14E14015DAB75B759E3A5DDCEEA319A1 /* FBSDKLoginConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginConstants.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m; sourceTree = ""; }; - 151CC9FDC5A243318620FB22342DF1DA /* FBSDKLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h; sourceTree = ""; }; - 15E90F80DBC1AF881AF1C691DC74F526 /* FBSDKTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m; sourceTree = ""; }; - 1633461013BB3C21FA46A68EA179E721 /* FBSDKAppEventsDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsDeviceInfo.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m; sourceTree = ""; }; - 166795CE9F04E0B04C089E3042E00B8B /* BFAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink.h; path = Bolts/iOS/BFAppLink.h; sourceTree = ""; }; - 16A5F4705BFDD1B485E044E0B8D7D4D8 /* FBSDKAppLinkUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h; sourceTree = ""; }; - 17D0833FB4A1A7F86D46B3E78D76D858 /* FBSDKLoginKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKLoginKit-dummy.m"; sourceTree = ""; }; - 18D4078AB295448BA055F61827B0858E /* FBSDKServerConfigurationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfigurationManager+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h"; sourceTree = ""; }; - 190080798C06F59D5509354F139E74C8 /* FBSDKBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBase64.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h; sourceTree = ""; }; - 19D3FAF20AAEC199AD3CAA2263027AE8 /* BFGeneric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFGeneric.h; path = Bolts/Common/BFGeneric.h; sourceTree = ""; }; - 1A72B061AD78E658CC9F2FE1C2B8FDBC /* FBSDKLoginTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m; sourceTree = ""; }; - 1B2CA71922DE0BF1526EB1ACBD0A8116 /* FBSDKLoginButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginButton.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h; sourceTree = ""; }; - 1B9CCFC173E56B239CB76F9ECAEF276B /* FBSDKMaleSilhouetteIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMaleSilhouetteIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h; sourceTree = ""; }; - 1CF83E4597A233B3AD40065482AC400D /* FBSDKMonotonicTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMonotonicTime.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m; sourceTree = ""; }; - 1D1C3FF0C2F89FDFA09A8B1C3391FE43 /* FBSDKAccessTokenCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCache.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h; sourceTree = ""; }; - 1D7C9F715E256F975546FCDBDB3E6270 /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; - 1D8DBA1F0E406165222E7829823BCEC9 /* FBSDKLoginManagerLoginResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLoginResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h; sourceTree = ""; }; - 1DF09EEA21F6DDD0D3EFC3A06FC8D010 /* FBSDKLoginKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginKit+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h"; sourceTree = ""; }; - 1DFD23645C817EC77AC6A48D6C64DEF5 /* FBSDKWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebViewAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h; sourceTree = ""; }; - 1EE705FE44A250D816818858D578174E /* FBSDKDeviceLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h; sourceTree = ""; }; - 1F4061E7D60491A09B944A4F31E8830F /* FBSDKAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m; sourceTree = ""; }; - 20791A7CEF1431D065B39B9382DCA693 /* FBSDKKeychainStoreViaBundleID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStoreViaBundleID.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m; sourceTree = ""; }; + 0085F0318135DFE58E7F516FC5DE0B0A /* MPBLogLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBLogLevel.h; path = MoPubSDK/Logging/MPBLogLevel.h; sourceTree = ""; }; + 008F93DD87706371A30DD9079345D216 /* MPConsentError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentError.h; path = MoPubSDK/MPConsentError.h; sourceTree = ""; }; + 01C2A25DE0F502E685105850791B7150 /* FBSDKURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h; sourceTree = ""; }; + 02696A1E9673DABEF9C32A2FC7DDAB33 /* FBSDKHybridAppEventsScriptMessageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKHybridAppEventsScriptMessageHandler.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h; sourceTree = ""; }; + 02A461C927F19BA74ED2B3B1FD6D363A /* MoPub_AvidVideoPlaybackListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidVideoPlaybackListener.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h; sourceTree = ""; }; + 03265F667A478068951E2D60340F3636 /* FBNativeAdBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdBase.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h; sourceTree = ""; }; + 03F4D32A7AD01E7073A7A9161D5F1A0E /* FBSDKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInternalUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h; sourceTree = ""; }; + 04461A55626848FDECB4D6696F42E123 /* FBSDKBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBase64.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h; sourceTree = ""; }; + 04C9CD6740293544F80A69E6BCEDD8FF /* FBSDKLoginManagerLoginResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLoginResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h; sourceTree = ""; }; + 04D607DE87A2DDEC9FC7F9E145507C57 /* MPRealTimeTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRealTimeTimer.m; path = MoPubSDK/Internal/Common/MPRealTimeTimer.m; sourceTree = ""; }; + 051FBC862DF1CD5C4A05AA5ACA57927B /* FBSDKCoreKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-prefix.pch"; sourceTree = ""; }; + 0552BCC8940279F8E0D84987BF1209C3 /* FBSDKMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMath.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m; sourceTree = ""; }; + 05E2C3DFD00A7C22FD11778C080669C3 /* FBSDKCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h; sourceTree = ""; }; + 0629A4CF913403ED8BF8A587F51E5AFF /* MRNativeCommandHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRNativeCommandHandler.m; path = MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m; sourceTree = ""; }; + 06757E5666943EE6196D8B301E12AEE1 /* NSMutableArray+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h"; sourceTree = ""; }; + 06A0413A67675E359653EF6302D1C848 /* MPHTMLInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLInterstitialViewController.m; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m; sourceTree = ""; }; + 06AC4DC227D4B1E16D53F079EDDAEA8C /* FBSDKAccessTokenCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCache.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m; sourceTree = ""; }; + 07CD7114BDD12615F4CABC9B12465308 /* MPImpressionData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImpressionData.h; path = MoPubSDK/MPImpressionData.h; sourceTree = ""; }; + 07D2D903FA50E592586284275FC08FE1 /* MPVASTTracking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTTracking.m; path = MoPubSDK/Internal/MPVASTTracking.m; sourceTree = ""; }; + 07DF861E50FDA73373DDBB39815BE748 /* FBSDKURLSessionTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLSessionTask.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m; sourceTree = ""; }; + 08645684D6B705E777B2916E36A63D6F /* MPWebView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPWebView.m; path = MoPubSDK/Internal/HTML/MPWebView.m; sourceTree = ""; }; + 0867A32E414B06D0FD80A054063E2A47 /* MPAdTargeting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdTargeting.h; path = MoPubSDK/MPAdTargeting.h; sourceTree = ""; }; + 08A8536195C3B8A8649503B745E1E34C /* FBSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKError.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m; sourceTree = ""; }; + 08CB21C2F142AC6C4728EE1235EAF23E /* _FBSDKLoginRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKLoginRecoveryAttempter.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h; sourceTree = ""; }; + 08D5FE71FE5FED5E593AEAA995F24D9A /* FBAdViewBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdViewBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h; sourceTree = ""; }; + 09001803CFE588FF690919A09DD61453 /* FBSDKCloseIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCloseIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m; sourceTree = ""; }; + 09327E6DDF5E29BB25D7AE9379B0712E /* FBSDKAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h; sourceTree = ""; }; + 09994FB7A2D472E4F66B87D155A6D13A /* FBSDKAppEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEvents.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m; sourceTree = ""; }; + 09D2A15FE487B02D9FE21E5ECC4DE16B /* MPRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoCustomEvent.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h; sourceTree = ""; }; + 0A0A3F2D5CAD0B6AF27292B4D9D0EDED /* MPMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMemoryCache.m; path = MoPubSDK/Internal/MPMemoryCache.m; sourceTree = ""; }; + 0A8924B6305C5116EA8035AE891818F6 /* MoPub.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MoPub.framework; path = "mopub-ios-sdk.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A91C686A247DF479D95444A3B415693 /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; + 0B3238406C62DB98D637B658FE140BF9 /* MPRewardedVideoError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoError.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoError.h; sourceTree = ""; }; + 0BC4C6AF4144870305222E06AED8ED8B /* MOPUBPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m; sourceTree = ""; }; + 0BED1C9AC27D2B9F3F1459CA94C37334 /* Flurry-iOS-SDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Flurry-iOS-SDK-Info.plist"; sourceTree = ""; }; + 0C6E0CC392C130EF3E476559AC967E76 /* FBSDKDeviceLoginManagerResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManagerResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m; sourceTree = ""; }; + 0CCB325A1CE8DF3EEFE5256301B436FC /* MPTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTimer.m; path = MoPubSDK/Internal/Utility/MPTimer.m; sourceTree = ""; }; + 0CE1CF550E23B510D2C6F68F29A7AD03 /* MRVideoPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRVideoPlayerManager.h; path = MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h; sourceTree = ""; }; + 0E1B8A562A11132560B57A87A901AFE6 /* FBSDKMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h; sourceTree = ""; }; + 0E51F09A31E9D9EFFF62AB77320C9A7B /* FBSDKURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLSession.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h; sourceTree = ""; }; + 0F58F9028375B7C2D62CFC9C646ABD50 /* MPInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialCustomEvent.m; path = MoPubSDK/MPInterstitialCustomEvent.m; sourceTree = ""; }; + 0F604B0678930218A4EECC573292D367 /* ActionSheetPicker-3.0-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ActionSheetPicker-3.0-Info.plist"; sourceTree = ""; }; + 10FCBBC01CBF0F703B42FBDD924AE656 /* MPCloseBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPCloseBtn.png; path = MoPubSDK/Resources/MPCloseBtn.png; sourceTree = ""; }; + 110523D99609BBC332C17E07B6B8828B /* MPIdentityProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPIdentityProvider.h; path = MoPubSDK/Internal/Utility/MPIdentityProvider.h; sourceTree = ""; }; + 110EA9182671792B69AEC591C4944AD0 /* FBSDKServerConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfiguration+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h"; sourceTree = ""; }; + 1116050AE20859D0A7B220F9CD014B3A /* Flurry-iOS-SDK-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Flurry-iOS-SDK-umbrella.h"; sourceTree = ""; }; + 113EE07F75C317AC7BBF135B331DAA7C /* MRBundleManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBundleManager.h; path = MoPubSDK/Internal/MRAID/MRBundleManager.h; sourceTree = ""; }; + 1157A8F98AC3F381302EEC958F1CF015 /* ActionSheetStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetStringPicker.m; path = Pickers/ActionSheetStringPicker.m; sourceTree = ""; }; + 116DC3DD704501DA3ECEA62915917A41 /* FBSDKAudioResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAudioResourceLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h; sourceTree = ""; }; + 11B4FF3EEEDCC6FA46BE21124B0B0F77 /* FBSDKLoginCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginCompletion.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h; sourceTree = ""; }; + 11D4D469B335020513DEFF9E322D9BB6 /* FBNativeAdTableViewCellProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdTableViewCellProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h; sourceTree = ""; }; + 11F67DED88D3BB296072360441927DD0 /* MPMoPubRewardedPlayableCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubRewardedPlayableCustomEvent.m; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m; sourceTree = ""; }; + 1233DABE131B7FCA66E2785227DE3A8E /* MPAdDestinationDisplayAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdDestinationDisplayAgent.m; path = MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m; sourceTree = ""; }; + 123829815E6758EECE5329D5D0695C78 /* MPVASTResource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResource.m; path = MoPubSDK/Internal/VAST/MPVASTResource.m; sourceTree = ""; }; + 124BA3C96D0745867F01B4573AB4D069 /* FBSDKConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKConstants.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m; sourceTree = ""; }; + 12664A9327783FCD1F087A641F758F8A /* MPInterstitialCustomEventAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEventAdapter.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h; sourceTree = ""; }; + 12E0C92175BBDB3B2501511E55FD286A /* FBSDKDeviceRequestsHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceRequestsHelper.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h; sourceTree = ""; }; + 12F869F13A5CB9EF708A2048E0FDBECD /* MPNativePositionResponseDeserializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativePositionResponseDeserializer.h; path = MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h; sourceTree = ""; }; + 1330CDEA75AC8171E33A5BEA88FA6E85 /* FBSDKKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStore.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m; sourceTree = ""; }; + 1571EB3A7237BE55F3FC58C53245EC1D /* FBSDKCoreKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKCoreKit.modulemap; sourceTree = ""; }; + 157ACB16A8CE19A04BA17469AF29C307 /* FBSDKLoginConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginConstants.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h; sourceTree = ""; }; + 15B10174B9420EE52B289461785BA7CB /* MPCollectionViewAdPlacerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacerDelegate.h; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacerDelegate.h; sourceTree = ""; }; + 15B18350657A3A8ABB3A902CE3B364DD /* NSDate+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h"; sourceTree = ""; }; + 160708D4D61D75C8D96CFB2C7277FFFE /* FBSDKHybridAppEventsScriptMessageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKHybridAppEventsScriptMessageHandler.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m; sourceTree = ""; }; + 166A802457E735F98DF54B4BE2379548 /* MPURLResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLResolver.h; path = MoPubSDK/Internal/Common/MPURLResolver.h; sourceTree = ""; }; + 169132F7253965F74EB91AFF85485189 /* FBSDKEventBindingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBindingManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m; sourceTree = ""; }; + 16A15C5653784E24AD12AE6063E26117 /* FBSDKCoreKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKCoreKit+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h"; sourceTree = ""; }; + 16E193415C4FDCA57FA826A6CDD8308A /* MPAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdView.h; path = MoPubSDK/MPAdView.h; sourceTree = ""; }; + 178723CBFD514D20B3A9CB81C7540CD7 /* MPMoPubRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubRewardedVideoCustomEvent.m; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m; sourceTree = ""; }; + 17ECD05CA2ACA6D69B4BC5685C4BADD1 /* MPInterstitialAdController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdController.h; path = MoPubSDK/MPInterstitialAdController.h; sourceTree = ""; }; + 18B488FEB32C633B59C98DC68C21F8FF /* MPNativeAd+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAd+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h"; sourceTree = ""; }; + 18CE2A49F5159B4B1E5C5AC71C12FEA3 /* MPAdWebViewAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdWebViewAgent.m; path = MoPubSDK/Internal/HTML/MPAdWebViewAgent.m; sourceTree = ""; }; + 18E8140B372BFB565A831F487A84FCCB /* FBSDKURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLSession.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.m; sourceTree = ""; }; + 1985E0C78A859F8865BB6FFD8D8426FB /* MPInterstitialAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialAdManager.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m; sourceTree = ""; }; + 198A044FC22435493B92E1EF208A9F2A /* MPGlobal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPGlobal.h; path = MoPubSDK/Internal/Utility/MPGlobal.h; sourceTree = ""; }; + 19B00EDE77FF178F5018F1694C539749 /* FBMediaView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBMediaView.h; path = Static/FBAudienceNetwork.framework/Headers/FBMediaView.h; sourceTree = ""; }; + 19FEBAF7B1AD4C939CD21F125EEC367D /* MPVASTWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTWrapper.h; path = MoPubSDK/Internal/VAST/MPVASTWrapper.h; sourceTree = ""; }; + 1A00E20D5DE70A3808DF6711419FC460 /* FBSDKSuggestedEventsIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSuggestedEventsIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.m; sourceTree = ""; }; + 1AA95A2DDFE61900F052C891C37878E2 /* 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; }; + 1B37A1AE0F01C051CD0EACDC5F2A3003 /* MOPUBPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerViewController.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m; sourceTree = ""; }; + 1B52F6C34A843E42FD64F0ED172D75F7 /* FBSDKProfile+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKProfile+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h"; sourceTree = ""; }; + 1C23D5519090AE7A2791FB566E69A5EC /* MPWebBrowserUserAgentInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPWebBrowserUserAgentInfo.h; path = MoPubSDK/Internal/MPWebBrowserUserAgentInfo.h; sourceTree = ""; }; + 1C6F498BB183C38DB09455DE873C87B1 /* MoPub+Utility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MoPub+Utility.m"; path = "MoPubSDK/Internal/Utility/Categories/MoPub+Utility.m"; sourceTree = ""; }; + 1C918FF7721864FFABC4CE297964C3A2 /* MOPUBFullscreenPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBFullscreenPlayerViewController.h; path = MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h; sourceTree = ""; }; + 1CC2D1B77AAEB0065EBFEED89B820F53 /* MPNativeAdConfigValues+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAdConfigValues+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m"; sourceTree = ""; }; + 1D085AA2C86D826CF02F11DAEBF133AC /* FBSDKCoreKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCoreKit.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h; sourceTree = ""; }; + 1D1C4F2BDDC1A2DAA7C9EF6A4DE772FD /* MPURLRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLRequest.h; path = MoPubSDK/Internal/MPURLRequest.h; sourceTree = ""; }; + 1D60697DE18AD8DAB499A99EA1064421 /* FBSDKErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m; sourceTree = ""; }; + 1D7B4A6B241CA9980EB171E71C7C41E1 /* FBSDKGraphRequestMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestMetadata.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h; sourceTree = ""; }; + 1D8ED3FA8E3FC87CD92BDEF8306C0F33 /* MPInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialViewController.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m; sourceTree = ""; }; + 1D96AE4748D7956BB0A1BE7C732E3EC4 /* FBSDKUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m; sourceTree = ""; }; + 1DA1F94AA1105EE86DF528ECC851CCCB /* MOPUBDisplayAgentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBDisplayAgentType.h; path = MoPubSDK/MOPUBDisplayAgentType.h; sourceTree = ""; }; + 1E0FDE46DAF192D4E3F9D4F1880CA4CD /* SKStoreProductViewController+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SKStoreProductViewController+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.m"; sourceTree = ""; }; + 1E259E6E3D19C982AFA51B732ABF05BB /* FBSDKViewHierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewHierarchy.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m; sourceTree = ""; }; + 1E7BE70F36A2033F11FAACC1DC86E909 /* MPBannerCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEventDelegate.h; path = MoPubSDK/MPBannerCustomEventDelegate.h; sourceTree = ""; }; + 1E7FCB031A7E64AC0598C6DC265A9AEE /* FBSDKCodelessParameterComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessParameterComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m; sourceTree = ""; }; + 1EB939DC78F393B43E92E0FB05770983 /* MPActivityViewControllerHelper+TweetShare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPActivityViewControllerHelper+TweetShare.m"; path = "MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m"; sourceTree = ""; }; + 1F5E4C3AE4806DE03A7B41F1C28EC893 /* MoPub_AvidAdSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidAdSessionManager.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h; sourceTree = ""; }; + 1F76FE05C3A10B10D401A281E37400C9 /* MoPub_Avid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_Avid.h; path = MoPubSDK/Viewability/Avid/MoPub_Avid.h; sourceTree = ""; }; + 1F9565EB82C022835E0A5257A2EFD1B0 /* MPStaticNativeAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStaticNativeAdRendererSettings.h; path = MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h; sourceTree = ""; }; + 1FA00D80F7E0BC7B3AF7AF266172A236 /* MPDiskLRUCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPDiskLRUCache.h; path = MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h; sourceTree = ""; }; + 1FD67B4F78E13E576A721FDF0F147BDA /* FacebookNativeAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookNativeAdAdapter.m; path = FacebookAudienceNetwork/FacebookNativeAdAdapter.m; sourceTree = ""; }; + 1FF465F0A77A164FE8153BCB13B1ED10 /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; + 200662F8DFB100E592E0456FCD3191B5 /* 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; }; + 202D2DC71F90F79B93F7031A411D4149 /* MPVASTResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResponse.m; path = MoPubSDK/Internal/VAST/MPVASTResponse.m; sourceTree = ""; }; + 204F39D6D9A79DD3781AFD897AB66B13 /* MPMutedBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPMutedBtn.png; path = MoPubSDK/Resources/MPMutedBtn.png; sourceTree = ""; }; + 205BD6AAFBB2D909CD63A91E747795EB /* FacebookRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookRewardedVideoCustomEvent.m; path = FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m; sourceTree = ""; }; + 20C1DB506FCC7605E1EDD7B1A68341C3 /* MPVASTCompanionAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCompanionAd.h; path = MoPubSDK/Internal/VAST/MPVASTCompanionAd.h; sourceTree = ""; }; 20C31D59DA82361E25F193FABD96B204 /* Pods-MAPS.ME-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-acknowledgements.plist"; sourceTree = ""; }; - 236EB962749FBCAD7B4C940B9C0BAA25 /* FBSDKAppEventsStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsStateManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h; sourceTree = ""; }; - 24CFA9C269A6C712EAB850307C22D12E /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 24EE133EA5DD7D16DC0D5D40C8F13D5D /* FBSDKAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkNavigation.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h; sourceTree = ""; }; - 253CCE4C399D4670DFC89522D538047A /* FBSDKEventBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBinding.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h; sourceTree = ""; }; - 2594C92289BC34AFF3A8A80212250626 /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; - 26DDB9816CC403AC351F27E41A8D6F5E /* FBSDKAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkTarget.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m; sourceTree = ""; }; - 27BBB2E1C1CAC54C54B691B1F6447044 /* ActionSheetPicker-3.0.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "ActionSheetPicker-3.0.modulemap"; sourceTree = ""; }; - 287DAAAD5D04AA47037CEB5D7B05EEC7 /* FBSDKErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m; sourceTree = ""; }; - 28BA135E77A32F4DD5697CFD5080120F /* FBSDKBridgeAPIProtocolWebV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV2.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m; sourceTree = ""; }; - 28F72C955224D63ACDEF4159DC9D8661 /* ActionSheetDistancePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDistancePicker.h; path = Pickers/ActionSheetDistancePicker.h; sourceTree = ""; }; - 291AF7EAD44E781EC941B7FB34F78E14 /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; - 2924640E63F8FA66D70A88B162447C8F /* FBSDKDeviceLoginCodeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginCodeInfo.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h; sourceTree = ""; }; - 293CF7949369D2AFAD79F6959DA84D37 /* FBSDKWebDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m; sourceTree = ""; }; - 2C78A208388AAAFF4EC64B73868970DE /* DistancePickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DistancePickerView.m; path = Pickers/DistancePickerView.m; sourceTree = ""; }; - 2CEB8AEE60DA899CFFA54DB8C508A63E /* FBSDKProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfile.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m; sourceTree = ""; }; - 2CFEC76C081A9F49D81DBF4CBD9E7C7E /* FBSDKMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h; sourceTree = ""; }; - 2D93E6F27CAE3DB1B3732057E88B18CB /* FBSDKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMacros.h; sourceTree = ""; }; - 2E68692D5CB35BBD3687C725A982CA46 /* FBSDKAccessTokenCacheV3_21.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_21.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.h; sourceTree = ""; }; - 2F04D1897D522410184CBD2FE61F25CE /* FlurryCCPA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryCCPA.h; path = Flurry/FlurryCCPA.h; sourceTree = ""; }; - 3001FEF8392CEB75029022342B7BC6D6 /* BFAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView_Internal.h; path = Bolts/iOS/Internal/BFAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; - 335E1E3B8E979C322CF57319B481C12A /* Pushwoosh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pushwoosh.framework; path = Framework/Pushwoosh.framework; sourceTree = ""; }; - 34195B528E8927827EC8CA3054D9F525 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 3456949A7F2D1CF658DBBAA020061E9E /* BFMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFMeasurementEvent.m; path = Bolts/iOS/BFMeasurementEvent.m; sourceTree = ""; }; - 3600395EDA60A8AC48E570A82F134AE1 /* FBSDKCodelessIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h; sourceTree = ""; }; - 371E626C1144C303898D09049BCDFE86 /* FBSDKLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m; sourceTree = ""; }; - 3806C879C52138A8C758954A562EA64A /* FBSDKCoreKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKCoreKit+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h"; sourceTree = ""; }; - 387DBCD5035C12510D8B70CDA301D382 /* FBSDKLoginButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginButton.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m; sourceTree = ""; }; - 38A6071340F2AD1485FD59C08506627E /* FBSDKAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLink.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m; sourceTree = ""; }; - 391D0A08124D80D2E6DF70B190CD4EB9 /* FBSDKApplicationDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKApplicationDelegate.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m; sourceTree = ""; }; - 397F816997F1E0E23F4ED53DD21E4EBE /* 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; }; - 39891CAC0C470CBD62A153553E1AD4B9 /* FBSDKAccessTokenExpirer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenExpirer.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m; sourceTree = ""; }; - 39C23125074272BAF2E843D769ACD19F /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; - 3B2A95996B5001A26E599EB217998116 /* FBSDKLoginManagerLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLogger.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m; sourceTree = ""; }; - 3B70D2C57F85FA64D9055B06AB19927C /* ActionSheetPicker-3.0-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ActionSheetPicker-3.0-Info.plist"; sourceTree = ""; }; - 3CBD9CBE86589E34A029F1E0C1E177A8 /* FBSDKKeychainStoreViaBundleID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStoreViaBundleID.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h; sourceTree = ""; }; - 3CBEDB8EC050D90AC526E85A17F7A3BA /* _FBSDKTemporaryErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKTemporaryErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m; sourceTree = ""; }; - 3D0522214880C13536DE8D7C753A013B /* FBSDKConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKConstants.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h; sourceTree = ""; }; - 3E2ADB5E5590EF2BC9A5AB05ABB3599C /* FBSDKErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h; sourceTree = ""; }; - 3ED299BDB24FC74A99559541387AD02B /* Flurry-iOS-SDK.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Flurry-iOS-SDK.modulemap"; sourceTree = ""; }; - 3ED4E5956BCC80299A5E443A0CF847B0 /* ActionSheetCustomPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetCustomPicker.m; path = Pickers/ActionSheetCustomPicker.m; sourceTree = ""; }; - 3F0823A69F44BF3CE3120BAA7D699233 /* FBSDKContainerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKContainerViewController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h; sourceTree = ""; }; - 3F6B7954F6DE7A5471867BB77522CDFF /* FBSDKAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h; sourceTree = ""; }; - 3F79FFD6800F6E3F88F6C20DAB46436D /* FBSDKCodelessPathComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessPathComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h; sourceTree = ""; }; + 20E3A9210C554252984A00059B396BC5 /* MPBannerCustomEvent+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPBannerCustomEvent+Internal.h"; path = "MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h"; sourceTree = ""; }; + 20F91703DAB155BE3C89C419DCFF7C1B /* FBNativeBannerAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeBannerAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h; sourceTree = ""; }; + 212321E5085DBA7FC62C102C7C23E603 /* FBSDKBridgeAPIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIResponse.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h; sourceTree = ""; }; + 214FEE613211CC80815AB92F2F6FDB5A /* FBAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdView.h; sourceTree = ""; }; + 21D7D711FA0FA48C30FAFC67D3AE42B0 /* MPHTTPNetworkTaskData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTTPNetworkTaskData.h; path = MoPubSDK/Internal/MPHTTPNetworkTaskData.h; sourceTree = ""; }; + 222BBC66E350FF4E01C2CD6221CD98F9 /* MPAdapterConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdapterConfiguration.h; path = MoPubSDK/MPAdapterConfiguration.h; sourceTree = ""; }; + 22355F169BF11F9BB098AA2D1F34DECE /* MPBannerAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerAdManager.h; path = MoPubSDK/Internal/Banners/MPBannerAdManager.h; sourceTree = ""; }; + 225106CA0823A9905BE0CD0368475E58 /* FBSDKContainerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKContainerViewController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h; sourceTree = ""; }; + 22D013D7719F2E60F07C8F150F150B32 /* MPVASTAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTAd.h; path = MoPubSDK/Internal/VAST/MPVASTAd.h; sourceTree = ""; }; + 23285F5C86C0AD01FC461E453763B6A5 /* MPImpressionTrackedNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImpressionTrackedNotification.m; path = MoPubSDK/MPImpressionTrackedNotification.m; sourceTree = ""; }; + 2345DD42E20DDB4323C7C8BF40A2A912 /* MOPUBNativeVideoAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdAdapter.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m; sourceTree = ""; }; + 2366B91A33BD2E8CF00FFA763E833314 /* MPMediationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationManager.h; path = MoPubSDK/Internal/MPMediationManager.h; sourceTree = ""; }; + 23677EE99356D5BA21D4ED3B199730BE /* FBSDKKeychainStoreViaBundleID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStoreViaBundleID.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h; sourceTree = ""; }; + 24171AA4A463C05AD364E79706BAC07B /* FBSDKGraphErrorRecoveryProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphErrorRecoveryProcessor.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h; sourceTree = ""; }; + 24611B99B0F13EBDCFB559BD33E15EE2 /* ActionSheetDatePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDatePicker.h; path = Pickers/ActionSheetDatePicker.h; sourceTree = ""; }; + 24A6FE9015B589E5DA446821CFB88039 /* FBSDKLoginKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginKit+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h"; sourceTree = ""; }; + 24CA4B2A7047159346094DBA275C905C /* MPCoreInstanceProvider+MRAID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPCoreInstanceProvider+MRAID.m"; path = "MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m"; sourceTree = ""; }; + 24D2F4F54F9C024B5D2FF91E211A1A64 /* MPNativeAdRendererConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererConstants.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h; sourceTree = ""; }; + 24D45DF4A924A9E28CE7976AE16FD94F /* NSURL+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m"; sourceTree = ""; }; + 253B55A5F9C406C5541903CC8F45B708 /* NSString+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h"; sourceTree = ""; }; + 2552FDCD9818F7CD0B109D8EDB879B62 /* Flurry-iOS-SDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Flurry-iOS-SDK-dummy.m"; sourceTree = ""; }; + 2558D72FA9705C461A89748653E8E17B /* FBRewardedVideoAdBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBRewardedVideoAdBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h; sourceTree = ""; }; + 25A3859019401E6CAFD8A50CCA9A6E9A /* SKStoreProductViewController+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SKStoreProductViewController+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.h"; sourceTree = ""; }; + 25D82AD06CB92CB3D706398BD0C20FA7 /* FBSDKSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSwizzler.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m; sourceTree = ""; }; + 25FD6796ABE6D61E80D06FA5F199C16D /* FBSDKDeviceLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m; sourceTree = ""; }; + 26A9A4E86612A59822F002709138C744 /* FBSDKGraphRequestConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m; sourceTree = ""; }; + 26AD489264F04D10598787F03F08C7E9 /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; + 27084E353C63925CEF2CF423422FD215 /* FBSDKApplicationDelegate+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKApplicationDelegate+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h"; sourceTree = ""; }; + 2709B1517AD1F1F70C92FC96DD46D24E /* FBSDKAppEvents+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKAppEvents+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h"; sourceTree = ""; }; + 276A12FF8E9F11F8B21046A5EF52228C /* MPAdServerKeys.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerKeys.m; path = MoPubSDK/Internal/MPAdServerKeys.m; sourceTree = ""; }; + 279CB81A80DF1E1FB11A341C5DCA3788 /* 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; }; + 27C68760CED9FB9C7AFEB3506818E770 /* _FBSDKTemporaryErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKTemporaryErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m; sourceTree = ""; }; + 27CADAC6F188F441552DD8BD377A5459 /* FBSDKBridgeAPIProtocolWebV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV2.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h; sourceTree = ""; }; + 27D99329498836CD82D748659666B8B9 /* MPImpressionTrackedNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImpressionTrackedNotification.h; path = MoPubSDK/MPImpressionTrackedNotification.h; sourceTree = ""; }; + 28514EA67BF3D15ED365252805F5D88C /* MoPub_AbstractAvidAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AbstractAvidAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h; sourceTree = ""; }; + 287DF17A69CEC392664192AB510E13AC /* FBSDKPaymentObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKPaymentObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m; sourceTree = ""; }; + 28A88BE853735D98DD2CB27E60219422 /* MPInterstitialCustomEventAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialCustomEventAdapter.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m; sourceTree = ""; }; + 28EC887828D27B5D9DF2C571BC57FC3F /* MPNativeAdError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdError.h; path = MoPubSDK/NativeAds/MPNativeAdError.h; sourceTree = ""; }; + 297EC840D807B17A80C220D7D7C6AFAE /* FBSDKCodelessParameterComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessParameterComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h; sourceTree = ""; }; + 29A9B4D11E50A089C4254DF5B9096019 /* MOPUBAVPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBAVPlayerView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h; sourceTree = ""; }; + 29D3CD2CA186D9CF2788670F40E165F0 /* FBAdBridgeContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdBridgeContainer.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h; sourceTree = ""; }; + 29D7E62007F4E97F085CE0F45D5DDCF7 /* MPTableViewAdPlacerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacerCell.h; path = MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h; sourceTree = ""; }; + 29E4320D71CE55CD9B43324AB45988BC /* MPNativePositionResponseDeserializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativePositionResponseDeserializer.m; path = MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m; sourceTree = ""; }; + 2A06DD6B48F22EB61D9E3CF45032607E /* FBSDKSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSettings.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m; sourceTree = ""; }; + 2A0C8C574B881BB5E7514975886865A3 /* MoPub_AvidDisplayAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidDisplayAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h; sourceTree = ""; }; + 2A193992127099DC68C97AAA8DD8F962 /* MPNativeAdRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRequest.h; path = MoPubSDK/NativeAds/MPNativeAdRequest.h; sourceTree = ""; }; + 2A4CA1A090D8369F2579AEA5FC6BAE00 /* FBSDKAccessTokenExpirer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenExpirer.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h; sourceTree = ""; }; + 2AA938C762685308D5DDA08B31DCECB1 /* MPStreamAdPlacementData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacementData.h; path = MoPubSDK/NativeAds/MPStreamAdPlacementData.h; sourceTree = ""; }; + 2AD7CAA6DDAB84124E0C07FBAA457A39 /* FacebookNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookNativeCustomEvent.m; path = FacebookAudienceNetwork/FacebookNativeCustomEvent.m; sourceTree = ""; }; + 2AD8A362659C83A68FAEC6F024764EB2 /* MOPUBExperimentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBExperimentProvider.h; path = MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h; sourceTree = ""; }; + 2ADA3CC8949A9F999611C4DF2262A3DF /* MRBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBridge.h; path = MoPubSDK/Internal/MRAID/MRBridge.h; sourceTree = ""; }; + 2AF24FF965B163B35A6A1F7256E532F2 /* NSDictionary+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m"; sourceTree = ""; }; + 2BE10FE7F4AE12647177883F5827B63F /* NSJSONSerialization+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSJSONSerialization+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m"; sourceTree = ""; }; + 2C6C9C78586EAB29A9CD319A29D5F4CB /* 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; }; + 2C746E2E0A9C781A3787FDE42FF6D82F /* MPURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURL.h; path = MoPubSDK/Internal/MPURL.h; sourceTree = ""; }; + 2CD349746059543981564E6476E34219 /* MPUnmutedBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPUnmutedBtn.png; path = MoPubSDK/Resources/MPUnmutedBtn.png; sourceTree = ""; }; + 2D49BB12C479517F693968E77057F55D /* MPAdServerURLBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerURLBuilder.m; path = MoPubSDK/Internal/Common/MPAdServerURLBuilder.m; sourceTree = ""; }; + 2D739482B09B77F68181E9AF62811FF5 /* FBSDKAppEventsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsState.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h; sourceTree = ""; }; + 2DA1D3C489B84543139AC54F16A71AB9 /* MPBool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBool.h; path = MoPubSDK/MPBool.h; sourceTree = ""; }; + 2DAED3B103AA265A9BC13DEAF4BAF84F /* FBSDKMaleSilhouetteIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMaleSilhouetteIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m; sourceTree = ""; }; + 2DD71A7861ADDCDA83F5979BFBC8BFBE /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MoPub-FacebookAudienceNetwork-Adapters-umbrella.h"; sourceTree = ""; }; + 2DFDA930918B19C3DCB2D11CAD6348B0 /* MPNativeAdData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdData.m; path = MoPubSDK/NativeAds/MPNativeAdData.m; sourceTree = ""; }; + 2E0975D043E62D62AA0D9FF73BA2C82A /* MPLogManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogManager.h; path = MoPubSDK/Logging/Internal/MPLogManager.h; sourceTree = ""; }; + 2E0F30DE6BDF6213E262657879DF53E0 /* FBSDKServerConfigurationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfigurationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m; sourceTree = ""; }; + 2E16E946A2F3EF0A54043FF4C2FCBBC8 /* ActionSheetDatePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDatePicker.m; path = Pickers/ActionSheetDatePicker.m; sourceTree = ""; }; + 2E54C0CF7D34B2AC7D2E17E72B4FCEDD /* FBAdUtilityBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdUtilityBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h; sourceTree = ""; }; + 2EF08767081B86C21BD0AC576CB566C7 /* MPAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdPositioning.h; path = MoPubSDK/NativeAds/MPAdPositioning.h; sourceTree = ""; }; + 2FCCC13F94E233F98949445DC1B8015B /* MPMRAIDInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDInterstitialViewController.h; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h; sourceTree = ""; }; + 312F0B884CAC3F5F21BC932A402F4AE7 /* MPAdServerCommunicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerCommunicator.m; path = MoPubSDK/Internal/Common/MPAdServerCommunicator.m; sourceTree = ""; }; + 313F763C5FF890729EB53A69A62C3334 /* MPLogEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogEvent.h; path = MoPubSDK/Logging/MPLogEvent.h; sourceTree = ""; }; + 3156DBAB3A2BF6A7FE510D9D3619F782 /* 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; }; + 317086D2417B02C70797E5C3C1D3DC44 /* MPServerAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPServerAdPositioning.h; path = MoPubSDK/NativeAds/MPServerAdPositioning.h; 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; }; + 3222A660AA76FDE4042164F5211E3770 /* MRController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRController.h; path = MoPubSDK/Internal/MRAID/MRController.h; sourceTree = ""; }; + 323FCD99E8787D4E0D81E6B1F3118469 /* FBSDKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInternalUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m; sourceTree = ""; }; + 329B67D0590B3383A55A0805548DB7EC /* FBSDKMetadataIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMetadataIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.m; sourceTree = ""; }; + 329F8150FA690A1AC8E66F102DC1E11E /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C4A859DA26526CC22A1C502E3DB6A8 /* FBSDKLoginKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-umbrella.h"; sourceTree = ""; }; + 32FE0FBECB01959799DA0CB95E2D05CA /* MPForceableOrientationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPForceableOrientationProtocol.h; path = MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h; sourceTree = ""; }; + 33669BB30B376F1408C10B5533132475 /* MPBannerCustomEvent+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPBannerCustomEvent+Internal.m"; path = "MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m"; sourceTree = ""; }; + 337939E5164002DE8321DE8F5714CC56 /* MPCollectionViewAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacer.h; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h; sourceTree = ""; }; + 337C9E4DD15533302A7D43A6C3502241 /* FBSDKCrashObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h; sourceTree = ""; }; + 3381200DCBAA53514E00DE88FBB6A11C /* MPNativeAdConfigValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdConfigValues.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h; sourceTree = ""; }; + 341F752C4D61196520BD487E733807DF /* FBSDKTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m; sourceTree = ""; }; + 345C7F3661C9350C77DBE330548F9C74 /* FBSDKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h; sourceTree = ""; }; + 348C45134BA2B908CBBD2CABB7180211 /* FBSDKCodelessPathComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessPathComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m; sourceTree = ""; }; + 34CA781CF32FA494FBDA5999BF916C92 /* FBSDKKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStore.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h; sourceTree = ""; }; + 34D49F6A182D59FD2B24C35D6491EB91 /* FBSDKApplicationDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKApplicationDelegate.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m; sourceTree = ""; }; + 3517AADFC42DDBEE4637B6125598DD75 /* FBSDKLoginKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKLoginKit.modulemap; sourceTree = ""; }; + 3553067D69289A14BF958D4CB1A769E4 /* MPCoreInstanceProvider+MRAID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPCoreInstanceProvider+MRAID.h"; path = "MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h"; sourceTree = ""; }; + 36C6921F388D2990D123575B95BB6CB2 /* FBNativeAdsManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdsManager.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h; sourceTree = ""; }; + 36D8023B92984E96D0AF18B251E4D157 /* MPBaseBannerAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseBannerAdapter.h; path = MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h; sourceTree = ""; }; + 36E8EFAB0C262822AF60ECF9D9D1C082 /* NSError+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m"; sourceTree = ""; }; + 3787CEAE775611EDFA2FE56C0C216395 /* MPNativeAdSourceQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSourceQueue.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h; sourceTree = ""; }; + 378DB89FEFF9BBD1FB03532BD5A36DB5 /* FBSDKTriStateBOOL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTriStateBOOL.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h; sourceTree = ""; }; + 38376D3B82C716A08B008B8F11A93C8C /* FBSDKLoginCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginCompletion.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m; sourceTree = ""; }; + 384B19B6C54F9385A814116E6306F644 /* MPNativePositionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativePositionSource.h; path = MoPubSDK/NativeAds/Internal/MPNativePositionSource.h; sourceTree = ""; }; + 38C83CCDD174A0877B3A34F444A927B5 /* MPCoreInstanceProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCoreInstanceProvider.m; path = MoPubSDK/Internal/MPCoreInstanceProvider.m; sourceTree = ""; }; + 39407006E9C1FF3993373B817535A159 /* MRController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRController.m; path = MoPubSDK/Internal/MRAID/MRController.m; sourceTree = ""; }; + 39D3971615A8B57D3BF0C850972DEBCA /* MPWebView+Viewability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPWebView+Viewability.h"; path = "MoPubSDK/Viewability/MPWebView+Viewability.h"; sourceTree = ""; }; + 3A452FF8A270BA1ED5E94B88CA860C37 /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; + 3AB26FE24E67641C267B774D4EAA4108 /* NSMutableArray+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m"; sourceTree = ""; }; + 3ABF810893517F2EEEE149E0C4DFDD6C /* ActionSheetCustomPickerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPickerDelegate.h; path = Pickers/ActionSheetCustomPickerDelegate.h; sourceTree = ""; }; + 3AD91B7BAE93A491DAAF421184A9686C /* FBSDKServerConfigurationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfigurationManager+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h"; sourceTree = ""; }; + 3B279AE02BE057335B49062F3B1380F8 /* MOPUBNativeVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoCustomEvent.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h; sourceTree = ""; }; + 3BDD3551ECF58D3B8B435D6F1528D9A3 /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; + 3C0CC63A891D79F760E49C0FE2EC9263 /* MPTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTimer.h; path = MoPubSDK/Internal/Utility/MPTimer.h; sourceTree = ""; }; + 3CA98E198A4B97875050B3AD61B4EBC1 /* FBSDKServerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h; sourceTree = ""; }; + 3CB91A037064C3C44641BC84A4B262B4 /* FBSDKTimeSpentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTimeSpentData.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h; sourceTree = ""; }; + 3CD8E4BCB08D9F706EC3286247908C22 /* MPMutedBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPMutedBtn@2x.png"; path = "MoPubSDK/Resources/MPMutedBtn@2x.png"; sourceTree = ""; }; + 3CD9742EDB84EBCD2D6AD5BF23B832E7 /* FBSDKGraphRequestMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestMetadata.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m; sourceTree = ""; }; + 3D53AFED7E5E9CC5E731C7B45D34FA4F /* MPClientAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPClientAdPositioning.m; path = MoPubSDK/NativeAds/MPClientAdPositioning.m; sourceTree = ""; }; + 3D73DAFD979E01E211CBCCC3F3D5FB35 /* MPNativeAdRendererImageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRendererImageHandler.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m; sourceTree = ""; }; + 3D7498E97EF1E6C6B9D3E526F6FBCD68 /* MPClientAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPClientAdPositioning.h; path = MoPubSDK/NativeAds/MPClientAdPositioning.h; sourceTree = ""; }; + 3D96728A0ED9D25F0E2CC5A442582BD8 /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; + 3DFE1C007297070AE92A8FB89AA7D038 /* FBSDKLoginButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginButton.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m; sourceTree = ""; }; + 3E38AB9681AEEB1F39B4445EA18564A3 /* MPInterstitialAdManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdManagerDelegate.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h; sourceTree = ""; }; + 3E8F0BA1821C5F72F39DA01F336B4DE0 /* MPAdDestinationDisplayAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdDestinationDisplayAgent.h; path = MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h; sourceTree = ""; }; + 3F68075B3D8E243FEB835D28EE50C32A /* MPNativeCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCache.h; path = MoPubSDK/NativeAds/Internal/MPNativeCache.h; sourceTree = ""; }; + 3F713C112C0705DDB9B2DB12189A85A7 /* MPMediationSettingsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationSettingsProtocol.h; path = MoPubSDK/MPMediationSettingsProtocol.h; sourceTree = ""; }; + 40258AE3299C2FDF973FA66BB5EE6F86 /* FBAdExtraHint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdExtraHint.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h; sourceTree = ""; }; + 4055012FAC722795AA7452ADD20EAD9C /* MPConsentChangedReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentChangedReason.m; path = MoPubSDK/MPConsentChangedReason.m; sourceTree = ""; }; + 40AA539E8B036523C84511ECA73C6A2F /* MPNativeAdUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdUtils.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m; sourceTree = ""; }; + 40CF1452EBFB5FD75ECADA5BBE5CD2DF /* FBSDKCoreKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-umbrella.h"; sourceTree = ""; }; + 40DECFC95AD82A9905D38F840E076FF5 /* FBSDKAppEventsStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsStateManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m; sourceTree = ""; }; + 40E8FADE08C7EC74A9D73199F5F5AD57 /* MPHTMLBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLBannerCustomEvent.m; path = MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m; 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; }; - 41A0FCB26B3D11B5C197A60061391136 /* BFAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkTarget.m; path = Bolts/iOS/BFAppLinkTarget.m; sourceTree = ""; }; - 46352D1AE2392EF5F1CDE42D8E19C948 /* BFURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFURL.m; path = Bolts/iOS/BFURL.m; sourceTree = ""; }; - 481D46D6F219428528D7B90629CDEAB9 /* SWActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWActionSheet.h; path = Pickers/SWActionSheet.h; sourceTree = ""; }; + 4150FB417868D4A7CFE38CD02B684ECF /* FacebookBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookBannerCustomEvent.h; path = FacebookAudienceNetwork/FacebookBannerCustomEvent.h; sourceTree = ""; }; + 41C3B8D760B02AE7B31A3F45C538B047 /* FBSDKKeychainStoreViaBundleID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStoreViaBundleID.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m; sourceTree = ""; }; + 41FBD33928A78E754BB3CF85BE4C3FDC /* MPAdAlertManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdAlertManager.h; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h; sourceTree = ""; }; + 4235D763C60A8DE4E97CCEE6D785D963 /* MPClosableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPClosableView.m; path = MoPubSDK/Internal/Common/MPClosableView.m; sourceTree = ""; }; + 429F6E9B5D6776BA92727D1A976B6C7A /* MPCountdownTimerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCountdownTimerView.m; path = MoPubSDK/Internal/Common/MPCountdownTimerView.m; sourceTree = ""; }; + 42FB6AC97DA8B6DDB58BAFAD6892BD25 /* MPRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoCustomEvent.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m; sourceTree = ""; }; + 432C4A305CF5EBCFA2581B78D5EE0334 /* FBSDKTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h; sourceTree = ""; }; + 44C5F0DAC6881EE657664B00EBBF94D5 /* MPMRAIDInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDInterstitialViewController.m; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m; sourceTree = ""; }; + 44E0A21EC0F4A731E9444C12ED0E22A2 /* FBSDKAccessTokenCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCache.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h; sourceTree = ""; }; + 45B56CD9DF3A415949C13BCE153B3CAB /* FBSDKURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h; sourceTree = ""; }; + 45D593E87257D2B9DB07FCE7060091E8 /* MOPUBNativeVideoAdConfigValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdConfigValues.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h; sourceTree = ""; }; + 4697854BCB6ADF8B7BD5912A820F1281 /* MPVASTResource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResource.h; path = MoPubSDK/Internal/VAST/MPVASTResource.h; sourceTree = ""; }; + 46D8B85F47E2DB8337E61804A6C0CD2F /* MPNativeAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererSettings.h; path = MoPubSDK/NativeAds/MPNativeAdRendererSettings.h; sourceTree = ""; }; + 46EC0D2DD50AC9981E42A59136E366A1 /* MPNativeAdError+VAST.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdError+VAST.h"; path = "MoPubSDK/Internal/Utility/Categories/MPNativeAdError+VAST.h"; sourceTree = ""; }; + 4710B010F3CBE25B1A77094DC1255A9B /* FBSDKLoginTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h; sourceTree = ""; }; + 47135979C1F938BFBAAD320D42C8D6B9 /* MPAdServerCommunicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerCommunicator.h; path = MoPubSDK/Internal/Common/MPAdServerCommunicator.h; sourceTree = ""; }; + 47233AF5A5CFF0E9E66C4B08D193CDA8 /* FBSDKErrorConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m; sourceTree = ""; }; + 4772559B8BC236FB472959F58091FC02 /* FBSDKDeviceLoginCodeInfo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginCodeInfo+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h"; sourceTree = ""; }; + 478AAD31B36C8B42A40AD2B42DE6F451 /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; + 481EF3FAD79EB451F840E84E750B9974 /* MPAdConversionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdConversionTracker.m; path = MoPubSDK/MPAdConversionTracker.m; sourceTree = ""; }; + 48293070A0F825A59DA3BB37DD55A101 /* MRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRConstants.h; path = MoPubSDK/Internal/MRAID/MRConstants.h; sourceTree = ""; }; + 483AD4476BD22474474125111E540A11 /* MPNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeCustomEvent.m; path = MoPubSDK/NativeAds/MPNativeCustomEvent.m; sourceTree = ""; }; + 488E86747EA40209D2EC0C54B7CA8462 /* FBSDKBridgeAPIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m; sourceTree = ""; }; + 48910A90014E4A24C35BED04DFFB6183 /* FBSDKBridgeAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPI.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m; sourceTree = ""; }; + 48D19D7EF75807769915FD51960E3F94 /* FBSDKBridgeAPIProtocolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolType.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h; sourceTree = ""; }; + 4940329881BD0CFFD0A0365C014D5A73 /* FBSDKAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolving.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h; sourceTree = ""; }; 498A16D85D9C972689BF42A44AABE26F /* Pods-MAPS.ME.production full.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.production full.xcconfig"; sourceTree = ""; }; - 4B20DF7FD027473BCD9A0D23FC6AF10F /* FBSDKServerConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfiguration+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h"; sourceTree = ""; }; - 4B732C148F1B2C11BBFC612B725F84A7 /* FBSDKAppEventsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsState.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m; sourceTree = ""; }; - 4BC886B6053DB4E0413D8CAC86A4581D /* FBSDKGateKeeperManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGateKeeperManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m; sourceTree = ""; }; - 4BFC69877195BFE9B2C63B8E4BB4B87C /* FBSDKTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h; sourceTree = ""; }; - 4C72D2458162CE65CAC7783BDF0935A1 /* FBSDKTestUsersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTestUsersManager.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h; sourceTree = ""; }; - 4CFAECCCCA97AA0A31B06F4220C0099F /* FBSDKAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererView.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m; sourceTree = ""; }; - 4E57488BCDFBFF5B54337D11564335DA /* FBSDKPaymentObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKPaymentObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m; sourceTree = ""; }; - 4E80367343A2A40B3A3FB76CD8ABC906 /* ActionSheetLocalePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetLocalePicker.h; path = Pickers/ActionSheetLocalePicker.h; sourceTree = ""; }; - 4F2122032FC598AF29E7E4C0DA156D95 /* FBSDKLoginConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginConstants.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h; sourceTree = ""; }; - 4F902009A6A795BE890B2ED07D674E56 /* FBSDKErrorRecoveryConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h; sourceTree = ""; }; - 509F789D15768EF542FBD50AE30CBF87 /* FBSDKDeviceRequestsHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceRequestsHelper.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h; sourceTree = ""; }; - 50A0AFEBFA4688FE7EFC07E211CFD148 /* FBSDKBridgeAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPI.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h; sourceTree = ""; }; - 512355757BC6BE380F4C27530403C295 /* FBSDKMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMath.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m; sourceTree = ""; }; - 51246240F92AFAC949C48FCE65115613 /* FBSDKURLSessionTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLSessionTask.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.h; sourceTree = ""; }; - 5260E2319B708E10330EE4051300B324 /* FBSDKLoginManagerLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLogger.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h; sourceTree = ""; }; - 55BD48CF0976F0D629CF8F3A2D9E2952 /* FBSDKEventBindingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBindingManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h; sourceTree = ""; }; - 57455EAD3979A8648CAF18AECB805123 /* FBSDKButton+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKButton+Subclass.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h"; sourceTree = ""; }; - 57B90207BEC884C97690334EBFBD0534 /* FBSDKAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererController.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m; sourceTree = ""; }; - 58A6CFE907D08D996DB817C6309ED56A /* FBSDKErrorRecoveryConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m; sourceTree = ""; }; - 591EEF5B379133A5C03813212DF69178 /* libFlurry_10.1.0.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libFlurry_10.1.0.a; path = Flurry/libFlurry_10.1.0.a; sourceTree = ""; }; - 59E708784EDB220928D2A263BCFD4020 /* FBSDKCodelessPathComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessPathComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m; sourceTree = ""; }; - 5A6D3957F9E05AF30E20B88A6D7E2CD7 /* FBSDKCoreKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKCoreKit-Info.plist"; sourceTree = ""; }; - 5B37682E9D9C11E9C16BE58B0196F379 /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; - 5B465DDB4BED6B5252D745252955F24E /* FBSDKGraphRequestConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.h; sourceTree = ""; }; - 5C56519C545DCD04305A4113D85250DF /* FBSDKUserDataStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUserDataStore.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m; sourceTree = ""; }; - 5C75FF7BC1C1E3A9D1CBC3EC748DBB64 /* FBSDKGraphRequestDataAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestDataAttachment.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.h; sourceTree = ""; }; - 5C77263563DABA7693EC0FB7452EEC1E /* FBSDKSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSwizzler.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h; sourceTree = ""; }; - 5CD15FA3FF31A22CFF45DB5C762CAB75 /* _FBSDKLoginRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKLoginRecoveryAttempter.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m; sourceTree = ""; }; - 5CE6A5F6D11A5A83BAA28269645C25D9 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 49E3236A8FC095E9EADF61185A094393 /* AppsFlyerLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AppsFlyerLib.framework; sourceTree = ""; }; + 4A24D5F33E4AE0D558DCE24899D66B2B /* FBSDKMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMeasurementEvent.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m; sourceTree = ""; }; + 4A439B067378E5ECAAC8167747EDF530 /* FBSDKURLSessionTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLSessionTask.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h; sourceTree = ""; }; + 4A6F9603EDB276B5C7641C82E272DA9D /* FBSDKLogo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h; sourceTree = ""; }; + 4AB56BDBFFCF3B94A1D816B9260A1D8B /* MPBaseInterstitialAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseInterstitialAdapter.m; path = MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m; sourceTree = ""; }; + 4B21888C64296EBFB772292B225F139C /* MPViewabilityAdapterAvid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapterAvid.h; path = MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h; sourceTree = ""; }; + 4B2D7F39EE114D3E593BF786AE4E7D30 /* Pushwoosh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pushwoosh.xcconfig; sourceTree = ""; }; + 4BA6157D1625CEC0C628D38D222EEC62 /* MPGeolocationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPGeolocationProvider.m; path = MoPubSDK/Internal/Utility/MPGeolocationProvider.m; sourceTree = ""; }; + 4BFA38C6736A595044835137D4BFDC44 /* FBSDKAppEventsStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsStateManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h; sourceTree = ""; }; + 4BFA696B2A83B22B12FC28F3F7368681 /* MPVASTTracking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTTracking.h; path = MoPubSDK/Internal/MPVASTTracking.h; sourceTree = ""; }; + 4C1DFC7D31D0E0612492469AD5BE28F7 /* AbstractActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractActionSheetPicker.h; path = Pickers/AbstractActionSheetPicker.h; sourceTree = ""; }; + 4C77219B12E5D3A76DBCF836A9468E3B /* FBSDKBasicUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBasicUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.h; sourceTree = ""; }; + 4C881AB522540518C039D9187ACC4501 /* ActionSheetPicker-3.0-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ActionSheetPicker-3.0-dummy.m"; sourceTree = ""; }; + 4CFF120C55B163F4C4D832E468153540 /* FBSDKFeatureExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKFeatureExtractor.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.h; sourceTree = ""; }; + 4D6243759D9403FA1910870052B4B7DC /* FBSDKBridgeAPIProtocolWebV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV2.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m; sourceTree = ""; }; + 4D8D180A327EDE07ABDD3B7F425E3C05 /* MPBannerAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerAdManager.m; path = MoPubSDK/Internal/Banners/MPBannerAdManager.m; sourceTree = ""; }; + 4DA2A13AF95552A9E591C9873DBA4507 /* MOPUBPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerManager.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h; sourceTree = ""; }; + 4DDA4F6DDADC4B7C7845788A03C85A74 /* FBSDKAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererView.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m; sourceTree = ""; }; + 4E2E6CBA2387E0533F9AFD73FCCE76D6 /* MoPub_AvidVideoAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidVideoAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h; sourceTree = ""; }; + 4ED366E76B118C3C794976A49C4FBB01 /* MPCoreInstanceProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCoreInstanceProvider.h; path = MoPubSDK/Internal/MPCoreInstanceProvider.h; sourceTree = ""; }; + 4EEB0A8DC7879A09C054FB7C39872C17 /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; + 4F0669EE3EC010EB3612C96F6C48C04B /* MRBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRBridge.m; path = MoPubSDK/Internal/MRAID/MRBridge.m; sourceTree = ""; }; + 4F8723F0095B9EAF124C898CA7D78807 /* FBSDKErrorRecoveryConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m; sourceTree = ""; }; + 4FC8ECB0B0AC2F04D218EA34CD8D7CF9 /* MPRateLimitManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRateLimitManager.m; path = MoPubSDK/Internal/MPRateLimitManager.m; sourceTree = ""; }; + 4FFDAA6DE15B8D7E990C8F0D00237CFF /* FBSDKAppEventsDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsDeviceInfo.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m; sourceTree = ""; }; + 501C8A534911DE7EE7D1963C96491CCD /* FBSDKTestUsersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTestUsersManager.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m; sourceTree = ""; }; + 50915A5B2B745F9478733D9821BF2073 /* FBSDKGraphRequestBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestBody.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m; sourceTree = ""; }; + 5120B39C135FBFA3A903A9375E22AE37 /* FBInterstitialAdBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBInterstitialAdBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h; sourceTree = ""; }; + 51573793E30701F329FC4B585DCA9B6D /* MPEnhancedDeeplinkRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPEnhancedDeeplinkRequest.m; path = MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m; sourceTree = ""; }; + 516DF1E6D460CD202A1FA8A8EEB1BEA3 /* MPPlayBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPPlayBtn.png; path = MoPubSDK/Resources/MPPlayBtn.png; sourceTree = ""; }; + 517496033F1AE6363503BEC662D156CF /* FBSDKAddressInferencer.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKAddressInferencer.mm; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.mm; sourceTree = ""; }; + 5184D952BECA90E5A4B5D5470129725F /* MPNativeAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAd.h; path = MoPubSDK/NativeAds/MPNativeAd.h; sourceTree = ""; }; + 518F1E4B1B01832842CA6D695DE46F61 /* SWActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWActionSheet.h; path = Pickers/SWActionSheet.h; sourceTree = ""; }; + 51A0B10803186F987DFD090783BDFB9B /* FBSDKUserDataStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUserDataStore.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h; sourceTree = ""; }; + 51D17A0AE72C7967EC2970CC6D2BECA4 /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; + 51E94E817640FE5976D2180005058D01 /* FBSDKMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h; sourceTree = ""; }; + 52298C7973616671B3B0DC5A5E8EEB07 /* FBSDKLoginManagerLoginResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLoginResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m; sourceTree = ""; }; + 5278627B37FE7CD987E6CDC75B9741F9 /* MoPub-FacebookAudienceNetwork-Adapters.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "MoPub-FacebookAudienceNetwork-Adapters.modulemap"; sourceTree = ""; }; + 5349F6B96CA8A47E46EA38ECF9D2E3E4 /* FBSDKCloseIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCloseIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h; sourceTree = ""; }; + 53648406E1F91895916021AC15DAF5A4 /* MPRateLimitConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRateLimitConfiguration.m; path = MoPubSDK/Internal/MPRateLimitConfiguration.m; sourceTree = ""; }; + 53BC3CB3982B71C708D28F18038C32CA /* MPEngineInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPEngineInfo.m; path = MoPubSDK/MPEngineInfo.m; sourceTree = ""; }; + 53F0B0735D8A3242B97FF7CEB9C29047 /* FBSDKInstrumentManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInstrumentManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.m; sourceTree = ""; }; + 5444100EB77E645F8C46E64D19B38BC0 /* ActionSheetDistancePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDistancePicker.m; path = Pickers/ActionSheetDistancePicker.m; sourceTree = ""; }; + 5466F3D7A3CD085C3E453B4B2C5E662E /* MPHTMLInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLInterstitialCustomEvent.m; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m; sourceTree = ""; }; + 5474068C68892BFB96B07EF1FEC99148 /* MPReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPReachabilityManager.h; path = MoPubSDK/Internal/MPReachabilityManager.h; sourceTree = ""; }; + 54C31E7C923D59B35A34CAE619546BC4 /* MPBannerCustomEventAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerCustomEventAdapter.m; path = MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m; sourceTree = ""; }; + 5509B0EB0CE3C370E4BF564165744E82 /* MPRewardedVideoAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoAdapter.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m; sourceTree = ""; }; + 550EA76E460E0B22EBEAC1020F96CB17 /* FBSDKCodelessIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m; sourceTree = ""; }; + 5525CE4FEA2981057A060682417208C4 /* MPBaseBannerAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseBannerAdapter.m; path = MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m; sourceTree = ""; }; + 55336FC4EDB257F3F95601891C41CBCA /* FBSDKMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMath.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h; sourceTree = ""; }; + 55571D176840130F668ACD8891B32470 /* _FBSDKTemporaryErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKTemporaryErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h; sourceTree = ""; }; + 559F7EAE03EA94D72F7A73BC6DF86A0E /* MPStreamAdPlacementData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStreamAdPlacementData.m; path = MoPubSDK/NativeAds/MPStreamAdPlacementData.m; sourceTree = ""; }; + 55DBC70BE256804860A51F663B538B7B /* mopub-ios-sdk-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "mopub-ios-sdk-Info.plist"; sourceTree = ""; }; + 5631CF77F9DD01A8FA3A0BBD4BC00341 /* FBSDKModelManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKModelManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.h; sourceTree = ""; }; + 5651959E78F907C6ACF04A599552DAC3 /* FBSDKAppLinkUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h; sourceTree = ""; }; + 56D5C86CC76FADAEBE68517166805AFA /* MPXMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPXMLParser.h; path = MoPubSDK/Internal/Common/MPXMLParser.h; sourceTree = ""; }; + 5723C12544848708ED3A50705397BB9D /* NSHTTPURLResponse+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSHTTPURLResponse+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h"; sourceTree = ""; }; + 57455311E595D80DC1B44FF90BD5402F /* MPAdAlertManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdAlertManager.m; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m; sourceTree = ""; }; + 57657C36A5C493F8DBDEAABFE8052B82 /* MPConsentDialogViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentDialogViewController.m; path = MoPubSDK/Internal/MPConsentDialogViewController.m; sourceTree = ""; }; + 579C168BFEA5C0805652CA990022B175 /* ActionSheetMultipleStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetMultipleStringPicker.h; path = Pickers/ActionSheetMultipleStringPicker.h; sourceTree = ""; }; + 57D38D21E25BDF933DF115562F2A6E4B /* FBSDKUIUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUIUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h; sourceTree = ""; }; + 57E4BA6C3815CEDA62CAB177D7EEAB4A /* ActionSheetLocalePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetLocalePicker.m; path = Pickers/ActionSheetLocalePicker.m; sourceTree = ""; }; + 5850B55677B3029BBB8BF92A26549EF8 /* MPAdPlacerInvocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdPlacerInvocation.m; path = MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m; sourceTree = ""; }; + 593BE715D12FA111F2FBE47ADE8AC9A2 /* MPConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsoleLogger.h; path = MoPubSDK/Logging/Internal/MPConsoleLogger.h; sourceTree = ""; }; + 59C7897821E3E63040B9EE7D6C762F8E /* FBSDKLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m; sourceTree = ""; }; + 5C0D2F85C2695BD25D3ACA85C9D42DA9 /* FBSDKCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m; sourceTree = ""; }; + 5C2198FEBD707153A061873D910AEB16 /* MPNativeAdRendererConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererConfiguration.h; path = MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h; sourceTree = ""; }; + 5C31FC567866474470186C507211ED48 /* ActionSheetCustomPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetCustomPicker.m; path = Pickers/ActionSheetCustomPicker.m; sourceTree = ""; }; + 5CCC6D9B6582B2944D8D3CDF726C3D7E /* MPHTTPNetworkTaskData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTTPNetworkTaskData.m; path = MoPubSDK/Internal/MPHTTPNetworkTaskData.m; sourceTree = ""; }; 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKLoginKit.framework; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E5D3B73801EA4B673396D5BFFEE0B69 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 5F1A8CFD592FB21294908452B745AEA1 /* FBSDKMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMeasurementEvent.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m; sourceTree = ""; }; - 5F26E7650F2224D6DB4CA28DBDA0AD77 /* FBSDKAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h; sourceTree = ""; }; - 608A4C9051BD18BE36F6FC7E8E1FA6C9 /* FBSDKProfile+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKProfile+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h"; sourceTree = ""; }; - 60C2CF737E2123B43B6FFEB26B3B6066 /* FBSDKViewHierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewHierarchy.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.h; sourceTree = ""; }; - 6124B64E1E23E46DB1BD5404ADD9BE3A /* DistancePickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DistancePickerView.h; path = Pickers/DistancePickerView.h; sourceTree = ""; }; - 6462A9A157D366F6CA07E3BC106BF736 /* FBSDKDeviceLoginManagerResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManagerResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h; sourceTree = ""; }; - 646EF293E15F898BADE450251AEA07A5 /* ActionSheetLocalePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetLocalePicker.m; path = Pickers/ActionSheetLocalePicker.m; sourceTree = ""; }; - 64A923E23237A741C96AE063BDE9C5E3 /* ActionSheetCustomPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPicker.h; path = Pickers/ActionSheetCustomPicker.h; sourceTree = ""; }; - 64CAAF90D30446CEBAF1B9B334105549 /* FBSDKBridgeAPIProtocolWebV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV2.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h; sourceTree = ""; }; - 653E6D85C23E362211925654059B8D43 /* FBSDKProfilePictureView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfilePictureView.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m; sourceTree = ""; }; - 655782EF69CE111E9173A269AF8D29F7 /* FBSDKDeviceLoginManagerResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginManagerResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h"; sourceTree = ""; }; - 6646B2E5A422A83AA04BD88FBF66652E /* Flurry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Flurry.h; path = Flurry/Flurry.h; sourceTree = ""; }; - 673B55FC01C20C6761DBC8417C1710E2 /* FBSDKServerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h; sourceTree = ""; }; - 687184D29C8D78E315A53F47C578F391 /* FBSDKEventBindingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBindingManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m; sourceTree = ""; }; - 69003AFD351E25C2A0924C76F462FFCC /* ActionSheetDistancePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDistancePicker.m; path = Pickers/ActionSheetDistancePicker.m; sourceTree = ""; }; - 694640608FF969F2DCD1FF18A5C0AD53 /* FBSDKCodelessMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessMacros.h; sourceTree = ""; }; - 69E0EFAF4C6EADF335E37E63918BCD5A /* FBSDKMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMath.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h; sourceTree = ""; }; - 69E18D17CB62ECF138096EFEC9FB192A /* SWActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWActionSheet.m; path = Pickers/SWActionSheet.m; sourceTree = ""; }; - 6C663CE95B9933E25C74425A83E237B2 /* BFAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkNavigation.h; path = Bolts/iOS/BFAppLinkNavigation.h; sourceTree = ""; }; - 6C92E5176104A3F946C6465561A20B62 /* FBSDKBridgeAPIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h; sourceTree = ""; }; - 6D27A71A558C0AAAF37C50B95951EBFA /* FBSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKError.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m; sourceTree = ""; }; - 6D6CA0ADF47E159E535591F264CF7DF9 /* FlurrySessionBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurrySessionBuilder.h; path = Flurry/FlurrySessionBuilder.h; sourceTree = ""; }; - 6E2EF1CF8AD5E3113651553975D9B843 /* ActionSheetStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetStringPicker.m; path = Pickers/ActionSheetStringPicker.m; sourceTree = ""; }; - 7023ECF48ED539181E896376F65FADBA /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 70DBDE11A9C91339D36AD7DBEC40F7F6 /* FBSDKGraphRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.m; sourceTree = ""; }; - 70DC6116A6D768AB600AB3D3D4C1A541 /* ActionSheetMultipleStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetMultipleStringPicker.h; path = Pickers/ActionSheetMultipleStringPicker.h; sourceTree = ""; }; - 70F1B2F7FEC4B1449B3FD4D7BCB8FF8E /* Flurry-iOS-SDK.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Flurry-iOS-SDK.xcconfig"; sourceTree = ""; }; - 717E669DFFEA6A050698A7FD0139574C /* FBSDKButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h; sourceTree = ""; }; - 71B7B49A77B48F6709DDE6DD6AA697B3 /* FBSDKGraphRequestBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestBody.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m; sourceTree = ""; }; - 71EE10D368749405E4B7D1E53714A8B4 /* FBSDKAudioResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAudioResourceLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m; sourceTree = ""; }; - 736D03EDC633D7EA1A5021078CF2C210 /* FBSDKAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererController.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h; sourceTree = ""; }; - 739BD4005CB6CCD9A50FF44CDFB4EC27 /* FBSDKCoreKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-umbrella.h"; sourceTree = ""; }; - 749B7A5574B275D79F45A5B7BE1D56E4 /* FBSDKAccessTokenCacheV3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3.h; sourceTree = ""; }; - 75326908F85A4D8A400333305E831D29 /* FBSDKAccessTokenExpirer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenExpirer.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h; sourceTree = ""; }; - 79382CBC9BE9E52075A8C13D29DD17AE /* FBSDKUserDataStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUserDataStore.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h; sourceTree = ""; }; - 7A8A0FC009D3C8E5B6CB12BFFE0F41A3 /* FBSDKMaleSilhouetteIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMaleSilhouetteIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m; sourceTree = ""; }; - 7B132AFC106FE742E5EB546510692A6D /* FBSDKAppEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEvents.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m; sourceTree = ""; }; - 7B5FA5A23C4F2FED945B729CCAC2ACA1 /* FBSDKLoginKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKLoginKit-Info.plist"; sourceTree = ""; }; - 7B89CC9D29C1014994C8CA1E80689F6B /* ActionSheetPicker-3.0-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-prefix.pch"; sourceTree = ""; }; - 7C9ABC0E579B7A45DF838CCD07459F8F /* FBSDKDeviceRequestsHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceRequestsHelper.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m; sourceTree = ""; }; - 7DF9F850A0DBB0435D6C58167951BD97 /* FBSDKLoginManagerLoginResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManagerLoginResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h"; sourceTree = ""; }; - 7E090E7E8C52D72FADC539CDFD08C98F /* FBSDKURLSessionTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLSessionTask.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKURLSessionTask.m; sourceTree = ""; }; - 7F0061756930C01C16768B3E51AF359C /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Bolts.modulemap; sourceTree = ""; }; - 7FF419DC01070CA2D0CC8EEA2F13F20A /* FBSDKServerConfigurationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfigurationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m; sourceTree = ""; }; - 805FD96A717C52DA283F8689418FF6AD /* FBSDKURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURL.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m; sourceTree = ""; }; - 81C9809FBD44E86249CDE0FC5ADD6B60 /* _FBSDKTemporaryErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKTemporaryErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h; sourceTree = ""; }; - 83BDB30DC190C5B57EB4840AD71DAC4C /* FBSDKAccessTokenCacheV4.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV4.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.m; sourceTree = ""; }; - 846D41CF35FC79EB4676149A6E443B73 /* FBSDKBridgeAPIProtocolNativeV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolNativeV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h; sourceTree = ""; }; - 8506E4FF1AA656AA309FB5FC480BA679 /* FBSDKAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolving.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h; sourceTree = ""; }; - 85C09C031B45D0FF83FDB0ABE66512EF /* FBSDKGraphRequestMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestMetadata.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m; sourceTree = ""; }; - 86F6655942C8C47CCE5B4D3A203452B9 /* FBSDKCoreKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-prefix.pch"; sourceTree = ""; }; - 873DD00D8A8ED6AE54A6F907881156C8 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - 87D227BDCBFE2AC4686865F324ED948E /* FBSDKTypeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTypeUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.h; sourceTree = ""; }; - 87F63C6C9990D6C047F2147B8C6494BB /* BFAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkTarget.h; path = Bolts/iOS/BFAppLinkTarget.h; sourceTree = ""; }; - 8879DF3A0DB656AFC93E4A4F3483EEA0 /* BFAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererController.h; path = Bolts/iOS/BFAppLinkReturnToRefererController.h; sourceTree = ""; }; - 891F751CE2E16BAC69EEB275A700463C /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; - 897218E980FF3DF36DE66BD3C54E5122 /* BFWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFWebViewAppLinkResolver.h; path = Bolts/iOS/BFWebViewAppLinkResolver.h; sourceTree = ""; }; - 89C5C2F35DC0AC8D035C3967408C85EF /* FBSDKSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSettings.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h; sourceTree = ""; }; - 8A952670265950ECD1B218D9E3DC9A8C /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; - 8AB6DB66D81C0D82351580F4748224EC /* FBSDKGraphRequestConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestConnection.m; sourceTree = ""; }; - 8B736F1CEB5763DFEA3C6C64B594F368 /* FBSDKLoginError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginError.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h; sourceTree = ""; }; - 8C96196055420ED4E579156FAB97ED30 /* FBSDKLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogger.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m; sourceTree = ""; }; - 8DB905CCF523E16EA3A0D75844BA6066 /* FBSDKSystemAccountStoreAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSystemAccountStoreAdapter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.m; sourceTree = ""; }; - 8E2606D0DBAA77CD08B9D0ACD1FB9CF1 /* FBSDKApplicationObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h; sourceTree = ""; }; - 8E4752BC84A484BFFA1194C032BF5371 /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; - 9039AF91F1ED6A4CD26E6586EC943E8D /* FBSDKWebDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h; sourceTree = ""; }; + 5E5800A8882F2703C2B38B7D8A9D7803 /* FBInterstitialAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBInterstitialAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h; sourceTree = ""; }; + 5EBF87C7C2616BA3B2EC24E5C7150338 /* FBAudienceNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAudienceNetwork.h; path = Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h; sourceTree = ""; }; + 5EC50DD9A926C0225E7D8D7C99F19B30 /* MPNativeAdError+VAST.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAdError+VAST.m"; path = "MoPubSDK/Internal/Utility/Categories/MPNativeAdError+VAST.m"; sourceTree = ""; }; + 5ED68CA23FE476261775E003BCCFC40E /* FBSDKCrashObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrashObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.m; sourceTree = ""; }; + 60057F1E53F3C5882D8585CB91E6E880 /* ActionSheetPicker-3.0.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "ActionSheetPicker-3.0.modulemap"; sourceTree = ""; }; + 603042150D80603D987E5D656BF626D7 /* MPViewabilityAdapterMoat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityAdapterMoat.m; path = MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m; sourceTree = ""; }; + 60863948D4E605FFAE575ED46939DA12 /* NSString+MPConsentStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MPConsentStatus.h"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h"; sourceTree = ""; }; + 61AC2A061D672F4B60DE1F5A4BE57D66 /* FBSDKCoreKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKCoreKit-Info.plist"; sourceTree = ""; }; + 61D2996792055AC9D459F58B61F54320 /* MPRewardedVideoAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoAdManager.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h; sourceTree = ""; }; + 61E5329550CA53F16B7CBB57C3F03C7A /* FBSDKViewHierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewHierarchy.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h; sourceTree = ""; }; + 62065542E1A98929CB1559E35BB6C3D4 /* FBSDKBridgeAPIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIResponse.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m; sourceTree = ""; }; + 631741C3C4348599076C373EE142A286 /* MPMRAIDInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDInterstitialCustomEvent.m; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m; sourceTree = ""; }; + 636A68168EC4733D9F61624E6757FA76 /* FBSDKProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfile.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m; sourceTree = ""; }; + 637A5C36C92BA6521561BD9E974D314A /* MPVASTWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTWrapper.m; path = MoPubSDK/Internal/VAST/MPVASTWrapper.m; sourceTree = ""; }; + 63955E4F4F737B6D06DB1DF034B512BD /* MPNativeView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeView.h; path = MoPubSDK/NativeAds/Internal/MPNativeView.h; sourceTree = ""; }; + 63C13850004ED10B7D1451A1332C3FF2 /* MOPUBReplayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBReplayView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h; sourceTree = ""; }; + 63D627033DAECD391E890FBAF385FF58 /* libFlurry_10.1.0.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libFlurry_10.1.0.a; path = Flurry/libFlurry_10.1.0.a; sourceTree = ""; }; + 643E2683778ACC9EB5CB76FBC7956795 /* MPNativeAdRendering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendering.h; path = MoPubSDK/NativeAds/MPNativeAdRendering.h; sourceTree = ""; }; + 655CD104304A33F2F065EDFF913405E2 /* FBSDKButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h; sourceTree = ""; }; + 655FBAF72D7D2F65781B5838F489B194 /* FBSDKCrashShield.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashShield.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h; sourceTree = ""; }; + 657CDC49DB5FE547437DAC287F0E4897 /* FBSDKModelManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKModelManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.m; sourceTree = ""; }; + 6586A589843DB8F3F358004ADC84ECAD /* MPTableViewAdPlacerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewAdPlacerCell.m; path = MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m; sourceTree = ""; }; + 65B45BB217FF4829276E865984B2A0ED /* MPHTTPNetworkSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTTPNetworkSession.h; path = MoPubSDK/Internal/MPHTTPNetworkSession.h; sourceTree = ""; }; + 65F27BB35097F2D8D08FA8B681ECA773 /* MPAPIEndpoints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAPIEndpoints.h; path = MoPubSDK/Internal/Common/MPAPIEndpoints.h; sourceTree = ""; }; + 66032CECA8D63253F9CFD396B3CF606E /* MPLogEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogEvent.m; path = MoPubSDK/Logging/MPLogEvent.m; sourceTree = ""; }; + 662C8DFC2BB210CEC404D76B95FCDE12 /* UIColor+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m"; sourceTree = ""; }; + 66972B12227B9E93D7FAC0A8CD8356D5 /* MPMutedBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPMutedBtn@3x.png"; path = "MoPubSDK/Resources/MPMutedBtn@3x.png"; sourceTree = ""; }; + 669FEF5E033940469407629FB149C049 /* MPError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPError.h; path = MoPubSDK/Internal/Utility/MPError.h; sourceTree = ""; }; + 66F1E9E6014D2076196090416F8AFFA5 /* ActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetPicker.h; path = Pickers/ActionSheetPicker.h; sourceTree = ""; }; + 672D07CE3FF65BA9CB60B288645971A4 /* MOPUBPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerManager.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m; sourceTree = ""; }; + 672DB295A82F043D9A1159E8F4132205 /* MPAdImpressionTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdImpressionTimer.m; path = MoPubSDK/Internal/Common/MPAdImpressionTimer.m; sourceTree = ""; }; + 68322907696B557517A8AE7622CCEE74 /* FBSDKSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSettings.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h; sourceTree = ""; }; + 68428AFCDE9D2DEB6121FF80F9B35883 /* FBSDKURLOpening.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLOpening.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h; sourceTree = ""; }; + 6929702B8CAF9B272E66A9FC85C980EE /* MOPUBExperimentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBExperimentProvider.m; path = MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m; sourceTree = ""; }; + 692D67CBA4BB1964A70203E54B586986 /* FBSDKImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKImageDownloader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h; sourceTree = ""; }; + 6955FA68A34770181A88C0BFE3A5DE3C /* MPVASTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTError.h; path = MoPubSDK/Internal/VAST/MPVASTError.h; sourceTree = ""; }; + 69A102E51EBB7EB8CCF0521D150B341D /* MPMediationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMediationManager.m; path = MoPubSDK/Internal/MPMediationManager.m; sourceTree = ""; }; + 69CF1C36DE317A8879C959F7FCFC2ED9 /* MPNativeAdSourceQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdSourceQueue.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m; sourceTree = ""; }; + 69E40514592BF1243FDA76902C6036C6 /* FBSDKAppEventsUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h; sourceTree = ""; }; + 6A0AB4E98450DECED57A49497A3A21A4 /* FBSDKAppEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEvents.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h; sourceTree = ""; }; + 6A15DF00D3C630F687C9DCB0460751FF /* MPViewabilityTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityTracker.m; path = MoPubSDK/Viewability/MPViewabilityTracker.m; sourceTree = ""; }; + 6A91CE36DBA01B4CAB82DD92E949DCF9 /* FBSDKSuggestedEventsIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSuggestedEventsIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h; sourceTree = ""; }; + 6A9E92C057DD12C14237347F2F3E4B2F /* FBSDKDynamicFrameworkLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDynamicFrameworkLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h; sourceTree = ""; }; + 6B51958FA5570084434E46FD5CEB51B4 /* FBSDKWebDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialog.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h; sourceTree = ""; }; + 6B5EF0DA2500F915C96625ABB9C9B91B /* MPNativeAdRenderingImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRenderingImageLoader.h; path = MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h; sourceTree = ""; }; + 6C0F422BF024FFADE6E1DCA93A9D9392 /* MPNativeAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAd.m; path = MoPubSDK/NativeAds/MPNativeAd.m; sourceTree = ""; }; + 6C3951616A4E1DA7BF2D4258FA666E94 /* FBSDKContainerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKContainerViewController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m; sourceTree = ""; }; + 6C68E169BD7D0C6446FA7DF0CBE1A5F3 /* FBSDKModelUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKModelUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.m; sourceTree = ""; }; + 6D71457BFF18D2FF20E3E37C46ED7F2F /* FBSDKEventDeactivationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventDeactivationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.h; sourceTree = ""; }; + 6D86C1DE3D160C2308DC872DE3D2DE3B /* MPAdConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdConfiguration.h; path = MoPubSDK/Internal/Common/MPAdConfiguration.h; sourceTree = ""; }; + 6DECC32DB4046B242175C9C8B2A8500C /* MRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRError.m; path = MoPubSDK/Internal/MRAID/MRError.m; sourceTree = ""; }; + 6E6CEA7C7EF38700FEFC5CCF29FCE88F /* FBSDKUserDataStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUserDataStore.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m; sourceTree = ""; }; + 6E8409716AE9F73CB937ACFC120B127D /* MPHTMLInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLInterstitialCustomEvent.h; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h; sourceTree = ""; }; + 6EA1FF1B14F4970D283FEBBB7038FD8B /* FBAdImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdImage.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdImage.h; sourceTree = ""; }; + 6F32F9F1AE611D56483A036F07FC3062 /* FBSDKDialogConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDialogConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h; sourceTree = ""; }; + 6F529CCEB89009735EBC5E0848B8C02A /* FBSDKLogo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m; sourceTree = ""; }; + 7057094CE5447E7FBD6B6406D558E201 /* MPVASTManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTManager.h; path = MoPubSDK/Internal/VAST/MPVASTManager.h; sourceTree = ""; }; + 70A74EA69D29EEE2738DB05AC058A94F /* MPIdentityProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPIdentityProvider.m; path = MoPubSDK/Internal/Utility/MPIdentityProvider.m; sourceTree = ""; }; + 70EE9A5E8A0D640EB95232BEF4529A9D /* MPConsentManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentManager.h; path = MoPubSDK/Internal/MPConsentManager.h; sourceTree = ""; }; + 7155A767452679DAA2CCDF87F40D3C99 /* MPNativeAdRenderingImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRenderingImageLoader.m; path = MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m; sourceTree = ""; }; + 717C7C323A9013570CD9C34AF5E16965 /* MPViewabilityAdapterAvid.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityAdapterAvid.m; path = MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m; sourceTree = ""; }; + 71A06BB30009F32E400270D235147D25 /* FBSDKProfilePictureView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfilePictureView.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m; sourceTree = ""; }; + 71B3AA573C58B683A42288B2CFBF3435 /* ActionSheetPicker-3.0.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.xcconfig"; sourceTree = ""; }; + 71F3F179701FC208A10BCE26FC48F71F /* FBSDKLoginManagerLoginResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManagerLoginResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h"; sourceTree = ""; }; + 72E1D4279EC05F7179D2143916C50F89 /* MPStreamAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacer.h; path = MoPubSDK/NativeAds/MPStreamAdPlacer.h; sourceTree = ""; }; + 72F93DA4636619F51DF60D5E61326A7F /* NSString+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m"; sourceTree = ""; }; + 730388327989C9B8D309121F78A31745 /* MPInterstitialAdControllerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdControllerDelegate.h; path = MoPubSDK/MPInterstitialAdControllerDelegate.h; sourceTree = ""; }; + 733FF0A63A5E63E32114A3C475C99754 /* FacebookAdapterConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookAdapterConfiguration.h; path = FacebookAudienceNetwork/FacebookAdapterConfiguration.h; sourceTree = ""; }; + 73E6C17FBC6638D3A542A66A1AD6630F /* FBSDKAccessToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessToken.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m; sourceTree = ""; }; + 742D0A33F744C488EAEE0CDA27016F62 /* FacebookRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookRewardedVideoCustomEvent.h; path = FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h; sourceTree = ""; }; + 7440508D561A617A31F3661D11DBE4E4 /* MPWebBrowserUserAgentInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPWebBrowserUserAgentInfo.m; path = MoPubSDK/Internal/MPWebBrowserUserAgentInfo.m; sourceTree = ""; }; + 744253A82D88BA526A83AF6269B01239 /* FBSDKCrashHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashHandler.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.h; sourceTree = ""; }; + 74F552E1E440350F05EA7055DDC2922C /* MPMoPubAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubAdPlacer.h; path = MoPubSDK/MPMoPubAdPlacer.h; sourceTree = ""; }; + 74F8BCC2C46C026ECC22EBD02B844B87 /* MPVASTInline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTInline.h; path = MoPubSDK/Internal/VAST/MPVASTInline.h; sourceTree = ""; }; + 7502FC2F85683377493A6C7E6A8372DE /* MPNativePositionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativePositionSource.m; path = MoPubSDK/NativeAds/Internal/MPNativePositionSource.m; sourceTree = ""; }; + 752F3FABF4AC08320F3F34A1BE2ACB14 /* FBSDKGraphRequest+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequest+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h"; sourceTree = ""; }; + 75430D08B578AC2FE620477A2F755B8E /* FBSDKWebDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m; sourceTree = ""; }; + 755B63DFE64AC680C8976B22CA5F8CAF /* MPGeolocationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPGeolocationProvider.h; path = MoPubSDK/Internal/Utility/MPGeolocationProvider.h; sourceTree = ""; }; + 75B6D835E7193BE0204A3D61202D407E /* FBSDKAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h; sourceTree = ""; }; + 766C7AB6ADEE7A78360F8C74D2ABFEEF /* MPAdapters.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = MPAdapters.plist; path = MoPubSDK/Resources/MPAdapters.plist; sourceTree = ""; }; + 76BFEB1255A5D7756F8E034C49CC75C5 /* MPGlobal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPGlobal.m; path = MoPubSDK/Internal/Utility/MPGlobal.m; sourceTree = ""; }; + 773710B81CB202A90E80BDB8A879F03F /* FacebookAdapterConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookAdapterConfiguration.m; path = FacebookAudienceNetwork/FacebookAdapterConfiguration.m; sourceTree = ""; }; + 775479F1B123573F2321C2FE7ADD8528 /* MPUserInteractionGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPUserInteractionGestureRecognizer.m; path = MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m; sourceTree = ""; }; + 777C16BBC363F0C83179312D32086A56 /* MPBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerCustomEvent.m; path = MoPubSDK/MPBannerCustomEvent.m; sourceTree = ""; }; + 777F01027D6974230DFE5AE5103EA09B /* MPViewabilityAdapterMoat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapterMoat.h; path = MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h; sourceTree = ""; }; + 778EC7E82BEEE1BA594D3E4054D30FD0 /* MOPUBAVPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBAVPlayer.h; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h; sourceTree = ""; }; + 7799C1A9ED6ACAEB8C73CFC969D35455 /* FBSDKAppEventsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsState.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m; sourceTree = ""; }; + 77A8043BA8B05BE74858231DA2787C3C /* MoPub-FacebookAudienceNetwork-Adapters.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MoPub-FacebookAudienceNetwork-Adapters.xcconfig"; sourceTree = ""; }; + 77BEDD7554CE6572DEAA5130F9BE091E /* MRNativeCommandHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRNativeCommandHandler.h; path = MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h; sourceTree = ""; }; + 77C60B0313CB87B37192DF7999529B84 /* FBSDKErrorConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h; sourceTree = ""; }; + 77C8E753C800BDC2C268D480049B3DD8 /* FBSDKApplicationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationDelegate.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h; sourceTree = ""; }; + 78A9A16575459C01B0D806781FA91BE6 /* MPNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPNativeAdRenderer.h; sourceTree = ""; }; + 78AF1958669D6639CACE164BD0E0031C /* MPActivityViewControllerHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPActivityViewControllerHelper.h; path = MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h; sourceTree = ""; }; + 79559A0B662BA3EEABDF38DFD41DAEC8 /* ActionSheetCustomPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPicker.h; path = Pickers/ActionSheetCustomPicker.h; sourceTree = ""; }; + 7980A3F23898E63D4E15E249795A2FEA /* FBAdChoicesView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdChoicesView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h; sourceTree = ""; }; + 79C95AF9466B4CA8F786C16186BC2133 /* MPLogManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogManager.m; path = MoPubSDK/Logging/Internal/MPLogManager.m; sourceTree = ""; }; + 7A24C0C508378034E4E1371124142472 /* FBSDKAppLinkUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m; sourceTree = ""; }; + 7A9749911324189B6B7D431FC7C90F57 /* MPDiskLRUCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPDiskLRUCache.m; path = MoPubSDK/NativeAds/Internal/MPDiskLRUCache.m; sourceTree = ""; }; + 7AE1E4C17D0B33DA5409493330F706E6 /* MPRewardedVideoConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoConnection.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m; sourceTree = ""; }; + 7B2F087C555FCCB0CC1355C58B0547A5 /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; + 7B35BE8B12E043B3742817CD8B61CB38 /* NSError+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h"; sourceTree = ""; }; + 7B50E3AE357D160D9341636DBEA54A11 /* FBSDKUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h; sourceTree = ""; }; + 7BE9F167C00AF094C327278436273B31 /* MPCloseButtonX@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseButtonX@2x.png"; path = "MoPubSDK/Resources/MPCloseButtonX@2x.png"; sourceTree = ""; }; + 7C643911D8D47E461771483B0A88E7B2 /* FBSDKWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebViewAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h; sourceTree = ""; }; + 7C9243623C2EEC3E811401AD292C9585 /* MPNativeAdSourceDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSourceDelegate.h; path = MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h; sourceTree = ""; }; + 7D3C0EED3BAA5ED67B96FCF0713D78FF /* MPActivityViewControllerHelper+TweetShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPActivityViewControllerHelper+TweetShare.h"; path = "MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h"; sourceTree = ""; }; + 7D5853D286F153705E5E2B9F9BAFB64E /* MPUBMoatMobileAppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPUBMoatMobileAppKit.framework; path = MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework; sourceTree = ""; }; + 7D808C5A6CE4C37BD741817479541F4F /* FBSDKLoginKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.xcconfig; sourceTree = ""; }; + 7E2733436B4C0444F92294CE1755EA69 /* MPVASTAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTAd.m; path = MoPubSDK/Internal/VAST/MPVASTAd.m; sourceTree = ""; }; + 7E2AE5344FCBE356171F0BAB71E0E856 /* MPVASTIndustryIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTIndustryIcon.m; path = MoPubSDK/Internal/VAST/MPVASTIndustryIcon.m; sourceTree = ""; }; + 7E361C5F49EACC4BBC77F3D98D69DA14 /* MPInterstitialAdController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialAdController.m; path = MoPubSDK/MPInterstitialAdController.m; sourceTree = ""; }; + 7E52876BE401A05D3024EDF9D2040BAD /* MPMRAIDInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDInterstitialCustomEvent.h; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h; sourceTree = ""; }; + 7EBE8A5369286502900D0FF7E9636017 /* MPVASTResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResponse.h; path = MoPubSDK/Internal/VAST/MPVASTResponse.h; sourceTree = ""; }; + 7EF02A7CBC18BE7D50438EA7676FCA4B /* MPMoPubNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubNativeCustomEvent.m; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m; sourceTree = ""; }; + 7EF6EE8844E339C10613416C512B82E5 /* ActionSheetStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetStringPicker.h; path = Pickers/ActionSheetStringPicker.h; sourceTree = ""; }; + 7F71BDE1D326DE086E182FA69BF19265 /* Flurry-iOS-SDK.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Flurry-iOS-SDK.modulemap"; sourceTree = ""; }; + 7FA399F7C9FD2D0836E0666ADAA2354C /* MPNativeCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeCache.m; path = MoPubSDK/NativeAds/Internal/MPNativeCache.m; sourceTree = ""; }; + 80A4CF5615E247D7250F811CE10F9290 /* FBNativeAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h; sourceTree = ""; }; + 80CFC130948D54FEAE8418992ED017D4 /* MPRateLimitManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRateLimitManager.h; path = MoPubSDK/Internal/MPRateLimitManager.h; sourceTree = ""; }; + 8125E4E787DFBAD19567A4C2EFB4BEA7 /* FBSDKLibAnalyzer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLibAnalyzer.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.m; sourceTree = ""; }; + 8165EC86DD47D40A6EDC50FFD343565D /* FBSDKRestrictiveDataFilterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKRestrictiveDataFilterManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.m; sourceTree = ""; }; + 818CF7621788EB57243D6C4A5C003488 /* MPVASTCompanionAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCompanionAd.m; path = MoPubSDK/Internal/VAST/MPVASTCompanionAd.m; sourceTree = ""; }; + 81E3784BFB1E4CD98BEC2FA444C5EC96 /* FBSDKMeasurementEventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEventListener.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.h; sourceTree = ""; }; + 823CC922454A052979AA32DC73D88742 /* FBAudienceNetworkAds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAudienceNetworkAds.h; path = Static/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h; sourceTree = ""; }; + 8264E457360906E19278556842BA058B /* FBSDKFeatureExtractor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKFeatureExtractor.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.m; sourceTree = ""; }; + 830DABC44391100D3241316B54764DB5 /* FBSDKAddressFilterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAddressFilterManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.m; sourceTree = ""; }; + 8311F954EE61A955734B0BE2CFAFC905 /* FBAdSize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdSize.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdSize.h; sourceTree = ""; }; + 835C43B4AFCE8FF0A12E5A69E4E83BF8 /* MPRealTimeTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRealTimeTimer.h; path = MoPubSDK/Internal/Common/MPRealTimeTimer.h; sourceTree = ""; }; + 837C9B637F543D90B0F18515DADC4EDD /* MPAdAlertGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdAlertGestureRecognizer.h; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h; sourceTree = ""; }; + 83A2D20D7993E608818EF3AF40F0BDE0 /* MoPub_AvidManagedDisplayAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidManagedDisplayAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h; sourceTree = ""; }; + 840186D225507611F8E45D7E340CCC58 /* NSURL+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h"; sourceTree = ""; }; + 840AC724ABFD6667BFC151EC8A7A71CF /* MOPUBPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h; sourceTree = ""; }; + 84432FE0B6790C7E1F6BAADD759711E4 /* FBNativeAdCollectionViewAdProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdCollectionViewAdProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h; sourceTree = ""; }; + 84A02660FE1077689726CEFE3BFFEA06 /* MPRewardedVideoError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoError.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoError.m; sourceTree = ""; }; + 8501F470C9E15C983C70C6A2284E6D19 /* FBRewardedVideoAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBRewardedVideoAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h; sourceTree = ""; }; + 85143B180A71B34C5BF60C3DF7B4C1EE /* FBSDKAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererController.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m; sourceTree = ""; }; + 852021629653B523F49CB8F30BB1309C /* FBSDKMonotonicTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMonotonicTime.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m; sourceTree = ""; }; + 85C4D24F9DF189DBF6472637641C2853 /* ActionSheetPicker-3.0-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-umbrella.h"; sourceTree = ""; }; + 86FC8DFD7B5C6E8BF61C72A150A5CF87 /* MPAdServerKeys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerKeys.h; path = MoPubSDK/Internal/MPAdServerKeys.h; sourceTree = ""; }; + 8705D61898B476FDCAC46A3E4C621678 /* FBSDKEventInferencer.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKEventInferencer.mm; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.mm; sourceTree = ""; }; + 878E6082F5AC49C23F646E8D6DB65E00 /* MPAPIEndpoints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAPIEndpoints.m; path = MoPubSDK/Internal/Common/MPAPIEndpoints.m; sourceTree = ""; }; + 885C55F37B4DBA54FF61997580345EB9 /* FBSDKLoginButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginButton.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h; sourceTree = ""; }; + 8885CF15F99D2825B0DED571D3FF8058 /* FBSDKEventInferencer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventInferencer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.h; sourceTree = ""; }; + 88A82E657D846BF8C13574BBA163EAEF /* MPNativeAdConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdConstants.m; path = MoPubSDK/NativeAds/MPNativeAdConstants.m; sourceTree = ""; }; + 88DECB3F8BA7B4E5B7EDF1AA0BB0B792 /* MPConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConstants.m; path = MoPubSDK/MPConstants.m; sourceTree = ""; }; + 88E0DA233DB60D828CC0C627CC990BC2 /* mopub-ios-sdk.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "mopub-ios-sdk.modulemap"; sourceTree = ""; }; + 8A49C2A87D07E0CC13F354F51B608CF2 /* UIView+FBNativeAdViewTag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+FBNativeAdViewTag.h"; path = "Static/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h"; sourceTree = ""; }; + 8AE3B4A15ADE57DA5F1A66A470758F91 /* FBSDKErrorRecoveryConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h; sourceTree = ""; }; + 8B067FEBE1405CB90DE0F916EDC8F7C3 /* MPAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdPositioning.m; path = MoPubSDK/NativeAds/MPAdPositioning.m; sourceTree = ""; }; + 8BA6846AAECE0D64B6E28A5F615BFECE /* FBSDKAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; + 8BF241FBFDC4842766A0E1FF113AEA81 /* FBSDKCoreKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKCoreKit-dummy.m"; sourceTree = ""; }; + 8CEC8AEFA9998D1A3C244EF87DB8033F /* FBSDKSettings+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKSettings+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h"; sourceTree = ""; }; + 8D06271E8C2B970012EE88EC976B4B8D /* FBSDKWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebViewAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m; sourceTree = ""; }; + 8D0F999FBE7C8955784DB2555958CF85 /* MPAdConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdConfiguration.m; path = MoPubSDK/Internal/Common/MPAdConfiguration.m; sourceTree = ""; }; + 8D61BD893A557F7BFFA3B588C8B2F408 /* FBSDKBridgeAPIProtocolWebV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m; sourceTree = ""; }; + 8DF5666FA0A3694AE64B515DAAFC67C3 /* MPDAAIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPDAAIcon@3x.png"; path = "MoPubSDK/Resources/MPDAAIcon@3x.png"; sourceTree = ""; }; + 8E108A00A30A1176AA41EB15C588B61C /* MPVASTCreative.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCreative.h; path = MoPubSDK/Internal/VAST/MPVASTCreative.h; sourceTree = ""; }; + 8E1A040CD6DDA17C872083C354AEF1AB /* MPRewardedVideoConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoConnection.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h; sourceTree = ""; }; + 8E35005E99FA184A8812CB7DBEF771F7 /* FacebookNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookNativeAdRenderer.h; path = FacebookAudienceNetwork/FacebookNativeAdRenderer.h; sourceTree = ""; }; + 8E538A0968AC5CDC1137A8A66B1DAA7E /* FBSDKMaleSilhouetteIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMaleSilhouetteIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h; sourceTree = ""; }; + 8E81BA723F41409BE9A16A388DB565B0 /* FBSDKModelUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKModelUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h; sourceTree = ""; }; + 8EF494E03636BDFC1AEF93C125FEBCF2 /* MPRewardedVideoReward.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoReward.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoReward.h; sourceTree = ""; }; + 8F101030586B5E2D461622E2A0E2D33F /* MPPrivateInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateInterstitialCustomEventDelegate.h; path = MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h; sourceTree = ""; }; + 8F6CD57A543990947480FE66FD8730E5 /* 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; }; + 8FB4DA2DBE06E342ED54F4DF4F7890FB /* MRAID.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MRAID.bundle; path = MoPubSDK/Resources/MRAID.bundle; sourceTree = ""; }; + 8FBB8BE5B6013C39A11EB8C1FF454EDD /* MPRewardedVideo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPRewardedVideo+Internal.h"; path = "MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h"; sourceTree = ""; }; + 901F47300BBE057457E27F80A648E15A /* MPMoPubRewardedPlayableCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubRewardedPlayableCustomEvent.h; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h; sourceTree = ""; }; 90429778259497EBA2033D42CA835743 /* Pods-MAPS.ME-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MAPS.ME-frameworks.sh"; sourceTree = ""; }; 9085B8A32AFF10675A22486994BEAC12 /* Pods-MAPS.ME.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.release.xcconfig"; sourceTree = ""; }; - 91659F87DE3BFB23EBFD9576F935C516 /* FlurryEmpty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlurryEmpty.m; path = Flurry/FlurryEmpty.m; sourceTree = ""; }; - 9254E7D40235B4A329F61E2C1C453283 /* FBSDKColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKColor.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m; sourceTree = ""; }; - 928D3D0F98F394883D145EB7357C3597 /* Flurry-iOS-SDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Flurry-iOS-SDK-dummy.m"; sourceTree = ""; }; - 92BF02C4D15D2E8681832A2F37E54E91 /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; - 931EE12175089E07B44BBBFBC73E5376 /* FBSDKKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStore.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h; sourceTree = ""; }; + 90E111B49E196997025FFB72D808704C /* MPAdAlertGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdAlertGestureRecognizer.m; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m; sourceTree = ""; }; + 90F86564B3EC25D60A1BD2D3E1ADB2F3 /* MPVASTIndustryIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTIndustryIcon.h; path = MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h; sourceTree = ""; }; + 9113537F8C5C4546583EC38BEF0F7AD2 /* MPServerAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPServerAdPositioning.m; path = MoPubSDK/NativeAds/MPServerAdPositioning.m; sourceTree = ""; }; + 915F9A8728AD7BBEDE3AF872546E2A97 /* mopub-ios-sdk-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "mopub-ios-sdk-umbrella.h"; sourceTree = ""; }; + 91611B835F724D6451131A9E4FB1FC6F /* Flurry-iOS-SDK-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Flurry-iOS-SDK-prefix.pch"; sourceTree = ""; }; + 91833573344C58D392E34F2596366606 /* MPNativeCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCustomEventDelegate.h; path = MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h; sourceTree = ""; }; + 92241D298024AF72E7AB65A5B8DAA3C5 /* MPNativeAdConfigValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdConfigValues.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m; sourceTree = ""; }; + 9295D48241321877C9FE74BC6AB6A0C9 /* MPVASTMediaFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTMediaFile.m; path = MoPubSDK/Internal/VAST/MPVASTMediaFile.m; sourceTree = ""; }; + 92AC26435795AD8929F6A59855866D62 /* MPVideoConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoConfig.m; path = MoPubSDK/Internal/Common/MPVideoConfig.m; sourceTree = ""; }; + 92AE8ADB5D67B1993A87D63E728D85F6 /* MoPub_ExternalAvidAdSessionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_ExternalAvidAdSessionContext.h; path = MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h; sourceTree = ""; }; + 93351F1223E5FB869A9CAF199D8FCA01 /* MPExtendedHitBoxButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPExtendedHitBoxButton.m; path = MoPubSDK/Internal/MPExtendedHitBoxButton.m; sourceTree = ""; }; + 933E4A9A7F1C4B673710AA9F07CFC98B /* ActionSheetDistancePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDistancePicker.h; path = Pickers/ActionSheetDistancePicker.h; sourceTree = ""; }; + 93A8FB7AA6702DA48E67A4FCD7A0FA3A /* FBAdBridgeCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdBridgeCommon.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h; sourceTree = ""; }; + 93D148011ADBC4DB85E3A8208E165BDC /* MPVideoConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoConfig.h; path = MoPubSDK/Internal/Common/MPVideoConfig.h; sourceTree = ""; }; + 941C88C2FEC2970BE2B32AD58E11D142 /* MPAdImpressionTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdImpressionTimer.h; path = MoPubSDK/Internal/Common/MPAdImpressionTimer.h; sourceTree = ""; }; + 943C60AA863EF1CE4BF6E79443FB8AD8 /* MOPUBNativeVideoAdRendererSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdRendererSettings.m; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m; sourceTree = ""; }; 943F5E0AB0E3CD68128746521DD14872 /* Pods-MAPS.ME-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MAPS.ME-umbrella.h"; sourceTree = ""; }; - 95C72EAAC81656E01B58E91AC1711C64 /* FBSDKProfilePictureView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfilePictureView.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h; sourceTree = ""; }; - 96428DCAAF4B29417225913717CD1E6D /* FBSDKContainerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKContainerViewController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m; sourceTree = ""; }; - 96F1FBD741D30CD330E9978EC95D62F4 /* FBSDKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInternalUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m; sourceTree = ""; }; - 9737384FAEB34B531C7345A73204F001 /* 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; }; - 977F22D13C96D65291324FFEC5A0ED4E /* BFAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkResolving.h; path = Bolts/iOS/BFAppLinkResolving.h; sourceTree = ""; }; - 97FE66A315C3385D6124402FADDC8456 /* ActionSheetPicker-3.0.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ActionSheetPicker-3.0.xcconfig"; sourceTree = ""; }; - 981E2C73531B6E2FFD8F61BD34B2E6CD /* FBSDKPaymentObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKPaymentObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h; sourceTree = ""; }; - 98AC263DDE6617B5ED642AD981EB7FBA /* FBSDKErrorConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h; sourceTree = ""; }; - 999268151A0BC4C534E288A80124B458 /* FBSDKURLOpening.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLOpening.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h; sourceTree = ""; }; - 99C58BCC46F51DA7353969874628C4B0 /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; - 9A1E458C395E23F7E744D5495E90E0C8 /* FBSDKAccessTokenCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCache.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m; sourceTree = ""; }; - 9A2A56AB3123CE826FBF233BC5425BAC /* FBSDKUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m; sourceTree = ""; }; - 9A46CA52949C2DEC52D3723665F7C840 /* FBSDKAccessTokenCacheV3_17.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV3_17.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.h; sourceTree = ""; }; + 9477445BB8D4D813D222AC484C2230DA /* FBSDKLibAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLibAnalyzer.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.h; sourceTree = ""; }; + 94EBDEA67E356B45E7A5168040CA58AA /* MPAnalyticsTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAnalyticsTracker.h; path = MoPubSDK/Internal/Utility/MPAnalyticsTracker.h; sourceTree = ""; }; + 952AD8D7F79D839DCF4D0E4DE6B7472A /* MRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRError.h; path = MoPubSDK/Internal/MRAID/MRError.h; sourceTree = ""; }; + 95CE822433892D87233CBA161A5FA85C /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; + 966574BBF13F33EE3DD660C9DFB688C1 /* MPVASTMediaFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTMediaFile.h; path = MoPubSDK/Internal/VAST/MPVASTMediaFile.h; sourceTree = ""; }; + 96C7851143C7610980D5F2B2CC39322A /* MPUnmutedBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPUnmutedBtn@3x.png"; path = "MoPubSDK/Resources/MPUnmutedBtn@3x.png"; sourceTree = ""; }; + 96D1FB37A3A92C36D6EB3219C1B36AA1 /* MPVASTModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTModel.h; path = MoPubSDK/Internal/VAST/MPVASTModel.h; sourceTree = ""; }; + 96D5B3C9355BF0FD6259C04CE54A5D87 /* MPWebView+Viewability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPWebView+Viewability.m"; path = "MoPubSDK/Viewability/MPWebView+Viewability.m"; sourceTree = ""; }; + 977DAB394A071F49D80E9B8ED6456EFB /* FBSDKLoginTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m; sourceTree = ""; }; + 979B50AEC8217737F6E5DD60E00AD581 /* MPCloseButtonX.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPCloseButtonX.png; path = MoPubSDK/Resources/MPCloseButtonX.png; sourceTree = ""; }; + 97A7C1BA7547CD86275C4C9A041F9F43 /* MPInterstitialAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdManager.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h; sourceTree = ""; }; + 97D5DA84FDFBC09323EF4F7FF9A504C0 /* NSDictionary+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h"; sourceTree = ""; }; + 993E9FD739B848734F41F1C74C8CAAB2 /* MPURLActionInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLActionInfo.m; path = MoPubSDK/Internal/Common/MPURLActionInfo.m; sourceTree = ""; }; + 9961931672C417884E78AA03E6F10597 /* MPNativeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeView.m; path = MoPubSDK/NativeAds/Internal/MPNativeView.m; sourceTree = ""; }; + 99FA665EB2BACDB25146E5D87EBDE81A /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; + 9A4BA7AD3D00B4A3E17F5E68D0574BD3 /* MPContentBlocker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPContentBlocker.m; path = MoPubSDK/Internal/HTML/MPContentBlocker.m; sourceTree = ""; }; + 9AAD013E29245EEAA588311B80FE807A /* MPNativeAdData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdData.h; path = MoPubSDK/NativeAds/MPNativeAdData.h; sourceTree = ""; }; 9AAD6432F9CBA054F5118361E3C552BC /* Pods-MAPS.ME-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MAPS.ME-dummy.m"; sourceTree = ""; }; - 9B974FFA1DBCF627B613024A0B6940B2 /* FBSDKAccessTokenCacheV4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCacheV4.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV4.h; sourceTree = ""; }; - 9BDA0DF2B66E0F540715E78381CAF4DC /* FBSDKLoginError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginError.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m; sourceTree = ""; }; - 9CC616DB15250AD3E0BA8374A865025C /* FBSDKSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSwizzler.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m; sourceTree = ""; }; + 9B5C0292FC0F86D2D8268D38D3A0A5F3 /* FBNativeAdBaseView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdBaseView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h; sourceTree = ""; }; + 9BC658E0FFBADD4F78379492E9D4303D /* MPMoPubConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubConfiguration.m; path = MoPubSDK/MPMoPubConfiguration.m; sourceTree = ""; }; + 9C83E26609C9CE75FB7857E46CD23457 /* FBSDKColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKColor.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m; sourceTree = ""; }; + 9CB1D7DE3964948FFAEF4B5C4410EB9B /* MPURLResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLResolver.m; path = MoPubSDK/Internal/Common/MPURLResolver.m; sourceTree = ""; }; + 9CBD2D32630CA781CC20C04A92C9236C /* MRBundleManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRBundleManager.m; path = MoPubSDK/Internal/MRAID/MRBundleManager.m; sourceTree = ""; }; + 9D17311881EA9B1DE63B181377E72FEE /* FBSDKLoginUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginUtility.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m; sourceTree = ""; }; + 9D675BBB0EF7CD368D652F17E752443A /* mopub-ios-sdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "mopub-ios-sdk.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; }; - 9DE7A3BB2DD96878505C8FEB1E5E3DA7 /* FBSDKGraphErrorRecoveryProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphErrorRecoveryProcessor.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.m; sourceTree = ""; }; - 9E9332679CAED41F77F7C1F6E1D7369A /* BFAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLink_Internal.h; path = Bolts/iOS/Internal/BFAppLink_Internal.h; sourceTree = ""; }; - 9EE37B60CC7035D4DD2F14268749F5B0 /* FBSDKBridgeAPIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIResponse.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h; sourceTree = ""; }; - A12BC7301DDCC818434F6229EF9FE694 /* FBSDKAppLinkUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m; sourceTree = ""; }; - A14CC7AECE0A29041D98D981179C6885 /* FBSDKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m; sourceTree = ""; }; - A1E305C0CF0C363D50E645BD1D70070A /* FBSDKTriStateBOOL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTriStateBOOL.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h; sourceTree = ""; }; - A2218DF6F865C7AEA9B7FF95A10D2C24 /* FlurryConsent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryConsent.h; path = Flurry/FlurryConsent.h; sourceTree = ""; }; - A309A8DBB0E76F6AE67639530F789C55 /* FBSDKBridgeAPIProtocolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolType.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h; sourceTree = ""; }; - A383F44BA001ABB04A819C02DF57E64C /* FBSDKEventBinding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBinding.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m; sourceTree = ""; }; - A3B65CFB4F16A8F793920A8750F0F992 /* FBSDKDynamicFrameworkLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDynamicFrameworkLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h; sourceTree = ""; }; + 9E094436766E2B7FDD52B0A5D6575705 /* MPError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPError.m; path = MoPubSDK/Internal/Utility/MPError.m; sourceTree = ""; }; + 9E0D62C64D687B3945D353745E944929 /* FBSDKLoginManagerLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLogger.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m; sourceTree = ""; }; + 9E68656159746FFDFD1A912AAEA97C01 /* FBNativeAdTableViewAdProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdTableViewAdProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h; sourceTree = ""; }; + 9EE4FC4EEB6833099B0A9C54CF6172B4 /* FBSDKTypeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTypeUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h; sourceTree = ""; }; + 9F42B4A9486145FB22DA881736A75C0D /* FBNativeAdCollectionViewCellProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdCollectionViewCellProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h; sourceTree = ""; }; + 9F42BE1CF7148411F475B7A893EFCF86 /* FBSDKDynamicFrameworkLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDynamicFrameworkLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m; sourceTree = ""; }; + A03F02892CF56F0F8ECABF0B778A87A7 /* MPBaseAdapterConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseAdapterConfiguration.h; path = MoPubSDK/MPBaseAdapterConfiguration.h; sourceTree = ""; }; + A139C802A166E40070BF1764597F8F14 /* MRExpandModalViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRExpandModalViewController.m; path = MoPubSDK/Internal/MRAID/MRExpandModalViewController.m; sourceTree = ""; }; + A17C7D33DE6709A50ECBE421B8E0FF2D /* FBSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKError.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h; sourceTree = ""; }; + A1B02C3E85DA6EE5B488420C6ACC7AC0 /* FacebookInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookInterstitialCustomEvent.m; path = FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m; sourceTree = ""; }; + A1CF0B8BA0D1CC8547941CF9F9AFF114 /* FBSDKConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKConstants.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h; sourceTree = ""; }; + A1F79B81F3521071C1B3CC59DAE647C5 /* FBSDKBasicUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBasicUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.m; sourceTree = ""; }; + A2F3802F629F41A555BBFA1B51D8344E /* FBSDKCodelessIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h; sourceTree = ""; }; + A30268303B18BB45431F9DE4E87E5154 /* MPMoPubNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubNativeCustomEvent.h; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h; sourceTree = ""; }; + A3477F3D06F7112D3BE6CB6730600DF0 /* MPNativeAdError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdError.m; path = MoPubSDK/NativeAds/MPNativeAdError.m; sourceTree = ""; }; + A3C78A4890EA536616F9144BD86C8CBC /* SWActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWActionSheet.m; path = Pickers/SWActionSheet.m; sourceTree = ""; }; + A404A78E5C43B4C82E8A4C589415A293 /* MPLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogging.h; path = MoPubSDK/Logging/MPLogging.h; sourceTree = ""; }; + A458F03247D14AF47B6A63934D383A77 /* MPBaseInterstitialAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseInterstitialAdapter.h; path = MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h; sourceTree = ""; }; + A465A3B2B6F28AA4A989CF1B8CF1F09B /* FBSDKLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogger.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h; sourceTree = ""; }; + A46A0694CA33E8FA4A6FF6776EF48301 /* MPSessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPSessionTracker.m; path = MoPubSDK/Internal/Utility/MPSessionTracker.m; sourceTree = ""; }; + A4DC0070F0CF1A8F2644FB9247EF0FDF /* FBSDKLoginManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManager+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h"; 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; }; - A673E66ABC9DB21EB5035A359A19456B /* FBSDKURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h; sourceTree = ""; }; - A6CD0D1F6C66A96FD0FD9457E3DEE8E0 /* Flurry-iOS-SDK-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Flurry-iOS-SDK-prefix.pch"; sourceTree = ""; }; - A6EA2293CA71AD686F997AE0596F55FF /* FBSDKGraphErrorRecoveryProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphErrorRecoveryProcessor.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphErrorRecoveryProcessor.h; sourceTree = ""; }; - A7FBF373133D0002E964D92E37EF330C /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - A96839831799065C39F89283D0B5364E /* BFAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkReturnToRefererView.m; path = Bolts/iOS/BFAppLinkReturnToRefererView.m; sourceTree = ""; }; - AB18131B2C3A6EFC70D70F4EF79FA88E /* FBSDKWebDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialog.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h; sourceTree = ""; }; + A55BDFD69D3689D1AFA0F4CE297A5679 /* NSDate+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m"; sourceTree = ""; }; + A5DDBDE0EDCBBCC85F7CC5549887DA8F /* MPTableViewAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewAdPlacer.m; path = MoPubSDK/NativeAds/MPTableViewAdPlacer.m; sourceTree = ""; }; + A5EA4BEB66C7CB06A927DA65FF7BBC94 /* MPExtendedHitBoxButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPExtendedHitBoxButton.h; path = MoPubSDK/Internal/MPExtendedHitBoxButton.h; sourceTree = ""; }; + A64353FF22F2A7500F0048D3A90E56A2 /* FlurryEmpty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlurryEmpty.m; path = Flurry/FlurryEmpty.m; sourceTree = ""; }; + A679A574C99F682298C6F165A995670E /* MPVASTTrackingEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTTrackingEvent.h; path = MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h; sourceTree = ""; }; + A68A055AFEA93ACEC7BF5DDB1869A84B /* MPNativeAdSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdSource.m; path = MoPubSDK/NativeAds/MPNativeAdSource.m; sourceTree = ""; }; + A68F24D96C2A714846BD0101868E3BBF /* MPNativeAdRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRequest.m; path = MoPubSDK/NativeAds/MPNativeAdRequest.m; sourceTree = ""; }; + A73DF0C449187B9EA68A4C6AAE220C8F /* MPVASTStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTStringUtilities.m; path = MoPubSDK/Internal/VAST/MPVASTStringUtilities.m; sourceTree = ""; }; + A7DAE76FEFC3D71F73225299036F4E8C /* MPRewardedVideoReward.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoReward.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoReward.m; sourceTree = ""; }; + A7E29FA889C79F264E45301FC453ED97 /* MOPUBNativeVideoAdConfigValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdConfigValues.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m; sourceTree = ""; }; + A7E4B2EB2EB3911221EE5B823DEB0718 /* FBSDKLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogger.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m; sourceTree = ""; }; + A881258CDC98D74871DCA7BA4D1176E0 /* NSJSONSerialization+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSJSONSerialization+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h"; sourceTree = ""; }; + A8A80C4FB218C8B86BA0230B1CC613BC /* FBSDKCoreKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.xcconfig; sourceTree = ""; }; + A8D1683CF2B4C7272830B5CD282C4C4B /* MPAdWebViewAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdWebViewAgent.h; path = MoPubSDK/Internal/HTML/MPAdWebViewAgent.h; sourceTree = ""; }; + A8D271DDBA21E726ABF2556C28DFC8FE /* MPMoPubConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubConfiguration.h; path = MoPubSDK/MPMoPubConfiguration.h; sourceTree = ""; }; + A8FD603FB8D92568C2F00475C782E1DC /* MPCollectionViewAdPlacerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCollectionViewAdPlacerCell.m; path = MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m; sourceTree = ""; }; + A900443509C5E605A6AA6B440A4F097D /* MPStaticNativeAdRendererSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStaticNativeAdRendererSettings.m; path = MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m; sourceTree = ""; }; + A92B85A965A9F9DF3777C778ADB9EBFB /* MPNativeAdUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdUtils.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h; sourceTree = ""; }; + A9353FA8088AEF82EE943249135BF463 /* Pushwoosh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pushwoosh.framework; path = Framework/Pushwoosh.framework; sourceTree = ""; }; + A9B108711A506C8430D1FCEC9937BFE5 /* FBSDKErrorReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorReport.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.m; sourceTree = ""; }; + A9C775F7CC59EC88AAFAE75BBD5935AB /* MPClosableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPClosableView.h; path = MoPubSDK/Internal/Common/MPClosableView.h; sourceTree = ""; }; + AA9E0D2E2DD8DA0F0DD28282A817EB4A /* MPVASTMacroProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTMacroProcessor.h; path = MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h; sourceTree = ""; }; + AAABD478B43516AC833BB4C14ED44DFD /* MOPUBActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBActivityIndicatorView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m; sourceTree = ""; }; + AB53EE7A8380257496157BD03C9AAA02 /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MoPub-FacebookAudienceNetwork-Adapters-dummy.m"; sourceTree = ""; }; + ABB9CB11418E9C7719F6F86CB8FF0718 /* Flurry-iOS-SDK.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Flurry-iOS-SDK.xcconfig"; sourceTree = ""; }; + ABCFF4FAC93BC2C51CBF81D27E49FDB7 /* MPVASTTrackingEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTTrackingEvent.m; path = MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m; sourceTree = ""; }; + ABEC294AC9E3A5C3FD9ABCB63FC9B7BF /* UIView+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h"; sourceTree = ""; }; + AC43C8DB0218F9E556E2E43641A52444 /* MPNativeAdSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSource.h; path = MoPubSDK/NativeAds/MPNativeAdSource.h; sourceTree = ""; }; + AC4C84128FC0D34C431A6FFD970DB5BB /* MPTableViewAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacer.h; path = MoPubSDK/NativeAds/MPTableViewAdPlacer.h; sourceTree = ""; }; + AC9AD637CAF1C6863F7C127239C79948 /* MPAdPlacerInvocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdPlacerInvocation.h; path = MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h; sourceTree = ""; }; + ACBEDFB2E839391EF4233B648889A478 /* MPAdViewDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdViewDelegate.h; path = MoPubSDK/MPAdViewDelegate.h; sourceTree = ""; }; + ACDCEC9567F00406EC33605D23B2F518 /* FBSDKBridgeAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPI.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h; sourceTree = ""; }; AD2254ED5E1056D4AC2BF9A9F57A51B6 /* Pods-MAPS.ME-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MAPS.ME-acknowledgements.markdown"; sourceTree = ""; }; - AD3F1CA24729AD526811393A7E1490E8 /* FBSDKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h; sourceTree = ""; }; - AEB1BA1C2F137C728ADD9397FC9C9A3D /* FBSDKErrorConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m; sourceTree = ""; }; - AF4304E316990384DC53590880112239 /* FBSDKAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkTarget.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h; sourceTree = ""; }; - B059BC4D0CD245A0E1271DAB291AEF69 /* FBSDKLoginKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKLoginKit.modulemap; sourceTree = ""; }; - B08D69E50896F2AEDD180CB6BE52D9E1 /* FBSDKTimeSpentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTimeSpentData.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h; sourceTree = ""; }; - B0F16582658AB351EE776989DCDEAA79 /* FBSDKSettings+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKSettings+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h"; sourceTree = ""; }; - B132B60130D4AB549671B21875705C13 /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; - B1A7A4E7578A85E1940D42B3741342EA /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - B3E09070D83C63191C46E66A39279B51 /* FBSDKCoreKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKCoreKit.modulemap; sourceTree = ""; }; - B3E4D0D14722B48B2C2EF7658A198F43 /* FBSDKColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKColor.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h; sourceTree = ""; }; - B42175B4B133CEEF2E2910EF36C886F8 /* FBSDKCoreKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKCoreKit-dummy.m"; sourceTree = ""; }; - B49C14C23163FF1FD22E0FDC5E82F150 /* Flurry-iOS-SDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Flurry-iOS-SDK-Info.plist"; sourceTree = ""; }; - B4B260DBAEBD01C6AA632B221B75595D /* FBSDKAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h; sourceTree = ""; }; - B504A439CAB3C8BC83CB10078C05CC27 /* ActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetPicker.h; path = Pickers/ActionSheetPicker.h; sourceTree = ""; }; - B636DE2C5A1ADFEAFD5491307156CA9E /* FBSDKBridgeAPICrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPICrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.m; sourceTree = ""; }; - B6891AD0D008A4F5D5F7DB812290F44A /* FBSDKImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKImageDownloader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h; sourceTree = ""; }; - B6CCD2D2BFD873129B257051DC070FDB /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + AD37EA8099DAE3C25DFFCA74BE7A15D5 /* MoPub-FacebookAudienceNetwork-Adapters-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MoPub-FacebookAudienceNetwork-Adapters-Info.plist"; sourceTree = ""; }; + ADA6AF43A36323C557811C3806F544A6 /* MPUserInteractionGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPUserInteractionGestureRecognizer.h; path = MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h; sourceTree = ""; }; + ADB6B856A08A66A9E10FCB3499EC08DB /* FBSDKTestUsersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTestUsersManager.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h; sourceTree = ""; }; + AF435A751586736FA3164D9BCB1D4218 /* FBSDKTimeSpentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTimeSpentData.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m; sourceTree = ""; }; + AF983AE41C46FAEDA89714A4FDE68309 /* MPBannerCustomEventAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEventAdapter.h; path = MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h; sourceTree = ""; }; + B00D22BB5368D25419618D3B5AFBBEB2 /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; + B04B3681D9ED0D6FE3ED94F48426B75B /* FBSDKMonotonicTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMonotonicTime.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h; sourceTree = ""; }; + B15EE2487DEF00CC1A27657067A78219 /* FBSDKCodelessPathComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessPathComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h; sourceTree = ""; }; + B179DF24E9073802CCE5A7311F0998C7 /* MPRewardedVideo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideo.h; path = MoPubSDK/RewardedVideo/MPRewardedVideo.h; sourceTree = ""; }; + B1AC28EC2893CB60103213508D720B17 /* FBSDKCrashHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrashHandler.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.m; sourceTree = ""; }; + B1D390CFF8696121F3FE27BF99A55CE7 /* NSString+MPConsentStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MPConsentStatus.m"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m"; sourceTree = ""; }; + B2283B39EABDFB4652A6D71406D45FA2 /* MPProgressOverlayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPProgressOverlayView.m; path = MoPubSDK/Internal/Common/MPProgressOverlayView.m; sourceTree = ""; }; + B25F711F781BA7B3E7EB09D3077D1975 /* FBAudienceNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FBAudienceNetwork.framework; path = Static/FBAudienceNetwork.framework; sourceTree = ""; }; + B2A0D479C2EA14467845DCD938375D89 /* MPVASTDurationOffset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTDurationOffset.h; path = MoPubSDK/Internal/VAST/MPVASTDurationOffset.h; sourceTree = ""; }; + B3C187D6D907065310867EFDA7FDD591 /* FBSDKFeatureManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKFeatureManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.m; sourceTree = ""; }; + B3D334ECEED0074F4AD58F7103C02938 /* UIView+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m"; sourceTree = ""; }; + B40E47DFA15A97FC8B30D4E8BF2407DB /* MPInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialViewController.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h; sourceTree = ""; }; + B4106CEC5B3A50684F2092D75E32E70B /* MPConsentDialogViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentDialogViewController.h; path = MoPubSDK/Internal/MPConsentDialogViewController.h; sourceTree = ""; }; + B453A37DA13C77AD2A29EE340EB6D036 /* FBSDKCrashShield.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrashShield.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.m; sourceTree = ""; }; + B498BDA639775841942DB5D749ADDBE6 /* FBSDKBridgeAPIRequest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKBridgeAPIRequest+Private.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h"; sourceTree = ""; }; + B51DF54A4CF41963C2BDDC213F0DF09F /* FBSDKEventBinding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBinding.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m; sourceTree = ""; }; + B5B160EEFB68C1546BE610C5E9A0935D /* FBSDKGraphRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m; sourceTree = ""; }; + B6843C284E7B1E4C4C3AAC88BF5BF9F9 /* FBSDKAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLink.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m; sourceTree = ""; }; + B6E92E5EE9CA95519175CD43916EF8F0 /* MOPUBNativeVideoAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdRenderer.m; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m; sourceTree = ""; }; B6EEA83F1BE9333EC15AFF3BA55BDD4B /* Pods-MAPS.ME-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-Info.plist"; sourceTree = ""; }; - B84382A96A8D602495E9D29D076CDEC3 /* FBSDKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInternalUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h; sourceTree = ""; }; - B8524ADAA97390D0C03E2E5CFE18530C /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h; sourceTree = ""; }; - B89EEE8381216771B45DD1981A6A5BD6 /* FBSDKBridgeAPIRequest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKBridgeAPIRequest+Private.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h"; sourceTree = ""; }; - B93B0AC4ED35FB5C2185FA96ABFD56F7 /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; - BA459E285EAE7AC34C7AEA07F14BFBF7 /* FBSDKBridgeAPIProtocolNativeV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolNativeV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m; sourceTree = ""; }; - BAC1B0066D6660F35AF73D1FF58892BA /* 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; }; - BBB6631D2DD49C7AC034D8A2F97F098C /* FBSDKCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h; sourceTree = ""; }; - BC64ABFA433002A5F14426B4A644C768 /* FBSDKSystemAccountStoreAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSystemAccountStoreAdapter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSystemAccountStoreAdapter.h; sourceTree = ""; }; - BC90EF11FCA5BE2AA53CE9514C6D77C2 /* FBSDKBoltsMeasurementEventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBoltsMeasurementEventListener.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.h; sourceTree = ""; }; - BF54E0769BFF2B37521EF07C59F7986D /* FBSDKAppEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEvents.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h; sourceTree = ""; }; - BFCFEEED11F100F8357B1CADC2E56BE3 /* FBSDKGraphRequestMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestMetadata.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h; sourceTree = ""; }; - BFF018B42AB403160A32C0E9739F1155 /* ActionSheetDatePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetDatePicker.h; path = Pickers/ActionSheetDatePicker.h; sourceTree = ""; }; - C2F52BA9F41D1DA9AFC19D750B4F79E7 /* AppsFlyerLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AppsFlyerLib.framework; sourceTree = ""; }; - C3F19630E9D8A32AEA4599D81BF73504 /* FBSDKLogo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m; sourceTree = ""; }; - C57760C9485F125E2D7C0CC14573AB99 /* FBSDKBridgeAPIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIResponse.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m; sourceTree = ""; }; - C59C51355672E43E707DF56F3A1F7229 /* FBSDKCodelessParameterComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessParameterComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h; sourceTree = ""; }; - C59D386BDD7852F1546E09FE91375A58 /* FBSDKAudioResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAudioResourceLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h; sourceTree = ""; }; - C6626452F4468CB2BA3C2A3BBC75C261 /* ActionSheetDatePicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetDatePicker.m; path = Pickers/ActionSheetDatePicker.m; sourceTree = ""; }; - C665CD5066F2A0D820364040452DA722 /* FBSDKCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m; sourceTree = ""; }; - C6D1882C799FCF7B8AED3FC027C9FB0B /* FBSDKLoginKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-umbrella.h"; sourceTree = ""; }; - C84121CE7E6AAA75826ECE2E775AEAC6 /* FBSDKUIUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUIUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h; sourceTree = ""; }; - C860BFA7739B24362FDE740A22793A5D /* FBSDKApplicationDelegate+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKApplicationDelegate+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h"; sourceTree = ""; }; - C884BF315F207C7C6CAB028BEA3A46E1 /* BFMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFMeasurementEvent_Internal.h; path = Bolts/iOS/Internal/BFMeasurementEvent_Internal.h; sourceTree = ""; }; - CA87FDB0999691EA19D1C2FDA57014BA /* ActionSheetCustomPickerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetCustomPickerDelegate.h; path = Pickers/ActionSheetCustomPickerDelegate.h; sourceTree = ""; }; - CAD1C6C0686A542642592B37DABD9DB1 /* FBSDKDynamicFrameworkLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDynamicFrameworkLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m; sourceTree = ""; }; - CAF0C6057F08A8058CA213D0302FCF81 /* FBSDKMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h; sourceTree = ""; }; - CB26876F187E01EE3F089C8B6A36EA53 /* BFAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFAppLinkReturnToRefererView.h; path = Bolts/iOS/BFAppLinkReturnToRefererView.h; sourceTree = ""; }; - CBB847612E92CD22E5A1E3065BFFAACC /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; - CC2596C1166D5B751F382E2AD4D76ED5 /* FBSDKWebDialog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialog.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m; sourceTree = ""; }; - CC5790763BB5D96CA469E21A92C3C18C /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; - CC57B06F6DB15A43FB0CC5C4DDFB7CDC /* FBSDKAccessTokenCaching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCaching.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h; sourceTree = ""; }; - CCB42C080C545A89A4AEBD0961C07F27 /* FBSDKAppEventsStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsStateManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m; sourceTree = ""; }; - CD154E421A7D579B54D42430D052884E /* FBSDKLoginKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-prefix.pch"; sourceTree = ""; }; - CE403AE09632BBA310B9D53556B6F31B /* FBSDKBoltsMeasurementEventListener.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBoltsMeasurementEventListener.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKBoltsMeasurementEventListener.m; sourceTree = ""; }; - CEF50B9B622AA736B7604887332252F1 /* FBSDKTimeSpentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTimeSpentData.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m; sourceTree = ""; }; - CF6577F280EB889753EA175ED7FC738C /* FBSDKCodelessIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m; sourceTree = ""; }; - D0C62C8E05EC1CC14F4CE97AADB2A445 /* FBSDKGraphRequestPiggybackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestPiggybackManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m; sourceTree = ""; }; - D0D2892B4A0C855C81FECEDEACB6A642 /* FBSDKServerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m; sourceTree = ""; }; - D1419514FA9967691ED1588B4FCE48A3 /* FBSDKAppEventsDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsDeviceInfo.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h; sourceTree = ""; }; - D15294C277BEED664AEDFA57843DFAE5 /* FBSDKLoginKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginKit.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h; sourceTree = ""; }; - D20952C01DBAAF3B82E5EC1936B98D63 /* FBSDKCloseIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCloseIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m; sourceTree = ""; }; - D2CEAAA3538C4CC362E228832B571312 /* FBSDKLoginManagerLoginResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLoginResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m; sourceTree = ""; }; - D357A85EE10840E2B34FABCDFC42E748 /* FBSDKBridgeAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPI.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m; sourceTree = ""; }; - D367A3750BEF207FB4ABA14A0CE61484 /* FBSDKCoreKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCoreKit.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h; sourceTree = ""; }; - D41CEFE0CE872F3DDEB5F3C6ADA64938 /* FBSDKCodelessParameterComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessParameterComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m; sourceTree = ""; }; - D42362A0618254932DA8C712A79A8C3E /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - D4BC5C735AD78A92A57A6C7CA5815F95 /* FBSDKBridgeAPIProtocolWebV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h; sourceTree = ""; }; - D4BE879C4DC5CF9A5915F0E029F22383 /* _FBSDKLoginRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKLoginRecoveryAttempter.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h; sourceTree = ""; }; + B71441BCD93B2028FAE0D7909D25533A /* FBSDKGraphRequestPiggybackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestPiggybackManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m; sourceTree = ""; }; + B75765AEAA88DF3D3EDD4646151914C2 /* FBSDKBridgeAPIProtocolNativeV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolNativeV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h; sourceTree = ""; }; + B77BA45C413A429B7705FF20DB79B2B4 /* FBSDKAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m; sourceTree = ""; }; + B807205C484E2661499607C16A6E9225 /* MPStreamAdPlacerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacerDelegate.h; path = MoPubSDK/NativeAds/Internal/MPStreamAdPlacerDelegate.h; sourceTree = ""; }; + B93F614C8A2BB81E71CE9B623ACCE8CB /* FBSDKAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h; sourceTree = ""; }; + B9A00D309DC505BB435B02E80959EF81 /* FBSDKAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererController.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h; sourceTree = ""; }; + BA634821C2F68ECAC9F7915118E81FF7 /* ActionSheetPicker-3.0-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-prefix.pch"; sourceTree = ""; }; + BAB93924CE9E764DA3D08C5277759391 /* MPMoPubNativeAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubNativeAdAdapter.m; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m; sourceTree = ""; }; + BABA6C719A5DCE00F46E614F4126DC37 /* MPProgressOverlayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPProgressOverlayView.h; path = MoPubSDK/Internal/Common/MPProgressOverlayView.h; sourceTree = ""; }; + BACC8A632A5B303A23152109968F1807 /* FBAdSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdSettings.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h; sourceTree = ""; }; + BACFE3B37B6AF8B884BDBC75AE53775F /* FBSDKDeviceRequestsHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceRequestsHelper.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m; sourceTree = ""; }; + BB07E018E8B94837165D71C4D9229E82 /* FacebookNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookNativeCustomEvent.h; path = FacebookAudienceNetwork/FacebookNativeCustomEvent.h; sourceTree = ""; }; + BB6CADD9DE1AD5FD17805AF92E4C5577 /* 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; }; + BB914BD29A63398B1F2CBBC026F74DF2 /* MPMediaFileCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediaFileCache.h; path = MoPubSDK/Internal/Utility/Protocols/MPMediaFileCache.h; sourceTree = ""; }; + BBA2B5936513D291ADEC6879F9B5F6F1 /* FBAudienceNetwork.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBAudienceNetwork.xcconfig; sourceTree = ""; }; + BC10EE88659EF168B77BABCE7022C519 /* MPDAAIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPDAAIcon.png; path = MoPubSDK/Resources/MPDAAIcon.png; sourceTree = ""; }; + BC31025A88BDCB9AE1CAE2BC265ADEBF /* FBNativeAdScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdScrollView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h; sourceTree = ""; }; + BC325E88FE86F0ED5B69CAD4C4035600 /* FacebookNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookNativeAdAdapter.h; path = FacebookAudienceNetwork/FacebookNativeAdAdapter.h; sourceTree = ""; }; + BC5CC01AABDBC06D4379BC716186E002 /* NSBundle+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m"; sourceTree = ""; }; + BC933DCA1AC52030C0D6FE0F47134977 /* FBSDKSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSwizzler.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h; sourceTree = ""; }; + BCAE4EBE65B4691186D268B0180906B2 /* MPNativeAdRequest+MPNativeAdSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdRequest+MPNativeAdSource.h"; path = "MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h"; sourceTree = ""; }; + BD9C1DF434F83C00700CF117FF425DB8 /* MoPub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MoPub.m; path = MoPubSDK/MoPub.m; sourceTree = ""; }; + BDE226862CA9A4B8A396B0701AE758C9 /* 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; }; + BE17778FCACBD6ACBC2F476B25ECE044 /* MPMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMemoryCache.h; path = MoPubSDK/Internal/MPMemoryCache.h; sourceTree = ""; }; + BE4BA4E04D1FDEB4A08DAA37DB048A77 /* FacebookSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = FacebookSDKStrings.bundle; sourceTree = ""; }; + BE6AA695A1243C229327735B4AEDB65C /* MPVASTManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTManager.m; path = MoPubSDK/Internal/VAST/MPVASTManager.m; sourceTree = ""; }; + BEC10D6C2ACE52A5E9223BC72F8E312D /* FBSDKDeviceLoginManagerResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginManagerResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h"; sourceTree = ""; }; + BF055D4767EEAEDDDF6F316FC80D01E0 /* MPContentBlocker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPContentBlocker.h; path = MoPubSDK/Internal/HTML/MPContentBlocker.h; sourceTree = ""; }; + BF16F4CBF5C8802AB5E82DD7E0FEE33F /* MPNativeAdConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdConstants.h; path = MoPubSDK/NativeAds/MPNativeAdConstants.h; sourceTree = ""; }; + C00EE2DCD9D49B863F78C6F885A7369D /* MPSessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPSessionTracker.h; path = MoPubSDK/Internal/Utility/MPSessionTracker.h; sourceTree = ""; }; + C01431716813CFFBA7A4D5A45ABF51B9 /* MPAnalyticsTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAnalyticsTracker.m; path = MoPubSDK/Internal/Utility/MPAnalyticsTracker.m; sourceTree = ""; }; + C068E9221648C9D43880EC57CDAC05E6 /* MRCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRCommand.m; path = MoPubSDK/Internal/MRAID/MRCommand.m; sourceTree = ""; }; + C0CF359045629F2CC052CD933CE93655 /* MOPUBNativeVideoAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdRenderer.h; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h; sourceTree = ""; }; + C0E3EA2E26CCDB8303300E9DF6D5A592 /* MOPUBAVPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBAVPlayer.m; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m; sourceTree = ""; }; + C0EB147C8CA495A57110E29C0E07F46D /* MPURLRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLRequest.m; path = MoPubSDK/Internal/MPURLRequest.m; sourceTree = ""; }; + C0F9BFA0A7E47A8B7BE3952A7A47D53D /* AbstractActionSheetPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AbstractActionSheetPicker.m; path = Pickers/AbstractActionSheetPicker.m; sourceTree = ""; }; + C1780139C3FEABBD2A81C413C999D001 /* UIColor+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h"; sourceTree = ""; }; + C178B64401709715C2EBE85FE75D9003 /* MPMRAIDBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDBannerCustomEvent.h; path = MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h; sourceTree = ""; }; + C1864D080BCBF4477766525ADB47E824 /* MPStopwatch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStopwatch.m; path = MoPubSDK/Internal/Utility/MPStopwatch.m; sourceTree = ""; }; + C19EF40F96FF83DBCD40007BBECEA746 /* MPLastResortDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLastResortDelegate.m; path = MoPubSDK/Internal/Common/MPLastResortDelegate.m; sourceTree = ""; }; + C1F551602F580F748AC4552678C67FF9 /* FBSDKPaymentObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKPaymentObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h; sourceTree = ""; }; + C2ACF1656B62A5AA447D93EEEBDB8F05 /* MPTableViewAdPlacerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacerDelegate.h; path = MoPubSDK/NativeAds/MPTableViewAdPlacerDelegate.h; sourceTree = ""; }; + C382E4F80D21FB66993E6C000599A077 /* MPViewabilityOption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityOption.h; path = MoPubSDK/Viewability/MPViewabilityOption.h; sourceTree = ""; }; + C3C232FA77DF01FA491AAA8587CA19F6 /* FBSDKWebDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h; sourceTree = ""; }; + C3D8A5C8250A70C5C791AFF608EE23F5 /* FBSDKGateKeeperManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGateKeeperManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h; sourceTree = ""; }; + C41528FAD99AC9E4E4FA3BAF45C91EC6 /* MPMRAIDBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDBannerCustomEvent.m; path = MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m; sourceTree = ""; }; + C427B24CBD516E150F32E5EBDCF96D4D /* MPHTTPNetworkSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTTPNetworkSession.m; path = MoPubSDK/Internal/MPHTTPNetworkSession.m; sourceTree = ""; }; + C43A134B25A805A03D18DB19ADCA9198 /* MPNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCustomEvent.h; path = MoPubSDK/NativeAds/MPNativeCustomEvent.h; sourceTree = ""; }; + C489353961A5A10CAB96702867E8ABDF /* FBSDKMetadataIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMetadataIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.h; sourceTree = ""; }; + C4966589A48FFD501A4F3DF5F3B78D6C /* FBSDKDeviceLoginCodeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginCodeInfo.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h; sourceTree = ""; }; + C4BB57E032320280EB787306526155D0 /* MPNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdAdapter.h; path = MoPubSDK/NativeAds/MPNativeAdAdapter.h; sourceTree = ""; }; + C4BF407BFD75F9D32BB5FCEEC85AD1FE /* MPNativeAdRequestTargeting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRequestTargeting.m; path = MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m; sourceTree = ""; }; + C4DF948613A7E7DA7FEF22041BF1359B /* FBSDKAddressInferencer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAddressInferencer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h; sourceTree = ""; }; + C532AC8F01A34C2DD3B73C4097AABEC1 /* MPVASTDurationOffset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTDurationOffset.m; path = MoPubSDK/Internal/VAST/MPVASTDurationOffset.m; sourceTree = ""; }; + C567D84EB348A63DF9814E323373F51A /* FacebookBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookBannerCustomEvent.m; path = FacebookAudienceNetwork/FacebookBannerCustomEvent.m; sourceTree = ""; }; + C5BF3A43B2EA317162AC3CCB54B5BD6E /* DistancePickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DistancePickerView.m; path = Pickers/DistancePickerView.m; sourceTree = ""; }; + C5EEE842FD14BDABF6B75D508EF597AB /* MPWebView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPWebView.h; path = MoPubSDK/Internal/HTML/MPWebView.h; sourceTree = ""; }; + C68170AE51E8A9C6B91656BBB9A92E37 /* MPBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEvent.h; path = MoPubSDK/MPBannerCustomEvent.h; sourceTree = ""; }; + C6AEE6B0E494E78FBA2C2173B19A1213 /* FBSDKLoginConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginConstants.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m; sourceTree = ""; }; + C6FFFEA3F59060DB53CDF59945AADD66 /* MRExpandModalViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRExpandModalViewController.h; path = MoPubSDK/Internal/MRAID/MRExpandModalViewController.h; sourceTree = ""; }; + C76FD70E0AF203EBF7AD305BF2556352 /* FBSDKColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKColor.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h; sourceTree = ""; }; + C7A9CD85641F1E4358582C2C433FCA79 /* MOPUBNativeVideoAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdRendererSettings.h; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h; sourceTree = ""; }; + C800DFCE2A0755D0B5BD4A848C78EF7D /* MPCloseBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseBtn@2x.png"; path = "MoPubSDK/Resources/MPCloseBtn@2x.png"; sourceTree = ""; }; + C856D39FC3FF26980255ECC9AB34F7E8 /* FBAdIconView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdIconView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdIconView.h; sourceTree = ""; }; + C88762CBD79A679AFE437D3F66FF6F8D /* ActionSheetMultipleStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetMultipleStringPicker.m; path = Pickers/ActionSheetMultipleStringPicker.m; sourceTree = ""; }; + C892A98B14CEBE998FB1D05EEEAAAF8C /* _FBSDKLoginRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKLoginRecoveryAttempter.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m; sourceTree = ""; }; + C8A3671780D68F87EE6E971844063516 /* FBSDKAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h; sourceTree = ""; }; + C932706C872C628422065773221CCEF7 /* MPLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogging.m; path = MoPubSDK/Logging/MPLogging.m; sourceTree = ""; }; + C9619FF7B8C6B9506112632C4268CF46 /* FBSDKImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKImageDownloader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m; sourceTree = ""; }; + C9B603800F1CAEF40BF5B66BF307538A /* MPStaticNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStaticNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h; sourceTree = ""; }; + CA63F538A0BAC2E440F16A216E0375BC /* MPNativeAdConfigValues+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdConfigValues+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h"; sourceTree = ""; }; + CAA9B99F13BC0E6806D0B5D2155F779C /* MPReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPReachabilityManager.m; path = MoPubSDK/Internal/MPReachabilityManager.m; sourceTree = ""; }; + CAB1577C028A7FE2A14418BB27C0E9FA /* Flurry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Flurry.h; path = Flurry/Flurry.h; sourceTree = ""; }; + CAF29C3A2C0231EDF9441D77EB896CAB /* MPVASTMacroProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTMacroProcessor.m; path = MoPubSDK/Internal/VAST/MPVASTMacroProcessor.m; sourceTree = ""; }; + CB8431C448F404B803148A5FBBF4548F /* MPConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsoleLogger.m; path = MoPubSDK/Logging/Internal/MPConsoleLogger.m; sourceTree = ""; }; + CB92DFB1363F8ACE979567C868E3F7AE /* FacebookInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookInterstitialCustomEvent.h; path = FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h; sourceTree = ""; }; + CBA48A2C64DD48079ECC6F8CD55E8135 /* FBSDKButton+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKButton+Subclass.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h"; sourceTree = ""; }; + CBE09AD2DDB03674EF271071D0D19A41 /* 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; }; + CC10BD630CE28B27C1C56ED23E93D314 /* FBSDKErrorReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorReport.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.h; sourceTree = ""; }; + CC313E7DCDADF5A498A1986201BF9E39 /* MPNativeAdRequestTargeting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRequestTargeting.h; path = MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h; sourceTree = ""; }; + CC405636295D1730C58C8F77F9DAA3BA /* FBSDKBridgeAPIProtocolWebV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h; sourceTree = ""; }; + CC4273B6C94CAA829E7BF24BE2422D68 /* FBSDKBridgeAPIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h; sourceTree = ""; }; + CC4A944132D641A792C0FCF3E920A185 /* FBSDKInstrumentManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInstrumentManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h; sourceTree = ""; }; + CD6D5262411D519075E943C29EFAD527 /* FBSDKAccessTokenCaching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCaching.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h; sourceTree = ""; }; + CD6E18FD964B70B08F9D4BAF828DE52A /* MPBaseAdapterConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseAdapterConfiguration.m; path = MoPubSDK/MPBaseAdapterConfiguration.m; sourceTree = ""; }; + CE0A5007C7A1AEAA096F238CD46C7459 /* FBAdOptionsView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdOptionsView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h; sourceTree = ""; }; + CE17E3F5F6250B447A8F1FC5F2B2A7DD /* MPHTMLBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLBannerCustomEvent.h; path = MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h; sourceTree = ""; }; + CE4FED88BE35D1B2E13FD57E2967329E /* FBSDKLoginError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginError.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h; sourceTree = ""; }; + CE636FA26A28194374E285CACD418EAD /* FBSDKBridgeAPIProtocolNativeV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolNativeV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m; sourceTree = ""; }; + CE65EF010803C6674566E2D9DE335C96 /* MPVASTInline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTInline.m; path = MoPubSDK/Internal/VAST/MPVASTInline.m; sourceTree = ""; }; + CE676C56F6267E7D53E3130433FACAE7 /* 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 = ""; }; + CE6FE5FDD0AF11FDD40CEA9FB164967D /* MRVideoPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRVideoPlayerManager.m; path = MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m; sourceTree = ""; }; + CE9290ABC6DC55518EEB631DE2828222 /* MPMoPubNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubNativeAdAdapter.h; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h; sourceTree = ""; }; + CFF488C534F8903F2B100F31200CA1F4 /* MOPUBAVPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBAVPlayerView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m; sourceTree = ""; }; + D005096B183635B0BDE393E54DE3FAB4 /* MoPub-FacebookAudienceNetwork-Adapters-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MoPub-FacebookAudienceNetwork-Adapters-prefix.pch"; sourceTree = ""; }; + D03154A17F2B2C28AEE2D661970B5F34 /* MPXMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPXMLParser.m; path = MoPubSDK/Internal/Common/MPXMLParser.m; sourceTree = ""; }; + D0DC89E0B3F421A54F512B482427D6BF /* MPRewardedVideoAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoAdapter.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h; sourceTree = ""; }; + D0E27063B51D90CBCE78AF2B83B072C0 /* MPReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPReachability.m; path = MoPubSDK/Internal/Utility/MPReachability.m; sourceTree = ""; }; + D16E8165E37857ACF68A72747C36DF0B /* MPEnhancedDeeplinkRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPEnhancedDeeplinkRequest.h; path = MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h; sourceTree = ""; }; + D17ED6E113B47357BC1B1C19C5C92F40 /* MPAdServerURLBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerURLBuilder.h; path = MoPubSDK/Internal/Common/MPAdServerURLBuilder.h; sourceTree = ""; }; + D1CD01692208ADC8B5D34E8625D1E884 /* FBSDKGateKeeperManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGateKeeperManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m; sourceTree = ""; }; + D21DF05E8CD024EBD37DCA3DC4B0C96B /* MPConsentManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentManager.m; path = MoPubSDK/Internal/MPConsentManager.m; sourceTree = ""; }; + D280B520676BCBE4BE0C4A73EBFCF93D /* FBSDKEventBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBinding.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h; sourceTree = ""; }; + D2C9CBCDE0C9624781FD87969E7635CD /* FBSDKLoginUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginUtility.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h; sourceTree = ""; }; + D2DFE685023ECCFA9855178CC0DEE9BD /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; + D32299C749DF7BFF728B728301B3A5D7 /* FBSDKServerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m; sourceTree = ""; }; + D3745DCA98D941EB4F8C14DAC7633D27 /* MPLastResortDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLastResortDelegate.h; path = MoPubSDK/Internal/Common/MPLastResortDelegate.h; sourceTree = ""; }; + D43CBC300B6EAB3D1D61E89FB9FB654B /* MPConsentStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentStatus.h; path = MoPubSDK/MPConsentStatus.h; sourceTree = ""; }; + D4B6A28BD47B735DD6580C6B750F7443 /* FBSDKAudioResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAudioResourceLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m; sourceTree = ""; }; + D4D992CA6571C5391FFA64032BCA6243 /* MPUnmutedBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPUnmutedBtn@2x.png"; path = "MoPubSDK/Resources/MPUnmutedBtn@2x.png"; sourceTree = ""; }; + D54DCF433B650978B2BE021712703EFE /* FBSDKRestrictiveDataFilterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKRestrictiveDataFilterManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h; sourceTree = ""; }; + D5E4DCB8F35CB11F7F45FEE85551A6EC /* FlurryCCPA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryCCPA.h; path = Flurry/FlurryCCPA.h; sourceTree = ""; }; + D616BA0574DA45CAEFF05CD38215AFE0 /* MPURLActionInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLActionInfo.h; path = MoPubSDK/Internal/Common/MPURLActionInfo.h; sourceTree = ""; }; + D619BF41E829342FD8A2D2A80B3C5333 /* FacebookNativeAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookNativeAdRenderer.m; path = FacebookAudienceNetwork/FacebookNativeAdRenderer.m; sourceTree = ""; }; + D64DADE6F35CD7BB28FBC0C6FA243CFF /* MPStaticNativeAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStaticNativeAdRenderer.m; path = MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m; sourceTree = ""; }; + D690DE23C9B4BE38E51137CF9BD7918E /* FBInstreamAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBInstreamAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h; sourceTree = ""; }; + D6C449BA26D872881ECD678859C27B43 /* MPStreamAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStreamAdPlacer.m; path = MoPubSDK/NativeAds/MPStreamAdPlacer.m; sourceTree = ""; }; + D6C4669933A9909FCD02018C3A81CFDB /* MPMoPubAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubAd.h; path = MoPubSDK/MPMoPubAd.h; sourceTree = ""; }; D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker_3_0.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ActionSheetPicker_3_0.framework; path = "ActionSheetPicker-3.0.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - D7B17E1FE6B3F4180D6EF865958DA81B /* ActionSheetMultipleStringPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ActionSheetMultipleStringPicker.m; path = Pickers/ActionSheetMultipleStringPicker.m; sourceTree = ""; }; + D727BAFBEC97FA32B283FC8C1FDB391D /* MPCountdownTimerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCountdownTimerView.h; path = MoPubSDK/Internal/Common/MPCountdownTimerView.h; sourceTree = ""; }; + D7AB17C62BD95B90774AF31EDF156677 /* FBAdSettingsBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdSettingsBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h; sourceTree = ""; }; D7C4B4719E036C1B09595417C7D8ACA6 /* Pods-MAPS.ME.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.debug.xcconfig"; sourceTree = ""; }; - DA04A1779AF1B2F60EA8E2C7A1E4988C /* FBSDKSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSettings.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m; sourceTree = ""; }; - DA707D91E00FB28CDCF7BA31E36D07BA /* ActionSheetStringPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetStringPicker.h; path = Pickers/ActionSheetStringPicker.h; sourceTree = ""; }; - DA960F595A5A54729BF5032FC09E0F80 /* AbstractActionSheetPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AbstractActionSheetPicker.h; path = Pickers/AbstractActionSheetPicker.h; sourceTree = ""; }; - DA9E32F1CD0E50DC2C2A3D575C5F2CF6 /* FBSDKHybridAppEventsScriptMessageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKHybridAppEventsScriptMessageHandler.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m; sourceTree = ""; }; - DAB53F21CB69600BCB460870231668F3 /* FBSDKAppEventsUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m; sourceTree = ""; }; - DB2C7F69FC9D1B66E8B4125E92D52598 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DB46E6F15A079EB2C04E48726BFB3C25 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - DC2B004D48CFC8E1780725FA50F9D4CB /* FBSDKLoginCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginCompletion.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m; sourceTree = ""; }; - DCC887CE6973920D74ADDE45D17BD6A6 /* FBSDKLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogger.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h; sourceTree = ""; }; - DD3C238E4FC3820CD3793D337A9E2AB9 /* BFAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLink.m; path = Bolts/iOS/BFAppLink.m; sourceTree = ""; }; - DDCE488EF816ABCE4222DA5C69CFE513 /* FBSDKMonotonicTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMonotonicTime.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h; sourceTree = ""; }; - DE563547922236B686E2AA1750E175FC /* FBSDKMutableCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMutableCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h; sourceTree = ""; }; - DE9F5904080F117322672612BF55C15D /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - DF4A3DAB8C6D6149B3E6CE1EA9618C79 /* FBSDKDeviceLoginManagerResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManagerResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m; sourceTree = ""; }; - DFD29503912DC9C1EE66B9B7E1CB5A58 /* FBSDKAccessToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessToken.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m; sourceTree = ""; }; - E0850A656566B1BA33A6D27DFB3C2635 /* FBSDKLoginUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginUtility.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m; sourceTree = ""; }; - E0D9E2865A7A4E865A87820793058142 /* ActionSheetPicker-3.0-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ActionSheetPicker-3.0-dummy.m"; sourceTree = ""; }; - E0F0527AD92E611ED53022D2561EFED5 /* FBSDKAccessTokenCacheV3_17.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_17.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_17.m; sourceTree = ""; }; - E249FAA4A618691DE6F3182ADCB75DD2 /* FBSDKBridgeAPIProtocolWebV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m; sourceTree = ""; }; - E24A52BE2B08E3C71430CFBEF90F5A82 /* FBSDKBridgeAPIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m; sourceTree = ""; }; - E2D523A4F4193431449F7B6287726A6F /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - E5AF7940DA259AA032FB4924B1C8E28E /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - E5D214C62C0E0D471EDDA33D6AE26481 /* FBSDKDeviceLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m; sourceTree = ""; }; - E65985C8E7E90A6C8AE5F7E07C79E582 /* ActionSheetPicker-3.0-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ActionSheetPicker-3.0-umbrella.h"; sourceTree = ""; }; - E68D46C3D8DE6764212AD440CDE1E1F6 /* FBSDKAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; - E7865D2BAE6F7E9886723B69688D9BCB /* FBSDKLoginTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h; sourceTree = ""; }; - E80A1310D1D0F7612656300142BE5715 /* FBSDKGraphRequest+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequest+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h"; sourceTree = ""; }; - E893E3C5909847B55AF7AFFE4C2F6B90 /* FBSDKDeviceLoginCodeInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginCodeInfo.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m; sourceTree = ""; }; - E9A9611A13033A607EF2F4C0366B0FB9 /* Bolts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Bolts-Info.plist"; sourceTree = ""; }; - EADD986CB516AAE647C15CF7F39E29FA /* Flurry-iOS-SDK-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Flurry-iOS-SDK-umbrella.h"; sourceTree = ""; }; - EB09E1AF4F80BB0331460DE619242008 /* FBSDKHybridAppEventsScriptMessageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKHybridAppEventsScriptMessageHandler.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h; sourceTree = ""; }; + D814186BBA59DF50A4A5DE72D6A4B403 /* FlurryConsent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryConsent.h; path = Flurry/FlurryConsent.h; sourceTree = ""; }; + D843C258AB8E6AAC8E061D79A1FA89EA /* MPCollectionViewAdPlacerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacerCell.h; path = MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h; sourceTree = ""; }; + D8513A607D2B16709BB101D5508D44DA /* FBSDKStandaloneModel.hpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKStandaloneModel.hpp; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKStandaloneModel.hpp; sourceTree = ""; }; + D9AD3717822FC119D19CADDC8CD3D729 /* MPImageDownloadQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImageDownloadQueue.h; path = MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h; sourceTree = ""; }; + D9FAE058EEE18EF162B620C0B8F84454 /* FBSDKLoginKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKLoginKit-Info.plist"; sourceTree = ""; }; + DA0F58385DA596725A53D3859C3C8C68 /* MPVASTCreative.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCreative.m; path = MoPubSDK/Internal/VAST/MPVASTCreative.m; sourceTree = ""; }; + DA7B4355BFD9D18ADC15C7646FC9E971 /* FBSDKAccessTokenExpirer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenExpirer.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m; sourceTree = ""; }; + DAC016B23AD39357E0C1A7E7AEDEB2B8 /* FBSDKLoginKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-prefix.pch"; sourceTree = ""; }; + DADD834F93E695F68C1379C591E7B845 /* MPAdConversionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdConversionTracker.h; path = MoPubSDK/MPAdConversionTracker.h; sourceTree = ""; }; + DB2F2CB13781974D8A3D698D7089D6D7 /* FBSDKDeviceLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h; sourceTree = ""; }; + DB30C55E31E06B3A699CEB1FD5E79F34 /* FBSDKLoginError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginError.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m; sourceTree = ""; }; + DB4185FA59433F9E87FD3186B135E28C /* FBSDKApplicationObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h; sourceTree = ""; }; + DBC013846E603B0DCB2154335EF1F42C /* FBSDKAppEventsUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m; sourceTree = ""; }; + DC0ED7C29ABEB9D14E781BB76E6936EA /* FBSDKDeviceLoginCodeInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginCodeInfo.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m; sourceTree = ""; }; + DCA155048122258B8D4B0B7F7B2B05C9 /* MPStopwatch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStopwatch.h; path = MoPubSDK/Internal/Utility/MPStopwatch.h; sourceTree = ""; }; + DD7CEC3B8B46188033AD5A867E690AE5 /* MOPUBPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerViewController.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h; sourceTree = ""; }; + DD7EC0A94762437B8C70E7D42301789D /* AppsFlyerFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppsFlyerFramework.xcconfig; sourceTree = ""; }; + DDF70F7C1F95C149D7ABD6C402EA2E14 /* ActionSheetLocalePicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActionSheetLocalePicker.h; path = Pickers/ActionSheetLocalePicker.h; sourceTree = ""; }; + DE10286539719D07BB92F56417F0225C /* MPNativeAdRendererConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRendererConfiguration.m; path = MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m; sourceTree = ""; }; + DEA8F0B19D9D0B45167526ABF5B96757 /* MRCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRCommand.h; path = MoPubSDK/Internal/MRAID/MRCommand.h; sourceTree = ""; }; + DFE717B1569AE3EDE5EA12247CD22CC8 /* MRProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRProperty.h; path = MoPubSDK/Internal/MRAID/MRProperty.h; sourceTree = ""; }; + E012BF733FEA4F89BC9D80EA6EAE6CF3 /* FBSDKFeatureManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKFeatureManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.h; sourceTree = ""; }; + E0BA71712E5371FDB33E10230DF27767 /* MPConsentChangedReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentChangedReason.h; path = MoPubSDK/MPConsentChangedReason.h; sourceTree = ""; }; + E136CA309141E83738CB0FD54883FCED /* FBSDKAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkNavigation.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m; sourceTree = ""; }; + E14BCF6C93261D2D3511D75AE2FEA0FE /* MPAdTargeting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdTargeting.m; path = MoPubSDK/MPAdTargeting.m; sourceTree = ""; }; + E167BCEDF50D52BE36ED1B1EBEED9D69 /* MPActivityViewControllerHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPActivityViewControllerHelper.m; path = MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m; sourceTree = ""; }; + E1ED39001A78BBFFCBF1F48878403C27 /* MoPub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub.h; path = MoPubSDK/MoPub.h; sourceTree = ""; }; + E21BEE5051D43121C303FB2B7F567FB0 /* 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; }; + E24598D1166C6CB4DA92BD9814FD41A6 /* FBSDKLoginKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginKit.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h; sourceTree = ""; }; + E25F9C8696C2ED8BB8ADFAACE47EAF17 /* mopub-ios-sdk-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "mopub-ios-sdk-prefix.pch"; sourceTree = ""; }; + E26AE9638199D65BA27C8E2B0ECCA247 /* MPVASTLinearAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTLinearAd.h; path = MoPubSDK/Internal/VAST/MPVASTLinearAd.h; sourceTree = ""; }; + E35CB065E29FB2533BA836083DB38C63 /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; + E36B25228BC0DC50CCC60BE52D32323F /* MPVASTLinearAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTLinearAd.m; path = MoPubSDK/Internal/VAST/MPVASTLinearAd.m; sourceTree = ""; }; + E3B363271724A81ABA270C2BB7B000BD /* FBSDKURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURL.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m; sourceTree = ""; }; + E41120F51714C91D6F930D4C4CED9448 /* MOPUBActivityIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBActivityIndicatorView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h; sourceTree = ""; }; + E42F4AA85A9EE2AD782966045AAEC654 /* MPEngineInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPEngineInfo.h; path = MoPubSDK/MPEngineInfo.h; sourceTree = ""; }; + E47EC2BE49A98F564CC54B5E7384683B /* MPRewardedVideoAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoAdManager.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m; sourceTree = ""; }; + E480E0ACD2323B6A2EDD1F1865F6F9DE /* MPCloseButtonX@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseButtonX@3x.png"; path = "MoPubSDK/Resources/MPCloseButtonX@3x.png"; sourceTree = ""; }; + E4C4E32AB70900964EF850E599515ADD /* MPPlayBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPPlayBtn@3x.png"; path = "MoPubSDK/Resources/MPPlayBtn@3x.png"; sourceTree = ""; }; + E4FD2174FAF8D0EE2345C15BA850205D /* FBSDKAppEventsDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsDeviceInfo.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h; sourceTree = ""; }; + E55AF0D570AF4193719E16841EC2E091 /* MPNativeAdRendererImageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererImageHandler.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h; sourceTree = ""; }; + E59809B0DC59C4DA0BA75DB7927C17DA /* MPCollectionViewAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCollectionViewAdPlacer.m; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m; sourceTree = ""; }; + E5C0551E6E0F447355893182A32E06C6 /* MPPrivateBannerCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateBannerCustomEventDelegate.h; path = MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h; sourceTree = ""; }; + E67C7E0311D18E5905370B8D8AAD9934 /* 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; }; + E68D0E0DE2AFD94D3318C95D0284F2E4 /* FBSDKAddressFilterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAddressFilterManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.h; sourceTree = ""; }; + E72DA8F5954F2E02720E4015EC16EBFF /* FBAdDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdDefines.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h; sourceTree = ""; }; + E753705DBA15FA24567AC97FF80B0465 /* MRProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRProperty.m; path = MoPubSDK/Internal/MRAID/MRProperty.m; sourceTree = ""; }; + E862213BC8437635BD90EE2AE196B93B /* MOPUBReplayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBReplayView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m; sourceTree = ""; }; + E8880ACFDD1626E845D356D5B9BA1012 /* MPViewabilityTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityTracker.h; path = MoPubSDK/Viewability/MPViewabilityTracker.h; sourceTree = ""; }; + E8D327794FFA0E3A7AC54F981ABC5972 /* FBSDKWebDialog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialog.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m; sourceTree = ""; }; + E9AB7E5055801BA24E9DFEE6961E7BAA /* FBSDKProfilePictureView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfilePictureView.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h; sourceTree = ""; }; + EA65880AF47FCC8B0BC6E2E129C16546 /* FBSDKMeasurementEventListener.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMeasurementEventListener.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m; sourceTree = ""; }; + EA7D77DB3FEF0D6DC0745E21E2A0865A /* MPMoPubRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubRewardedVideoCustomEvent.h; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h; sourceTree = ""; }; + EA85682B12AF0CFFB2D55EC92DB2662D /* 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; }; + EAC89CE26A5883DB3EEB6224E6538EC8 /* MoPub+Utility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MoPub+Utility.h"; path = "MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h"; sourceTree = ""; }; + EB0A61CE9D2654A7A63E42E4BB9D8C43 /* NSHTTPURLResponse+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSHTTPURLResponse+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m"; sourceTree = ""; }; + EB21B0A94FF4B4299A6DCF6B60985AD9 /* MoPub_AvidDeferredAdSessionListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidDeferredAdSessionListener.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h; sourceTree = ""; }; + EC157DA59A809EE7D3051A904E1F14E5 /* MPNativeAdDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdDelegate.h; path = MoPubSDK/NativeAds/MPNativeAdDelegate.h; sourceTree = ""; }; EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKCoreKit.framework; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED04C9F37C2776EC3BA2AF1136B22CEB /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - ED2F76A545059B6CAB1C8A2225E7770C /* FBSDKAccessTokenCacheV3_21.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCacheV3_21.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCacheV3_21.m; sourceTree = ""; }; - ED66F6D2A7E147A229EBDDC2E7317A12 /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; - EE0EC5BDC623A806FCACAF44FA17A86F /* FBSDKUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h; sourceTree = ""; }; - EE15204756DE856378A2436E7AA3EC7A /* FBSDKCoreKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.xcconfig; sourceTree = ""; }; - EEA382D0056E6E4AB04B22BDC88607E8 /* FBSDKDeviceLoginCodeInfo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginCodeInfo+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h"; sourceTree = ""; }; - EF1751A0AA8634AAFAD4200329826C25 /* FBSDKLoginKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.xcconfig; sourceTree = ""; }; - EF207ED8247D83896CF56E1B493A9DAB /* FBSDKTestUsersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTestUsersManager.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m; sourceTree = ""; }; - EF2F8847A8B1DD381AAAC9872EBD2DEF /* FBSDKAppEvents+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKAppEvents+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h"; sourceTree = ""; }; - F1DBEF0F0191E0EC3E85AC00412566BE /* BFURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL_Internal.h; path = Bolts/iOS/Internal/BFURL_Internal.h; sourceTree = ""; }; - F35ECF36146A2B85D414417FCEF7C7A3 /* AppsFlyerFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppsFlyerFramework.xcconfig; sourceTree = ""; }; - F3EEFC16834698B1998D82466DDAC947 /* BFAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFAppLinkNavigation.m; path = Bolts/iOS/BFAppLinkNavigation.m; sourceTree = ""; }; - F5142241EAD0FBBF0DF46A5F3EB2F447 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - F6086DBC65693BFCBF924F47420D7DB3 /* FBSDKLoginUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginUtility.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h; sourceTree = ""; }; - F62DF9856EA18D8F0E5399282F0251F0 /* Pushwoosh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pushwoosh.xcconfig; sourceTree = ""; }; - F6A4D02996FC42EB6C5B1477D8CC7658 /* 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; }; - F75A3F682419FA9DC7163B67C08BF24D /* BFWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFWebViewAppLinkResolver.m; path = Bolts/iOS/BFWebViewAppLinkResolver.m; sourceTree = ""; }; - F834B42ED800C3CB733DB0884044F89B /* FBSDKViewHierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewHierarchy.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKViewHierarchy.m; sourceTree = ""; }; - F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts.framework; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F87E4B000DD10E71BE61D4546AA0EF1C /* FBSDKBridgeAPICrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPICrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPICrypto.h; sourceTree = ""; }; - F9043B73549ABF8BA20A632E162A296F /* FBSDKApplicationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationDelegate.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h; sourceTree = ""; }; + ED75C2B3EB6E4E481C1DAB1CB9DED0B8 /* MPVASTModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTModel.m; path = MoPubSDK/Internal/VAST/MPVASTModel.m; sourceTree = ""; }; + EDCB994AC630ABC7B6EEBF4237250AFF /* FlurrySessionBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurrySessionBuilder.h; path = Flurry/FlurrySessionBuilder.h; sourceTree = ""; }; + EDF2A44401F9F9C50DC19E20635FE241 /* FBNativeAdViewAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdViewAttributes.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h; sourceTree = ""; }; + EE0C49FA8A473D1D6E3833449EA2FA1A /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; + EECA1C1FC5842A736DC2CC0325C3F100 /* MPNativeAd+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAd+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m"; sourceTree = ""; }; + EF1E0E526F9393A3082A02D9BC62D815 /* MPPrivateRewardedVideoCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateRewardedVideoCustomEventDelegate.h; path = MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h; sourceTree = ""; }; + EF21C10A78AE55D1FA2A3047387BB737 /* MPAdView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdView.m; path = MoPubSDK/MPAdView.m; sourceTree = ""; }; + EF4B298895D0E56F0362DA482C2E50F9 /* MoPub_AvidManagedVideoAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidManagedVideoAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h; sourceTree = ""; }; + EF63751A556A1BD133ABC30D6CA05E47 /* MPURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURL.m; path = MoPubSDK/Internal/MPURL.m; sourceTree = ""; }; + EF7738EEB176B4C37E08A1CFA535CAEE /* FBSDKMutableCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMutableCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h; sourceTree = ""; }; + EFCD7A109313FBA2F4E70F4B28522C04 /* FBSDKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m; sourceTree = ""; }; + F0028F18FB4507596E9D39B121F1BBFE /* FBSDKGraphRequestDataAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestDataAttachment.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h; sourceTree = ""; }; + F0709010DEB2CE6FF63CA9540A3737D0 /* MPViewabilityAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapter.h; path = MoPubSDK/Viewability/MPViewabilityAdapter.h; sourceTree = ""; }; + F09B98D1E0717E9E51CCADA8989DB1C1 /* MoPub_AbstractAvidManagedAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AbstractAvidManagedAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h; sourceTree = ""; }; + F0BFC35340F99750CE136136ADEE7667 /* FBSDKLoginKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKLoginKit-dummy.m"; sourceTree = ""; }; + F0D16ABEAA9C6C177449A761B24F5AE3 /* DistancePickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DistancePickerView.h; path = Pickers/DistancePickerView.h; sourceTree = ""; }; + F1C9BB72C1F0D2DD6BDD19DD00AA4A21 /* FBNativeBannerAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeBannerAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h; sourceTree = ""; }; + F1CD286CFEE14490287189714F6D2E09 /* FBSDKDeviceLoginManagerResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManagerResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h; sourceTree = ""; }; + F2A412F43B948AE0A464C0308714FE7E /* MPConsentChangedNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentChangedNotification.h; path = MoPubSDK/MPConsentChangedNotification.h; sourceTree = ""; }; + F3244FC531DA3A8C4CE676BBBBB7036C /* MPHTMLInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLInterstitialViewController.h; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h; sourceTree = ""; }; + F32A1022D86582175CCFB8976F259F1B /* MPImageDownloadQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImageDownloadQueue.m; path = MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.m; sourceTree = ""; }; + F3387611B5A713CCF468249DF4AF8ED9 /* FBSDKModelRuntime.hpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKModelRuntime.hpp; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelRuntime.hpp; sourceTree = ""; }; + F3DA677D40DB7A271E6C2F2ECAC540FA /* MRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRConstants.m; path = MoPubSDK/Internal/MRAID/MRConstants.m; sourceTree = ""; }; + F3DB6C27D533C8F222BDA7B129D50C53 /* FBSDKEventBindingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBindingManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h; sourceTree = ""; }; + F3F541DB52E1AE5B7F2A89786E9047F3 /* MPRateLimitConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRateLimitConfiguration.h; path = MoPubSDK/Internal/MPRateLimitConfiguration.h; sourceTree = ""; }; + F432D8890E5C58E8F9346D22CFA439E9 /* MPBLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBLogger.h; path = MoPubSDK/Logging/MPBLogger.h; sourceTree = ""; }; + F4AF64484FA6C4C72A88B5A81FC06A22 /* MOPUBNativeVideoAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdAdapter.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h; sourceTree = ""; }; + F538853FB162911DD9A83C235AAE34E7 /* NSBundle+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h"; sourceTree = ""; }; + F57146BE200145AE7D9E5E27B3F67894 /* FBSDKErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h; sourceTree = ""; }; + F5C19D2E77BE770CDF8C2DED6FBC8FD8 /* FBSDKCrashObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h; sourceTree = ""; }; + F5E7861B5C8E6B1F8F0920E64AE7C7EE /* FBSDKEventDeactivationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventDeactivationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.m; sourceTree = ""; }; + F5EC29A86D037F510754CCE7E3982C97 /* MPReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPReachability.h; path = MoPubSDK/Internal/Utility/MPReachability.h; sourceTree = ""; }; + F5F7BCD7BFC75F107394E70B1C7E158A /* MPPlayBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPPlayBtn@2x.png"; path = "MoPubSDK/Resources/MPPlayBtn@2x.png"; sourceTree = ""; }; + F66ECA950B107ADFCEC708B17A751127 /* MPVASTStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTStringUtilities.h; path = MoPubSDK/Internal/VAST/MPVASTStringUtilities.h; sourceTree = ""; }; + F7139F7CC8146FF584A83ADDCFC010B7 /* FBSDKGraphErrorRecoveryProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphErrorRecoveryProcessor.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m; sourceTree = ""; }; + F72291810FE39CCB20903C582D447635 /* FBSDKViewHierarchyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewHierarchyMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h; sourceTree = ""; }; + F7C0C4301B6F62E5F3CE066AFCBB6076 /* FBSDKGraphRequestConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h; sourceTree = ""; }; + F7D56E63FD3467A75A3B7407276D0440 /* FBNativeAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h; sourceTree = ""; }; + F7E74158695DEDCDAACDBCB95DA0D3BA /* MPCloseBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseBtn@3x.png"; path = "MoPubSDK/Resources/MPCloseBtn@3x.png"; sourceTree = ""; }; + F82E383530F945BF727E9A15322A4647 /* MOPUBNativeVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoCustomEvent.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m; sourceTree = ""; }; F9CC2E64A156A09363C34CD82E9994FD /* Pods-MAPS.ME.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MAPS.ME.modulemap"; sourceTree = ""; }; - FA0340E21055A2148D909C6BBE5816A3 /* FBSDKImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKImageDownloader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m; sourceTree = ""; }; - FA53021758B6539ADC518AC42F1B23BD /* FBSDKAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkNavigation.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m; sourceTree = ""; }; - FF0ABADDE923230CEAD0D0093F65AFF7 /* BFURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFURL.h; path = Bolts/iOS/BFURL.h; sourceTree = ""; }; + F9D36F30D658A2459997378A67A10691 /* MPRewardedVideo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideo.m; path = MoPubSDK/RewardedVideo/MPRewardedVideo.m; sourceTree = ""; }; + FA2385F50008B69FA122D58F91A5B037 /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; + FAE4E5837E2A9714C55713E81E8BCD12 /* MPConsentChangedNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentChangedNotification.m; path = MoPubSDK/MPConsentChangedNotification.m; sourceTree = ""; }; + FAE7EDE92A1D542687BAD2E56B6A65DD /* MPInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEvent.h; path = MoPubSDK/MPInterstitialCustomEvent.h; sourceTree = ""; }; + FBFD6477C3BF891597A3C5A1FCBF2B2B /* FBSDKLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h; sourceTree = ""; }; + FC9FA0418B7745B5D8DD98AD4F4E56C1 /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h; sourceTree = ""; }; + FCB56E23BB027CBC50C8DDF6A79124FA /* MPImpressionData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImpressionData.m; path = MoPubSDK/MPImpressionData.m; sourceTree = ""; }; + FCD2FB4B26D095833E2EE883574545E3 /* 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; }; + FCD4C2BC86A3172104046B8791BF8406 /* FBSDKAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkTarget.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h; sourceTree = ""; }; + FD699BC08360062BDC6F015EFF29D130 /* MPInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEventDelegate.h; path = MoPubSDK/MPInterstitialCustomEventDelegate.h; sourceTree = ""; }; + FD7B4B29134B4CC7098C0FA704B7E9A2 /* FBSDKAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkTarget.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m; sourceTree = ""; }; + FDD77AA074009DF6C650D28555AF080A /* FBSDKLoginManagerLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLogger.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h; sourceTree = ""; }; + FDE30D15554C2C30D47208E3387A0021 /* MPBannerAdManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerAdManagerDelegate.h; path = MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h; sourceTree = ""; }; + FDE58727CA3C31A48E01CA8743169BB9 /* FBSDKAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkNavigation.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h; sourceTree = ""; }; + FE15101B8B396F7595B709AE49680129 /* MPConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConstants.h; path = MoPubSDK/MPConstants.h; sourceTree = ""; }; + FE2A4DCF4177B35E10F3046B363D28D9 /* MOPUBFullscreenPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBFullscreenPlayerViewController.m; path = MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m; sourceTree = ""; }; + FF4A3FFC19B6BCDD1452BD9CC16C2B56 /* FBMediaViewVideoRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBMediaViewVideoRenderer.h; path = Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h; sourceTree = ""; }; + FF6E8C2F6E3D4E66751CE3CDAB12D830 /* mopub-ios-sdk-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "mopub-ios-sdk-dummy.m"; sourceTree = ""; }; + FFECA745E4E127C05F5043F8A435FACC /* MPDAAIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPDAAIcon@2x.png"; path = "MoPubSDK/Resources/MPDAAIcon@2x.png"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 61DEAED519118049D1C0606E95E987B9 /* Frameworks */ = { + 1A8437E8639C6B124FCC635FBFB343BD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5CF543243BECEFC1727E5E6A3399F0B6 /* Bolts.framework in Frameworks */, - 1333AA7B6EAD6D7F84FBD6262871D205 /* Foundation.framework in Frameworks */, + 65CFC70F92E96B5A32DA3EA33FB52FD1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7B18E34A7D3D9519A4E8ED95437962A0 /* Frameworks */ = { + 727019B8B9FD77F412B1A6D4A7DC0A10 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 285EC183A453F329DEFF78351A4AB48D /* Foundation.framework in Frameworks */, + A9A7AA092DF526C679B1AA137E08FDE6 /* AVFoundation.framework in Frameworks */, + 1FB20A564413ED552B5B3678EBB8E1EA /* AVKit.framework in Frameworks */, + 20901BD496363CCB7FE8B45936818C69 /* CoreGraphics.framework in Frameworks */, + B28B1A9E4DBB0C4F2C8E268FE9C41E34 /* CoreLocation.framework in Frameworks */, + 33E8A3ED05D9D38C614FD3C7B97C59BE /* CoreMedia.framework in Frameworks */, + 9FF7927C0BB5D85D2478956062AA65C2 /* CoreTelephony.framework in Frameworks */, + 8E2CED11F9946D5A0FA12AB52A71E6AC /* Foundation.framework in Frameworks */, + 90EEF58EE06BDAD60AC49C14DBD1EF92 /* MediaPlayer.framework in Frameworks */, + 9D89CF11DDF50A71681215A6B00571E7 /* QuartzCore.framework in Frameworks */, + 77D29D76701215399A6D5D8C06E606D5 /* SafariServices.framework in Frameworks */, + 781E1C1849E6C579984EB82795A9A3A7 /* SystemConfiguration.framework in Frameworks */, + 9DFD96064F31C20AA5970AED36ACAA83 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BAF65F3088AF4B3369F295875DB1A418 /* Frameworks */ = { + 72D7D04F29459BCECD7B754DA42E545E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B0D0A049C2B8890A952281765F6E5B60 /* Foundation.framework in Frameworks */, + B4AB39977EDBAC669D285E0D905E7182 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AC445D70BC0916420847BD605276DA3E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 304360652446AA07A75BC26AF2D56AFF /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -847,32 +1868,44 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 03B4DA11FA8937F6FDB7438D0EC5591F /* AppLinks */ = { + 004664A4769FEFA7476BE292868682C4 /* Flurry-iOS-SDK */ = { isa = PBXGroup; children = ( - 166795CE9F04E0B04C089E3042E00B8B /* BFAppLink.h */, - DD3C238E4FC3820CD3793D337A9E2AB9 /* BFAppLink.m */, - 9E9332679CAED41F77F7C1F6E1D7369A /* BFAppLink_Internal.h */, - 6C663CE95B9933E25C74425A83E237B2 /* BFAppLinkNavigation.h */, - F3EEFC16834698B1998D82466DDAC947 /* BFAppLinkNavigation.m */, - 977F22D13C96D65291324FFEC5A0ED4E /* BFAppLinkResolving.h */, - 8879DF3A0DB656AFC93E4A4F3483EEA0 /* BFAppLinkReturnToRefererController.h */, - 0E15DA59B842EC4332D2115D33CAF40A /* BFAppLinkReturnToRefererController.m */, - CB26876F187E01EE3F089C8B6A36EA53 /* BFAppLinkReturnToRefererView.h */, - A96839831799065C39F89283D0B5364E /* BFAppLinkReturnToRefererView.m */, - 3001FEF8392CEB75029022342B7BC6D6 /* BFAppLinkReturnToRefererView_Internal.h */, - 87F63C6C9990D6C047F2147B8C6494BB /* BFAppLinkTarget.h */, - 41A0FCB26B3D11B5C197A60061391136 /* BFAppLinkTarget.m */, - 0622B457A95985591738FB9450D9F77E /* BFMeasurementEvent.h */, - 3456949A7F2D1CF658DBBAA020061E9E /* BFMeasurementEvent.m */, - C884BF315F207C7C6CAB028BEA3A46E1 /* BFMeasurementEvent_Internal.h */, - FF0ABADDE923230CEAD0D0093F65AFF7 /* BFURL.h */, - 46352D1AE2392EF5F1CDE42D8E19C948 /* BFURL.m */, - F1DBEF0F0191E0EC3E85AC00412566BE /* BFURL_Internal.h */, - 897218E980FF3DF36DE66BD3C54E5122 /* BFWebViewAppLinkResolver.h */, - F75A3F682419FA9DC7163B67C08BF24D /* BFWebViewAppLinkResolver.m */, + 48AE0286DA15879EBF8C5224BC883F6B /* FlurrySDK */, + 5A614A5D9F9917FA6C4CB631A0D45813 /* Support Files */, ); - name = AppLinks; + name = "Flurry-iOS-SDK"; + path = "Flurry-iOS-SDK"; + sourceTree = ""; + }; + 005023E296D3B2F1016174838E192440 /* Support Files */ = { + isa = PBXGroup; + children = ( + DD7EC0A94762437B8C70E7D42301789D /* AppsFlyerFramework.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/AppsFlyerFramework"; + sourceTree = ""; + }; + 037B14C5C70E38BBFBD67BAEFCC0EC68 /* Network */ = { + isa = PBXGroup; + children = ( + 733FF0A63A5E63E32114A3C475C99754 /* FacebookAdapterConfiguration.h */, + 773710B81CB202A90E80BDB8A879F03F /* FacebookAdapterConfiguration.m */, + 4150FB417868D4A7CFE38CD02B684ECF /* FacebookBannerCustomEvent.h */, + C567D84EB348A63DF9814E323373F51A /* FacebookBannerCustomEvent.m */, + CB92DFB1363F8ACE979567C868E3F7AE /* FacebookInterstitialCustomEvent.h */, + A1B02C3E85DA6EE5B488420C6ACC7AC0 /* FacebookInterstitialCustomEvent.m */, + BC325E88FE86F0ED5B69CAD4C4035600 /* FacebookNativeAdAdapter.h */, + 1FD67B4F78E13E576A721FDF0F147BDA /* FacebookNativeAdAdapter.m */, + 8E35005E99FA184A8812CB7DBEF771F7 /* FacebookNativeAdRenderer.h */, + D619BF41E829342FD8A2D2A80B3C5333 /* FacebookNativeAdRenderer.m */, + BB07E018E8B94837165D71C4D9229E82 /* FacebookNativeCustomEvent.h */, + 2AD7CAA6DDAB84124E0C07FBAA457A39 /* FacebookNativeCustomEvent.m */, + 742D0A33F744C488EAEE0CDA27016F62 /* FacebookRewardedVideoCustomEvent.h */, + 205BD6AAFBB2D909CD63A91E747795EB /* FacebookRewardedVideoCustomEvent.m */, + ); + name = Network; sourceTree = ""; }; 08D2D768F4AB8FBA4BF7CDEDC9D03588 /* Pods-MAPS.ME */ = { @@ -893,424 +1926,602 @@ path = "Target Support Files/Pods-MAPS.ME"; sourceTree = ""; }; - 0AEF6280A7288A2CF9D112188ACC27CC /* Support Files */ = { + 0D1399AA45170A7519F1619CB8B984A3 /* AppsFlyerFramework */ = { isa = PBXGroup; children = ( - 3ED299BDB24FC74A99559541387AD02B /* Flurry-iOS-SDK.modulemap */, - 70F1B2F7FEC4B1449B3FD4D7BCB8FF8E /* Flurry-iOS-SDK.xcconfig */, - 928D3D0F98F394883D145EB7357C3597 /* Flurry-iOS-SDK-dummy.m */, - B49C14C23163FF1FD22E0FDC5E82F150 /* Flurry-iOS-SDK-Info.plist */, - A6CD0D1F6C66A96FD0FD9457E3DEE8E0 /* Flurry-iOS-SDK-prefix.pch */, - EADD986CB516AAE647C15CF7F39E29FA /* Flurry-iOS-SDK-umbrella.h */, + 58639BB0D36462B2D084B77AF78AFF96 /* Frameworks */, + 005023E296D3B2F1016174838E192440 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Flurry-iOS-SDK"; + name = AppsFlyerFramework; + path = AppsFlyerFramework; sourceTree = ""; }; - 0E7276412224CE4F17BDF19D6B8FD57B /* Frameworks */ = { + 114B487B6CEB74A5B294C6B1B9D5D349 /* Support Files */ = { isa = PBXGroup; children = ( - C2F52BA9F41D1DA9AFC19D750B4F79E7 /* AppsFlyerLib.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2653FD05AE19EE8EF3A2578508881F66 /* Pushwoosh */ = { - isa = PBXGroup; - children = ( - 7890BBCD0FF19C3B34BA38665C7B9A17 /* Core */, - E7922CD2F2E180909FCF13A8D9B8D65D /* Support Files */, - ); - name = Pushwoosh; - path = Pushwoosh; - sourceTree = ""; - }; - 36CFC779F6C72494A3E24081AFB89D19 /* Support Files */ = { - isa = PBXGroup; - children = ( - B059BC4D0CD245A0E1271DAB291AEF69 /* FBSDKLoginKit.modulemap */, - EF1751A0AA8634AAFAD4200329826C25 /* FBSDKLoginKit.xcconfig */, - 17D0833FB4A1A7F86D46B3E78D76D858 /* FBSDKLoginKit-dummy.m */, - 7B5FA5A23C4F2FED945B729CCAC2ACA1 /* FBSDKLoginKit-Info.plist */, - CD154E421A7D579B54D42430D052884E /* FBSDKLoginKit-prefix.pch */, - C6D1882C799FCF7B8AED3FC027C9FB0B /* FBSDKLoginKit-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/FBSDKLoginKit"; - sourceTree = ""; - }; - 37A379FA51F87C1F11F87111399F6540 /* FBSDKCoreKit */ = { - isa = PBXGroup; - children = ( - 81C9809FBD44E86249CDE0FC5ADD6B60 /* _FBSDKTemporaryErrorRecoveryAttempter.h */, - 3CBEDB8EC050D90AC526E85A17F7A3BA /* _FBSDKTemporaryErrorRecoveryAttempter.m */, - B132B60130D4AB549671B21875705C13 /* FBSDKAccessToken.h */, - DFD29503912DC9C1EE66B9B7E1CB5A58 /* FBSDKAccessToken.m */, - 1D1C3FF0C2F89FDFA09A8B1C3391FE43 /* FBSDKAccessTokenCache.h */, - 9A1E458C395E23F7E744D5495E90E0C8 /* FBSDKAccessTokenCache.m */, - 749B7A5574B275D79F45A5B7BE1D56E4 /* FBSDKAccessTokenCacheV3.h */, - 1429C054D28944E8707918F332AD0300 /* FBSDKAccessTokenCacheV3.m */, - 9A46CA52949C2DEC52D3723665F7C840 /* FBSDKAccessTokenCacheV3_17.h */, - E0F0527AD92E611ED53022D2561EFED5 /* FBSDKAccessTokenCacheV3_17.m */, - 2E68692D5CB35BBD3687C725A982CA46 /* FBSDKAccessTokenCacheV3_21.h */, - ED2F76A545059B6CAB1C8A2225E7770C /* FBSDKAccessTokenCacheV3_21.m */, - 9B974FFA1DBCF627B613024A0B6940B2 /* FBSDKAccessTokenCacheV4.h */, - 83BDB30DC190C5B57EB4840AD71DAC4C /* FBSDKAccessTokenCacheV4.m */, - CC57B06F6DB15A43FB0CC5C4DDFB7CDC /* FBSDKAccessTokenCaching.h */, - 75326908F85A4D8A400333305E831D29 /* FBSDKAccessTokenExpirer.h */, - 39891CAC0C470CBD62A153553E1AD4B9 /* FBSDKAccessTokenExpirer.m */, - BF54E0769BFF2B37521EF07C59F7986D /* FBSDKAppEvents.h */, - 7B132AFC106FE742E5EB546510692A6D /* FBSDKAppEvents.m */, - EF2F8847A8B1DD381AAAC9872EBD2DEF /* FBSDKAppEvents+Internal.h */, - D1419514FA9967691ED1588B4FCE48A3 /* FBSDKAppEventsDeviceInfo.h */, - 1633461013BB3C21FA46A68EA179E721 /* FBSDKAppEventsDeviceInfo.m */, - 05355A8AF30ED16B0A0D5C6EE8D8E688 /* FBSDKAppEventsState.h */, - 4B732C148F1B2C11BBFC612B725F84A7 /* FBSDKAppEventsState.m */, - 236EB962749FBCAD7B4C940B9C0BAA25 /* FBSDKAppEventsStateManager.h */, - CCB42C080C545A89A4AEBD0961C07F27 /* FBSDKAppEventsStateManager.m */, - 0DF42242B27B5B9D61765395EADB466B /* FBSDKAppEventsUtility.h */, - DAB53F21CB69600BCB460870231668F3 /* FBSDKAppEventsUtility.m */, - F9043B73549ABF8BA20A632E162A296F /* FBSDKApplicationDelegate.h */, - 391D0A08124D80D2E6DF70B190CD4EB9 /* FBSDKApplicationDelegate.m */, - C860BFA7739B24362FDE740A22793A5D /* FBSDKApplicationDelegate+Internal.h */, - 8E2606D0DBAA77CD08B9D0ACD1FB9CF1 /* FBSDKApplicationObserving.h */, - 0C9CF4AF4E2C437FDA3A35B53B26C0B5 /* FBSDKAppLink.h */, - 38A6071340F2AD1485FD59C08506627E /* FBSDKAppLink.m */, - B4B260DBAEBD01C6AA632B221B75595D /* FBSDKAppLink_Internal.h */, - 24EE133EA5DD7D16DC0D5D40C8F13D5D /* FBSDKAppLinkNavigation.h */, - FA53021758B6539ADC518AC42F1B23BD /* FBSDKAppLinkNavigation.m */, - 5F26E7650F2224D6DB4CA28DBDA0AD77 /* FBSDKAppLinkResolver.h */, - 1F4061E7D60491A09B944A4F31E8830F /* FBSDKAppLinkResolver.m */, - 8506E4FF1AA656AA309FB5FC480BA679 /* FBSDKAppLinkResolving.h */, - 736D03EDC633D7EA1A5021078CF2C210 /* FBSDKAppLinkReturnToRefererController.h */, - 57B90207BEC884C97690334EBFBD0534 /* FBSDKAppLinkReturnToRefererController.m */, - 3F6B7954F6DE7A5471867BB77522CDFF /* FBSDKAppLinkReturnToRefererView.h */, - 4CFAECCCCA97AA0A31B06F4220C0099F /* FBSDKAppLinkReturnToRefererView.m */, - E68D46C3D8DE6764212AD440CDE1E1F6 /* FBSDKAppLinkReturnToRefererView_Internal.h */, - AF4304E316990384DC53590880112239 /* FBSDKAppLinkTarget.h */, - 26DDB9816CC403AC351F27E41A8D6F5E /* FBSDKAppLinkTarget.m */, - 16A5F4705BFDD1B485E044E0B8D7D4D8 /* FBSDKAppLinkUtility.h */, - A12BC7301DDCC818434F6229EF9FE694 /* FBSDKAppLinkUtility.m */, - C59D386BDD7852F1546E09FE91375A58 /* FBSDKAudioResourceLoader.h */, - 71EE10D368749405E4B7D1E53714A8B4 /* FBSDKAudioResourceLoader.m */, - 190080798C06F59D5509354F139E74C8 /* FBSDKBase64.h */, - 1D7C9F715E256F975546FCDBDB3E6270 /* FBSDKBase64.m */, - BC90EF11FCA5BE2AA53CE9514C6D77C2 /* FBSDKBoltsMeasurementEventListener.h */, - CE403AE09632BBA310B9D53556B6F31B /* FBSDKBoltsMeasurementEventListener.m */, - 50A0AFEBFA4688FE7EFC07E211CFD148 /* FBSDKBridgeAPI.h */, - D357A85EE10840E2B34FABCDFC42E748 /* FBSDKBridgeAPI.m */, - F87E4B000DD10E71BE61D4546AA0EF1C /* FBSDKBridgeAPICrypto.h */, - B636DE2C5A1ADFEAFD5491307156CA9E /* FBSDKBridgeAPICrypto.m */, - 92BF02C4D15D2E8681832A2F37E54E91 /* FBSDKBridgeAPIProtocol.h */, - 846D41CF35FC79EB4676149A6E443B73 /* FBSDKBridgeAPIProtocolNativeV1.h */, - BA459E285EAE7AC34C7AEA07F14BFBF7 /* FBSDKBridgeAPIProtocolNativeV1.m */, - A309A8DBB0E76F6AE67639530F789C55 /* FBSDKBridgeAPIProtocolType.h */, - D4BC5C735AD78A92A57A6C7CA5815F95 /* FBSDKBridgeAPIProtocolWebV1.h */, - E249FAA4A618691DE6F3182ADCB75DD2 /* FBSDKBridgeAPIProtocolWebV1.m */, - 64CAAF90D30446CEBAF1B9B334105549 /* FBSDKBridgeAPIProtocolWebV2.h */, - 28BA135E77A32F4DD5697CFD5080120F /* FBSDKBridgeAPIProtocolWebV2.m */, - 6C92E5176104A3F946C6465561A20B62 /* FBSDKBridgeAPIRequest.h */, - E24A52BE2B08E3C71430CFBEF90F5A82 /* FBSDKBridgeAPIRequest.m */, - B89EEE8381216771B45DD1981A6A5BD6 /* FBSDKBridgeAPIRequest+Private.h */, - 9EE37B60CC7035D4DD2F14268749F5B0 /* FBSDKBridgeAPIResponse.h */, - C57760C9485F125E2D7C0CC14573AB99 /* FBSDKBridgeAPIResponse.m */, - 717E669DFFEA6A050698A7FD0139574C /* FBSDKButton.h */, - B93B0AC4ED35FB5C2185FA96ABFD56F7 /* FBSDKButton.m */, - 57455EAD3979A8648CAF18AECB805123 /* FBSDKButton+Subclass.h */, - 00D7C023304AB12B93140D0BD4C9B6B8 /* FBSDKCloseIcon.h */, - D20952C01DBAAF3B82E5EC1936B98D63 /* FBSDKCloseIcon.m */, - 3600395EDA60A8AC48E570A82F134AE1 /* FBSDKCodelessIndexer.h */, - CF6577F280EB889753EA175ED7FC738C /* FBSDKCodelessIndexer.m */, - 694640608FF969F2DCD1FF18A5C0AD53 /* FBSDKCodelessMacros.h */, - C59C51355672E43E707DF56F3A1F7229 /* FBSDKCodelessParameterComponent.h */, - D41CEFE0CE872F3DDEB5F3C6ADA64938 /* FBSDKCodelessParameterComponent.m */, - 3F79FFD6800F6E3F88F6C20DAB46436D /* FBSDKCodelessPathComponent.h */, - 59E708784EDB220928D2A263BCFD4020 /* FBSDKCodelessPathComponent.m */, - B3E4D0D14722B48B2C2EF7658A198F43 /* FBSDKColor.h */, - 9254E7D40235B4A329F61E2C1C453283 /* FBSDKColor.m */, - 3D0522214880C13536DE8D7C753A013B /* FBSDKConstants.h */, - 01DA14DC4990DC278B934E6DC0CC93DE /* FBSDKConstants.m */, - 3F0823A69F44BF3CE3120BAA7D699233 /* FBSDKContainerViewController.h */, - 96428DCAAF4B29417225913717CD1E6D /* FBSDKContainerViewController.m */, - 035429A1F2450E95542AA92CDCB860BF /* FBSDKCopying.h */, - D367A3750BEF207FB4ABA14A0CE61484 /* FBSDKCoreKit.h */, - 3806C879C52138A8C758954A562EA64A /* FBSDKCoreKit+Internal.h */, - BBB6631D2DD49C7AC034D8A2F97F098C /* FBSDKCrypto.h */, - C665CD5066F2A0D820364040452DA722 /* FBSDKCrypto.m */, - 509F789D15768EF542FBD50AE30CBF87 /* FBSDKDeviceRequestsHelper.h */, - 7C9ABC0E579B7A45DF838CCD07459F8F /* FBSDKDeviceRequestsHelper.m */, - 0EBD397C3455AEAABE02E4DCEF3A3450 /* FBSDKDialogConfiguration.h */, - CC5790763BB5D96CA469E21A92C3C18C /* FBSDKDialogConfiguration.m */, - A3B65CFB4F16A8F793920A8750F0F992 /* FBSDKDynamicFrameworkLoader.h */, - CAD1C6C0686A542642592B37DABD9DB1 /* FBSDKDynamicFrameworkLoader.m */, - 0DEA12EF5C950165684A2AC027AFE824 /* FBSDKError.h */, - 6D27A71A558C0AAAF37C50B95951EBFA /* FBSDKError.m */, - 98AC263DDE6617B5ED642AD981EB7FBA /* FBSDKErrorConfiguration.h */, - AEB1BA1C2F137C728ADD9397FC9C9A3D /* FBSDKErrorConfiguration.m */, - 3E2ADB5E5590EF2BC9A5AB05ABB3599C /* FBSDKErrorRecoveryAttempter.h */, - 287DAAAD5D04AA47037CEB5D7B05EEC7 /* FBSDKErrorRecoveryAttempter.m */, - 4F902009A6A795BE890B2ED07D674E56 /* FBSDKErrorRecoveryConfiguration.h */, - 58A6CFE907D08D996DB817C6309ED56A /* FBSDKErrorRecoveryConfiguration.m */, - 253CCE4C399D4670DFC89522D538047A /* FBSDKEventBinding.h */, - A383F44BA001ABB04A819C02DF57E64C /* FBSDKEventBinding.m */, - 55BD48CF0976F0D629CF8F3A2D9E2952 /* FBSDKEventBindingManager.h */, - 687184D29C8D78E315A53F47C578F391 /* FBSDKEventBindingManager.m */, - 10DED6A0EC820A9356CAF472EA0EB093 /* FBSDKGateKeeperManager.h */, - 4BC886B6053DB4E0413D8CAC86A4581D /* FBSDKGateKeeperManager.m */, - A6EA2293CA71AD686F997AE0596F55FF /* FBSDKGraphErrorRecoveryProcessor.h */, - 9DE7A3BB2DD96878505C8FEB1E5E3DA7 /* FBSDKGraphErrorRecoveryProcessor.m */, - B8524ADAA97390D0C03E2E5CFE18530C /* FBSDKGraphRequest.h */, - 70DBDE11A9C91339D36AD7DBEC40F7F6 /* FBSDKGraphRequest.m */, - E80A1310D1D0F7612656300142BE5715 /* FBSDKGraphRequest+Internal.h */, - 2594C92289BC34AFF3A8A80212250626 /* FBSDKGraphRequestBody.h */, - 71B7B49A77B48F6709DDE6DD6AA697B3 /* FBSDKGraphRequestBody.m */, - 5B465DDB4BED6B5252D745252955F24E /* FBSDKGraphRequestConnection.h */, - 8AB6DB66D81C0D82351580F4748224EC /* FBSDKGraphRequestConnection.m */, - 139EA7EC40F949B472050B6E0856647F /* FBSDKGraphRequestConnection+Internal.h */, - 5C75FF7BC1C1E3A9D1CBC3EC748DBB64 /* FBSDKGraphRequestDataAttachment.h */, - 99C58BCC46F51DA7353969874628C4B0 /* FBSDKGraphRequestDataAttachment.m */, - BFCFEEED11F100F8357B1CADC2E56BE3 /* FBSDKGraphRequestMetadata.h */, - 85C09C031B45D0FF83FDB0ABE66512EF /* FBSDKGraphRequestMetadata.m */, - ED66F6D2A7E147A229EBDDC2E7317A12 /* FBSDKGraphRequestPiggybackManager.h */, - D0C62C8E05EC1CC14F4CE97AADB2A445 /* FBSDKGraphRequestPiggybackManager.m */, - EB09E1AF4F80BB0331460DE619242008 /* FBSDKHybridAppEventsScriptMessageHandler.h */, - DA9E32F1CD0E50DC2C2A3D575C5F2CF6 /* FBSDKHybridAppEventsScriptMessageHandler.m */, - AD3F1CA24729AD526811393A7E1490E8 /* FBSDKIcon.h */, - A14CC7AECE0A29041D98D981179C6885 /* FBSDKIcon.m */, - B6891AD0D008A4F5D5F7DB812290F44A /* FBSDKImageDownloader.h */, - FA0340E21055A2148D909C6BBE5816A3 /* FBSDKImageDownloader.m */, - B84382A96A8D602495E9D29D076CDEC3 /* FBSDKInternalUtility.h */, - 96F1FBD741D30CD330E9978EC95D62F4 /* FBSDKInternalUtility.m */, - 931EE12175089E07B44BBBFBC73E5376 /* FBSDKKeychainStore.h */, - 081A457A95C15D3A2320B5A97F082618 /* FBSDKKeychainStore.m */, - 3CBD9CBE86589E34A029F1E0C1E177A8 /* FBSDKKeychainStoreViaBundleID.h */, - 20791A7CEF1431D065B39B9382DCA693 /* FBSDKKeychainStoreViaBundleID.m */, - DCC887CE6973920D74ADDE45D17BD6A6 /* FBSDKLogger.h */, - 8C96196055420ED4E579156FAB97ED30 /* FBSDKLogger.m */, - 13FD70BA3EAAB3FC86A80010FB84CB63 /* FBSDKLogo.h */, - C3F19630E9D8A32AEA4599D81BF73504 /* FBSDKLogo.m */, - 2D93E6F27CAE3DB1B3732057E88B18CB /* FBSDKMacros.h */, - 1B9CCFC173E56B239CB76F9ECAEF276B /* FBSDKMaleSilhouetteIcon.h */, - 7A8A0FC009D3C8E5B6CB12BFFE0F41A3 /* FBSDKMaleSilhouetteIcon.m */, - 69E0EFAF4C6EADF335E37E63918BCD5A /* FBSDKMath.h */, - 512355757BC6BE380F4C27530403C295 /* FBSDKMath.m */, - 2CFEC76C081A9F49D81DBF4CBD9E7C7E /* FBSDKMeasurementEvent.h */, - 5F1A8CFD592FB21294908452B745AEA1 /* FBSDKMeasurementEvent.m */, - CAF0C6057F08A8058CA213D0302FCF81 /* FBSDKMeasurementEvent_Internal.h */, - DDCE488EF816ABCE4222DA5C69CFE513 /* FBSDKMonotonicTime.h */, - 1CF83E4597A233B3AD40065482AC400D /* FBSDKMonotonicTime.m */, - DE563547922236B686E2AA1750E175FC /* FBSDKMutableCopying.h */, - 981E2C73531B6E2FFD8F61BD34B2E6CD /* FBSDKPaymentObserver.h */, - 4E57488BCDFBFF5B54337D11564335DA /* FBSDKPaymentObserver.m */, - 8A952670265950ECD1B218D9E3DC9A8C /* FBSDKProfile.h */, - 2CEB8AEE60DA899CFFA54DB8C508A63E /* FBSDKProfile.m */, - 608A4C9051BD18BE36F6FC7E8E1FA6C9 /* FBSDKProfile+Internal.h */, - 95C72EAAC81656E01B58E91AC1711C64 /* FBSDKProfilePictureView.h */, - 653E6D85C23E362211925654059B8D43 /* FBSDKProfilePictureView.m */, - 673B55FC01C20C6761DBC8417C1710E2 /* FBSDKServerConfiguration.h */, - D0D2892B4A0C855C81FECEDEACB6A642 /* FBSDKServerConfiguration.m */, - 4B20DF7FD027473BCD9A0D23FC6AF10F /* FBSDKServerConfiguration+Internal.h */, - 891F751CE2E16BAC69EEB275A700463C /* FBSDKServerConfigurationManager.h */, - 7FF419DC01070CA2D0CC8EEA2F13F20A /* FBSDKServerConfigurationManager.m */, - 18D4078AB295448BA055F61827B0858E /* FBSDKServerConfigurationManager+Internal.h */, - 89C5C2F35DC0AC8D035C3967408C85EF /* FBSDKSettings.h */, - DA04A1779AF1B2F60EA8E2C7A1E4988C /* FBSDKSettings.m */, - B0F16582658AB351EE776989DCDEAA79 /* FBSDKSettings+Internal.h */, - 5C77263563DABA7693EC0FB7452EEC1E /* FBSDKSwizzler.h */, - 9CC616DB15250AD3E0BA8374A865025C /* FBSDKSwizzler.m */, - BC64ABFA433002A5F14426B4A644C768 /* FBSDKSystemAccountStoreAdapter.h */, - 8DB905CCF523E16EA3A0D75844BA6066 /* FBSDKSystemAccountStoreAdapter.m */, - 4C72D2458162CE65CAC7783BDF0935A1 /* FBSDKTestUsersManager.h */, - EF207ED8247D83896CF56E1B493A9DAB /* FBSDKTestUsersManager.m */, - B08D69E50896F2AEDD180CB6BE52D9E1 /* FBSDKTimeSpentData.h */, - CEF50B9B622AA736B7604887332252F1 /* FBSDKTimeSpentData.m */, - A1E305C0CF0C363D50E645BD1D70070A /* FBSDKTriStateBOOL.h */, - 5B37682E9D9C11E9C16BE58B0196F379 /* FBSDKTriStateBOOL.m */, - 87D227BDCBFE2AC4686865F324ED948E /* FBSDKTypeUtility.h */, - CBB847612E92CD22E5A1E3065BFFAACC /* FBSDKTypeUtility.m */, - C84121CE7E6AAA75826ECE2E775AEAC6 /* FBSDKUIUtility.h */, - 12E53CECEC9E7CEA316A4DC003E28E68 /* FBSDKURL.h */, - 805FD96A717C52DA283F8689418FF6AD /* FBSDKURL.m */, - A673E66ABC9DB21EB5035A359A19456B /* FBSDKURL_Internal.h */, - 999268151A0BC4C534E288A80124B458 /* FBSDKURLOpening.h */, - 51246240F92AFAC949C48FCE65115613 /* FBSDKURLSessionTask.h */, - 7E090E7E8C52D72FADC539CDFD08C98F /* FBSDKURLSessionTask.m */, - 79382CBC9BE9E52075A8C13D29DD17AE /* FBSDKUserDataStore.h */, - 5C56519C545DCD04305A4113D85250DF /* FBSDKUserDataStore.m */, - EE0EC5BDC623A806FCACAF44FA17A86F /* FBSDKUtility.h */, - 9A2A56AB3123CE826FBF233BC5425BAC /* FBSDKUtility.m */, - 60C2CF737E2123B43B6FFEB26B3B6066 /* FBSDKViewHierarchy.h */, - F834B42ED800C3CB733DB0884044F89B /* FBSDKViewHierarchy.m */, - 140F4D403CAD01805386B3EBD621A4C8 /* FBSDKViewImpressionTracker.h */, - 8E4752BC84A484BFFA1194C032BF5371 /* FBSDKViewImpressionTracker.m */, - AB18131B2C3A6EFC70D70F4EF79FA88E /* FBSDKWebDialog.h */, - CC2596C1166D5B751F382E2AD4D76ED5 /* FBSDKWebDialog.m */, - 9039AF91F1ED6A4CD26E6586EC943E8D /* FBSDKWebDialogView.h */, - 293CF7949369D2AFAD79F6959DA84D37 /* FBSDKWebDialogView.m */, - 1DFD23645C817EC77AC6A48D6C64DEF5 /* FBSDKWebViewAppLinkResolver.h */, - 01299E755C98EA0FE3F86B539722A8E4 /* FBSDKWebViewAppLinkResolver.m */, - 5B19AF749A0F99C554D9F00F255EA123 /* Resources */, - B3E6107DCD2AF9D5D8FC521131D3EF68 /* Support Files */, - ); - name = FBSDKCoreKit; - path = FBSDKCoreKit; - sourceTree = ""; - }; - 3875744666E4311A89C26B443EA24725 /* iOS */ = { - isa = PBXGroup; - children = ( - BAC1B0066D6660F35AF73D1FF58892BA /* Foundation.framework */, - F6A4D02996FC42EB6C5B1477D8CC7658 /* Security.framework */, - 397F816997F1E0E23F4ED53DD21E4EBE /* SystemConfiguration.framework */, - 9737384FAEB34B531C7345A73204F001 /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 389C9C631F77C2F60028D6A9EF909724 /* FBSDKLoginKit */ = { - isa = PBXGroup; - children = ( - D4BE879C4DC5CF9A5915F0E029F22383 /* _FBSDKLoginRecoveryAttempter.h */, - 5CD15FA3FF31A22CFF45DB5C762CAB75 /* _FBSDKLoginRecoveryAttempter.m */, - 2924640E63F8FA66D70A88B162447C8F /* FBSDKDeviceLoginCodeInfo.h */, - E893E3C5909847B55AF7AFFE4C2F6B90 /* FBSDKDeviceLoginCodeInfo.m */, - EEA382D0056E6E4AB04B22BDC88607E8 /* FBSDKDeviceLoginCodeInfo+Internal.h */, - 1EE705FE44A250D816818858D578174E /* FBSDKDeviceLoginManager.h */, - E5D214C62C0E0D471EDDA33D6AE26481 /* FBSDKDeviceLoginManager.m */, - 6462A9A157D366F6CA07E3BC106BF736 /* FBSDKDeviceLoginManagerResult.h */, - DF4A3DAB8C6D6149B3E6CE1EA9618C79 /* FBSDKDeviceLoginManagerResult.m */, - 655782EF69CE111E9173A269AF8D29F7 /* FBSDKDeviceLoginManagerResult+Internal.h */, - 1B2CA71922DE0BF1526EB1ACBD0A8116 /* FBSDKLoginButton.h */, - 387DBCD5035C12510D8B70CDA301D382 /* FBSDKLoginButton.m */, - 0394679FC4921C447C6415940942F462 /* FBSDKLoginCompletion.h */, - DC2B004D48CFC8E1780725FA50F9D4CB /* FBSDKLoginCompletion.m */, - 291AF7EAD44E781EC941B7FB34F78E14 /* FBSDKLoginCompletion+Internal.h */, - 4F2122032FC598AF29E7E4C0DA156D95 /* FBSDKLoginConstants.h */, - 14E14015DAB75B759E3A5DDCEEA319A1 /* FBSDKLoginConstants.m */, - 8B736F1CEB5763DFEA3C6C64B594F368 /* FBSDKLoginError.h */, - 9BDA0DF2B66E0F540715E78381CAF4DC /* FBSDKLoginError.m */, - D15294C277BEED664AEDFA57843DFAE5 /* FBSDKLoginKit.h */, - 1DF09EEA21F6DDD0D3EFC3A06FC8D010 /* FBSDKLoginKit+Internal.h */, - 151CC9FDC5A243318620FB22342DF1DA /* FBSDKLoginManager.h */, - 371E626C1144C303898D09049BCDFE86 /* FBSDKLoginManager.m */, - 02165857BE0FB8880CD5A2A74E0B2480 /* FBSDKLoginManager+Internal.h */, - 5260E2319B708E10330EE4051300B324 /* FBSDKLoginManagerLogger.h */, - 3B2A95996B5001A26E599EB217998116 /* FBSDKLoginManagerLogger.m */, - 1D8DBA1F0E406165222E7829823BCEC9 /* FBSDKLoginManagerLoginResult.h */, - D2CEAAA3538C4CC362E228832B571312 /* FBSDKLoginManagerLoginResult.m */, - 7DF9F850A0DBB0435D6C58167951BD97 /* FBSDKLoginManagerLoginResult+Internal.h */, - E7865D2BAE6F7E9886723B69688D9BCB /* FBSDKLoginTooltipView.h */, - 1A72B061AD78E658CC9F2FE1C2B8FDBC /* FBSDKLoginTooltipView.m */, - F6086DBC65693BFCBF924F47420D7DB3 /* FBSDKLoginUtility.h */, - E0850A656566B1BA33A6D27DFB3C2635 /* FBSDKLoginUtility.m */, - 4BFC69877195BFE9B2C63B8E4BB4B87C /* FBSDKTooltipView.h */, - 15E90F80DBC1AF881AF1C691DC74F526 /* FBSDKTooltipView.m */, - 36CFC779F6C72494A3E24081AFB89D19 /* Support Files */, - ); - name = FBSDKLoginKit; - path = FBSDKLoginKit; - sourceTree = ""; - }; - 4A7DBFCE14C08D4294A030568673021D /* FlurrySDK */ = { - isa = PBXGroup; - children = ( - 6646B2E5A422A83AA04BD88FBF66652E /* Flurry.h */, - 2F04D1897D522410184CBD2FE61F25CE /* FlurryCCPA.h */, - A2218DF6F865C7AEA9B7FF95A10D2C24 /* FlurryConsent.h */, - 91659F87DE3BFB23EBFD9576F935C516 /* FlurryEmpty.m */, - 6D6CA0ADF47E159E535591F264CF7DF9 /* FlurrySessionBuilder.h */, - B352CA9AE771483D6DCD6094DC716703 /* Frameworks */, - ); - name = FlurrySDK; - sourceTree = ""; - }; - 52FD9A7761263FE07FBC6FE3B8D088AD /* Support Files */ = { - isa = PBXGroup; - children = ( - 27BBB2E1C1CAC54C54B691B1F6447044 /* ActionSheetPicker-3.0.modulemap */, - 97FE66A315C3385D6124402FADDC8456 /* ActionSheetPicker-3.0.xcconfig */, - E0D9E2865A7A4E865A87820793058142 /* ActionSheetPicker-3.0-dummy.m */, - 3B70D2C57F85FA64D9055B06AB19927C /* ActionSheetPicker-3.0-Info.plist */, - 7B89CC9D29C1014994C8CA1E80689F6B /* ActionSheetPicker-3.0-prefix.pch */, - E65985C8E7E90A6C8AE5F7E07C79E582 /* ActionSheetPicker-3.0-umbrella.h */, + 60057F1E53F3C5882D8585CB91E6E880 /* ActionSheetPicker-3.0.modulemap */, + 71B3AA573C58B683A42288B2CFBF3435 /* ActionSheetPicker-3.0.xcconfig */, + 4C881AB522540518C039D9187ACC4501 /* ActionSheetPicker-3.0-dummy.m */, + 0F604B0678930218A4EECC573292D367 /* ActionSheetPicker-3.0-Info.plist */, + BA634821C2F68ECAC9F7915118E81FF7 /* ActionSheetPicker-3.0-prefix.pch */, + 85C4D24F9DF189DBF6472637641C2853 /* ActionSheetPicker-3.0-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/ActionSheetPicker-3.0"; sourceTree = ""; }; - 5B19AF749A0F99C554D9F00F255EA123 /* Resources */ = { + 1396B5526DD5F696678F51629B841C63 /* Frameworks */ = { isa = PBXGroup; children = ( - 00F0C7E9A83E8D98832B67FCED7ECF2C /* FacebookSDKStrings.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 7890BBCD0FF19C3B34BA38665C7B9A17 /* Core */ = { - isa = PBXGroup; - children = ( - 85EECD5B85C6E9135911358E0AFD0F93 /* Frameworks */, - ); - name = Core; - sourceTree = ""; - }; - 85EECD5B85C6E9135911358E0AFD0F93 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 335E1E3B8E979C322CF57319B481C12A /* Pushwoosh.framework */, + A9353FA8088AEF82EE943249135BF463 /* Pushwoosh.framework */, ); name = Frameworks; sourceTree = ""; }; - 871DA88B32791F6235AF388B9B4FDA37 /* Support Files */ = { + 279D16B8E9D107440BC8242700B5EC22 /* Resources */ = { isa = PBXGroup; children = ( - 7F0061756930C01C16768B3E51AF359C /* Bolts.modulemap */, - DB46E6F15A079EB2C04E48726BFB3C25 /* Bolts.xcconfig */, - E5AF7940DA259AA032FB4924B1C8E28E /* Bolts-dummy.m */, - E9A9611A13033A607EF2F4C0366B0FB9 /* Bolts-Info.plist */, - ED04C9F37C2776EC3BA2AF1136B22CEB /* Bolts-prefix.pch */, - 39C23125074272BAF2E843D769ACD19F /* Bolts-umbrella.h */, + 766C7AB6ADEE7A78360F8C74D2ABFEEF /* MPAdapters.plist */, + 10FCBBC01CBF0F703B42FBDD924AE656 /* MPCloseBtn.png */, + C800DFCE2A0755D0B5BD4A848C78EF7D /* MPCloseBtn@2x.png */, + F7E74158695DEDCDAACDBCB95DA0D3BA /* MPCloseBtn@3x.png */, + 979B50AEC8217737F6E5DD60E00AD581 /* MPCloseButtonX.png */, + 7BE9F167C00AF094C327278436273B31 /* MPCloseButtonX@2x.png */, + E480E0ACD2323B6A2EDD1F1865F6F9DE /* MPCloseButtonX@3x.png */, + BC10EE88659EF168B77BABCE7022C519 /* MPDAAIcon.png */, + FFECA745E4E127C05F5043F8A435FACC /* MPDAAIcon@2x.png */, + 8DF5666FA0A3694AE64B515DAAFC67C3 /* MPDAAIcon@3x.png */, + 204F39D6D9A79DD3781AFD897AB66B13 /* MPMutedBtn.png */, + 3CD8E4BCB08D9F706EC3286247908C22 /* MPMutedBtn@2x.png */, + 66972B12227B9E93D7FAC0A8CD8356D5 /* MPMutedBtn@3x.png */, + 516DF1E6D460CD202A1FA8A8EEB1BEA3 /* MPPlayBtn.png */, + F5F7BCD7BFC75F107394E70B1C7E158A /* MPPlayBtn@2x.png */, + E4C4E32AB70900964EF850E599515ADD /* MPPlayBtn@3x.png */, + 2CD349746059543981564E6476E34219 /* MPUnmutedBtn.png */, + D4D992CA6571C5391FFA64032BCA6243 /* MPUnmutedBtn@2x.png */, + 96C7851143C7610980D5F2B2CC39322A /* MPUnmutedBtn@3x.png */, + 8FB4DA2DBE06E342ED54F4DF4F7890FB /* MRAID.bundle */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + name = Resources; sourceTree = ""; }; - 963283AC58D03237120F023CF78FD7FB /* Products */ = { + 313AD1F569DEE7CF8BE94CA1C0246778 /* Login */ = { + isa = PBXGroup; + children = ( + 08CB21C2F142AC6C4728EE1235EAF23E /* _FBSDKLoginRecoveryAttempter.h */, + C892A98B14CEBE998FB1D05EEEAAAF8C /* _FBSDKLoginRecoveryAttempter.m */, + C4966589A48FFD501A4F3DF5F3B78D6C /* FBSDKDeviceLoginCodeInfo.h */, + DC0ED7C29ABEB9D14E781BB76E6936EA /* FBSDKDeviceLoginCodeInfo.m */, + 4772559B8BC236FB472959F58091FC02 /* FBSDKDeviceLoginCodeInfo+Internal.h */, + DB2F2CB13781974D8A3D698D7089D6D7 /* FBSDKDeviceLoginManager.h */, + 25FD6796ABE6D61E80D06FA5F199C16D /* FBSDKDeviceLoginManager.m */, + F1CD286CFEE14490287189714F6D2E09 /* FBSDKDeviceLoginManagerResult.h */, + 0C6E0CC392C130EF3E476559AC967E76 /* FBSDKDeviceLoginManagerResult.m */, + BEC10D6C2ACE52A5E9223BC72F8E312D /* FBSDKDeviceLoginManagerResult+Internal.h */, + 885C55F37B4DBA54FF61997580345EB9 /* FBSDKLoginButton.h */, + 3DFE1C007297070AE92A8FB89AA7D038 /* FBSDKLoginButton.m */, + 11B4FF3EEEDCC6FA46BE21124B0B0F77 /* FBSDKLoginCompletion.h */, + 38376D3B82C716A08B008B8F11A93C8C /* FBSDKLoginCompletion.m */, + 478AAD31B36C8B42A40AD2B42DE6F451 /* FBSDKLoginCompletion+Internal.h */, + 157ACB16A8CE19A04BA17469AF29C307 /* FBSDKLoginConstants.h */, + C6AEE6B0E494E78FBA2C2173B19A1213 /* FBSDKLoginConstants.m */, + CE4FED88BE35D1B2E13FD57E2967329E /* FBSDKLoginError.h */, + DB30C55E31E06B3A699CEB1FD5E79F34 /* FBSDKLoginError.m */, + E24598D1166C6CB4DA92BD9814FD41A6 /* FBSDKLoginKit.h */, + 24A6FE9015B589E5DA446821CFB88039 /* FBSDKLoginKit+Internal.h */, + FBFD6477C3BF891597A3C5A1FCBF2B2B /* FBSDKLoginManager.h */, + 59C7897821E3E63040B9EE7D6C762F8E /* FBSDKLoginManager.m */, + A4DC0070F0CF1A8F2644FB9247EF0FDF /* FBSDKLoginManager+Internal.h */, + FDD77AA074009DF6C650D28555AF080A /* FBSDKLoginManagerLogger.h */, + 9E0D62C64D687B3945D353745E944929 /* FBSDKLoginManagerLogger.m */, + 04C9CD6740293544F80A69E6BCEDD8FF /* FBSDKLoginManagerLoginResult.h */, + 52298C7973616671B3B0DC5A5E8EEB07 /* FBSDKLoginManagerLoginResult.m */, + 71F3F179701FC208A10BCE26FC48F71F /* FBSDKLoginManagerLoginResult+Internal.h */, + 4710B010F3CBE25B1A77094DC1255A9B /* FBSDKLoginTooltipView.h */, + 977DAB394A071F49D80E9B8ED6456EFB /* FBSDKLoginTooltipView.m */, + D2C9CBCDE0C9624781FD87969E7635CD /* FBSDKLoginUtility.h */, + 9D17311881EA9B1DE63B181377E72FEE /* FBSDKLoginUtility.m */, + 432C4A305CF5EBCFA2581B78D5EE0334 /* FBSDKTooltipView.h */, + 341F752C4D61196520BD487E733807DF /* FBSDKTooltipView.m */, + ); + name = Login; + sourceTree = ""; + }; + 387BC9DD1B5FA96854377739D64EDD2E /* Core */ = { + isa = PBXGroup; + children = ( + 55571D176840130F668ACD8891B32470 /* _FBSDKTemporaryErrorRecoveryAttempter.h */, + 27C68760CED9FB9C7AFEB3506818E770 /* _FBSDKTemporaryErrorRecoveryAttempter.m */, + 0A91C686A247DF479D95444A3B415693 /* FBSDKAccessToken.h */, + 73E6C17FBC6638D3A542A66A1AD6630F /* FBSDKAccessToken.m */, + 44E0A21EC0F4A731E9444C12ED0E22A2 /* FBSDKAccessTokenCache.h */, + 06AC4DC227D4B1E16D53F079EDDAEA8C /* FBSDKAccessTokenCache.m */, + CD6D5262411D519075E943C29EFAD527 /* FBSDKAccessTokenCaching.h */, + 2A4CA1A090D8369F2579AEA5FC6BAE00 /* FBSDKAccessTokenExpirer.h */, + DA7B4355BFD9D18ADC15C7646FC9E971 /* FBSDKAccessTokenExpirer.m */, + E68D0E0DE2AFD94D3318C95D0284F2E4 /* FBSDKAddressFilterManager.h */, + 830DABC44391100D3241316B54764DB5 /* FBSDKAddressFilterManager.m */, + C4DF948613A7E7DA7FEF22041BF1359B /* FBSDKAddressInferencer.h */, + 517496033F1AE6363503BEC662D156CF /* FBSDKAddressInferencer.mm */, + 6A0AB4E98450DECED57A49497A3A21A4 /* FBSDKAppEvents.h */, + 09994FB7A2D472E4F66B87D155A6D13A /* FBSDKAppEvents.m */, + 2709B1517AD1F1F70C92FC96DD46D24E /* FBSDKAppEvents+Internal.h */, + E4FD2174FAF8D0EE2345C15BA850205D /* FBSDKAppEventsDeviceInfo.h */, + 4FFDAA6DE15B8D7E990C8F0D00237CFF /* FBSDKAppEventsDeviceInfo.m */, + 2D739482B09B77F68181E9AF62811FF5 /* FBSDKAppEventsState.h */, + 7799C1A9ED6ACAEB8C73CFC969D35455 /* FBSDKAppEventsState.m */, + 4BFA38C6736A595044835137D4BFDC44 /* FBSDKAppEventsStateManager.h */, + 40DECFC95AD82A9905D38F840E076FF5 /* FBSDKAppEventsStateManager.m */, + 69E40514592BF1243FDA76902C6036C6 /* FBSDKAppEventsUtility.h */, + DBC013846E603B0DCB2154335EF1F42C /* FBSDKAppEventsUtility.m */, + 77C8E753C800BDC2C268D480049B3DD8 /* FBSDKApplicationDelegate.h */, + 34D49F6A182D59FD2B24C35D6491EB91 /* FBSDKApplicationDelegate.m */, + 27084E353C63925CEF2CF423422FD215 /* FBSDKApplicationDelegate+Internal.h */, + DB4185FA59433F9E87FD3186B135E28C /* FBSDKApplicationObserving.h */, + C8A3671780D68F87EE6E971844063516 /* FBSDKAppLink.h */, + B6843C284E7B1E4C4C3AAC88BF5BF9F9 /* FBSDKAppLink.m */, + 75B6D835E7193BE0204A3D61202D407E /* FBSDKAppLink_Internal.h */, + FDE58727CA3C31A48E01CA8743169BB9 /* FBSDKAppLinkNavigation.h */, + E136CA309141E83738CB0FD54883FCED /* FBSDKAppLinkNavigation.m */, + B93F614C8A2BB81E71CE9B623ACCE8CB /* FBSDKAppLinkResolver.h */, + B77BA45C413A429B7705FF20DB79B2B4 /* FBSDKAppLinkResolver.m */, + 4940329881BD0CFFD0A0365C014D5A73 /* FBSDKAppLinkResolving.h */, + B9A00D309DC505BB435B02E80959EF81 /* FBSDKAppLinkReturnToRefererController.h */, + 85143B180A71B34C5BF60C3DF7B4C1EE /* FBSDKAppLinkReturnToRefererController.m */, + 09327E6DDF5E29BB25D7AE9379B0712E /* FBSDKAppLinkReturnToRefererView.h */, + 4DDA4F6DDADC4B7C7845788A03C85A74 /* FBSDKAppLinkReturnToRefererView.m */, + 8BA6846AAECE0D64B6E28A5F615BFECE /* FBSDKAppLinkReturnToRefererView_Internal.h */, + FCD4C2BC86A3172104046B8791BF8406 /* FBSDKAppLinkTarget.h */, + FD7B4B29134B4CC7098C0FA704B7E9A2 /* FBSDKAppLinkTarget.m */, + 5651959E78F907C6ACF04A599552DAC3 /* FBSDKAppLinkUtility.h */, + 7A24C0C508378034E4E1371124142472 /* FBSDKAppLinkUtility.m */, + 116DC3DD704501DA3ECEA62915917A41 /* FBSDKAudioResourceLoader.h */, + D4B6A28BD47B735DD6580C6B750F7443 /* FBSDKAudioResourceLoader.m */, + 04461A55626848FDECB4D6696F42E123 /* FBSDKBase64.h */, + EE0C49FA8A473D1D6E3833449EA2FA1A /* FBSDKBase64.m */, + ACDCEC9567F00406EC33605D23B2F518 /* FBSDKBridgeAPI.h */, + 48910A90014E4A24C35BED04DFFB6183 /* FBSDKBridgeAPI.m */, + 1FF465F0A77A164FE8153BCB13B1ED10 /* FBSDKBridgeAPIProtocol.h */, + B75765AEAA88DF3D3EDD4646151914C2 /* FBSDKBridgeAPIProtocolNativeV1.h */, + CE636FA26A28194374E285CACD418EAD /* FBSDKBridgeAPIProtocolNativeV1.m */, + 48D19D7EF75807769915FD51960E3F94 /* FBSDKBridgeAPIProtocolType.h */, + CC405636295D1730C58C8F77F9DAA3BA /* FBSDKBridgeAPIProtocolWebV1.h */, + 8D61BD893A557F7BFFA3B588C8B2F408 /* FBSDKBridgeAPIProtocolWebV1.m */, + 27CADAC6F188F441552DD8BD377A5459 /* FBSDKBridgeAPIProtocolWebV2.h */, + 4D6243759D9403FA1910870052B4B7DC /* FBSDKBridgeAPIProtocolWebV2.m */, + CC4273B6C94CAA829E7BF24BE2422D68 /* FBSDKBridgeAPIRequest.h */, + 488E86747EA40209D2EC0C54B7CA8462 /* FBSDKBridgeAPIRequest.m */, + B498BDA639775841942DB5D749ADDBE6 /* FBSDKBridgeAPIRequest+Private.h */, + 212321E5085DBA7FC62C102C7C23E603 /* FBSDKBridgeAPIResponse.h */, + 62065542E1A98929CB1559E35BB6C3D4 /* FBSDKBridgeAPIResponse.m */, + 655CD104304A33F2F065EDFF913405E2 /* FBSDKButton.h */, + 99FA665EB2BACDB25146E5D87EBDE81A /* FBSDKButton.m */, + CBA48A2C64DD48079ECC6F8CD55E8135 /* FBSDKButton+Subclass.h */, + 5349F6B96CA8A47E46EA38ECF9D2E3E4 /* FBSDKCloseIcon.h */, + 09001803CFE588FF690919A09DD61453 /* FBSDKCloseIcon.m */, + A2F3802F629F41A555BBFA1B51D8344E /* FBSDKCodelessIndexer.h */, + 550EA76E460E0B22EBEAC1020F96CB17 /* FBSDKCodelessIndexer.m */, + 297EC840D807B17A80C220D7D7C6AFAE /* FBSDKCodelessParameterComponent.h */, + 1E7FCB031A7E64AC0598C6DC265A9AEE /* FBSDKCodelessParameterComponent.m */, + B15EE2487DEF00CC1A27657067A78219 /* FBSDKCodelessPathComponent.h */, + 348C45134BA2B908CBBD2CABB7180211 /* FBSDKCodelessPathComponent.m */, + C76FD70E0AF203EBF7AD305BF2556352 /* FBSDKColor.h */, + 9C83E26609C9CE75FB7857E46CD23457 /* FBSDKColor.m */, + A1CF0B8BA0D1CC8547941CF9F9AFF114 /* FBSDKConstants.h */, + 124BA3C96D0745867F01B4573AB4D069 /* FBSDKConstants.m */, + 225106CA0823A9905BE0CD0368475E58 /* FBSDKContainerViewController.h */, + 6C3951616A4E1DA7BF2D4258FA666E94 /* FBSDKContainerViewController.m */, + 7B2F087C555FCCB0CC1355C58B0547A5 /* FBSDKCopying.h */, + 1D085AA2C86D826CF02F11DAEBF133AC /* FBSDKCoreKit.h */, + 16A15C5653784E24AD12AE6063E26117 /* FBSDKCoreKit+Internal.h */, + 337C9E4DD15533302A7D43A6C3502241 /* FBSDKCrashObserver.h */, + 5ED68CA23FE476261775E003BCCFC40E /* FBSDKCrashObserver.m */, + 655FBAF72D7D2F65781B5838F489B194 /* FBSDKCrashShield.h */, + B453A37DA13C77AD2A29EE340EB6D036 /* FBSDKCrashShield.m */, + 05E2C3DFD00A7C22FD11778C080669C3 /* FBSDKCrypto.h */, + 5C0D2F85C2695BD25D3ACA85C9D42DA9 /* FBSDKCrypto.m */, + 12E0C92175BBDB3B2501511E55FD286A /* FBSDKDeviceRequestsHelper.h */, + BACFE3B37B6AF8B884BDBC75AE53775F /* FBSDKDeviceRequestsHelper.m */, + 6F32F9F1AE611D56483A036F07FC3062 /* FBSDKDialogConfiguration.h */, + 4EEB0A8DC7879A09C054FB7C39872C17 /* FBSDKDialogConfiguration.m */, + 6A9E92C057DD12C14237347F2F3E4B2F /* FBSDKDynamicFrameworkLoader.h */, + 9F42BE1CF7148411F475B7A893EFCF86 /* FBSDKDynamicFrameworkLoader.m */, + A17C7D33DE6709A50ECBE421B8E0FF2D /* FBSDKError.h */, + 08A8536195C3B8A8649503B745E1E34C /* FBSDKError.m */, + 77C60B0313CB87B37192DF7999529B84 /* FBSDKErrorConfiguration.h */, + 47233AF5A5CFF0E9E66C4B08D193CDA8 /* FBSDKErrorConfiguration.m */, + F57146BE200145AE7D9E5E27B3F67894 /* FBSDKErrorRecoveryAttempter.h */, + 1D60697DE18AD8DAB499A99EA1064421 /* FBSDKErrorRecoveryAttempter.m */, + 8AE3B4A15ADE57DA5F1A66A470758F91 /* FBSDKErrorRecoveryConfiguration.h */, + 4F8723F0095B9EAF124C898CA7D78807 /* FBSDKErrorRecoveryConfiguration.m */, + CC10BD630CE28B27C1C56ED23E93D314 /* FBSDKErrorReport.h */, + A9B108711A506C8430D1FCEC9937BFE5 /* FBSDKErrorReport.m */, + D280B520676BCBE4BE0C4A73EBFCF93D /* FBSDKEventBinding.h */, + B51DF54A4CF41963C2BDDC213F0DF09F /* FBSDKEventBinding.m */, + F3DB6C27D533C8F222BDA7B129D50C53 /* FBSDKEventBindingManager.h */, + 169132F7253965F74EB91AFF85485189 /* FBSDKEventBindingManager.m */, + 6D71457BFF18D2FF20E3E37C46ED7F2F /* FBSDKEventDeactivationManager.h */, + F5E7861B5C8E6B1F8F0920E64AE7C7EE /* FBSDKEventDeactivationManager.m */, + 8885CF15F99D2825B0DED571D3FF8058 /* FBSDKEventInferencer.h */, + 8705D61898B476FDCAC46A3E4C621678 /* FBSDKEventInferencer.mm */, + 4CFF120C55B163F4C4D832E468153540 /* FBSDKFeatureExtractor.h */, + 8264E457360906E19278556842BA058B /* FBSDKFeatureExtractor.m */, + E012BF733FEA4F89BC9D80EA6EAE6CF3 /* FBSDKFeatureManager.h */, + B3C187D6D907065310867EFDA7FDD591 /* FBSDKFeatureManager.m */, + C3D8A5C8250A70C5C791AFF608EE23F5 /* FBSDKGateKeeperManager.h */, + D1CD01692208ADC8B5D34E8625D1E884 /* FBSDKGateKeeperManager.m */, + 24171AA4A463C05AD364E79706BAC07B /* FBSDKGraphErrorRecoveryProcessor.h */, + F7139F7CC8146FF584A83ADDCFC010B7 /* FBSDKGraphErrorRecoveryProcessor.m */, + FC9FA0418B7745B5D8DD98AD4F4E56C1 /* FBSDKGraphRequest.h */, + B5B160EEFB68C1546BE610C5E9A0935D /* FBSDKGraphRequest.m */, + 752F3FABF4AC08320F3F34A1BE2ACB14 /* FBSDKGraphRequest+Internal.h */, + 51D17A0AE72C7967EC2970CC6D2BECA4 /* FBSDKGraphRequestBody.h */, + 50915A5B2B745F9478733D9821BF2073 /* FBSDKGraphRequestBody.m */, + F7C0C4301B6F62E5F3CE066AFCBB6076 /* FBSDKGraphRequestConnection.h */, + 26A9A4E86612A59822F002709138C744 /* FBSDKGraphRequestConnection.m */, + 95CE822433892D87233CBA161A5FA85C /* FBSDKGraphRequestConnection+Internal.h */, + F0028F18FB4507596E9D39B121F1BBFE /* FBSDKGraphRequestDataAttachment.h */, + 3A452FF8A270BA1ED5E94B88CA860C37 /* FBSDKGraphRequestDataAttachment.m */, + 1D7B4A6B241CA9980EB171E71C7C41E1 /* FBSDKGraphRequestMetadata.h */, + 3CD9742EDB84EBCD2D6AD5BF23B832E7 /* FBSDKGraphRequestMetadata.m */, + 26AD489264F04D10598787F03F08C7E9 /* FBSDKGraphRequestPiggybackManager.h */, + B71441BCD93B2028FAE0D7909D25533A /* FBSDKGraphRequestPiggybackManager.m */, + 02696A1E9673DABEF9C32A2FC7DDAB33 /* FBSDKHybridAppEventsScriptMessageHandler.h */, + 160708D4D61D75C8D96CFB2C7277FFFE /* FBSDKHybridAppEventsScriptMessageHandler.m */, + 345C7F3661C9350C77DBE330548F9C74 /* FBSDKIcon.h */, + EFCD7A109313FBA2F4E70F4B28522C04 /* FBSDKIcon.m */, + 692D67CBA4BB1964A70203E54B586986 /* FBSDKImageDownloader.h */, + C9619FF7B8C6B9506112632C4268CF46 /* FBSDKImageDownloader.m */, + CC4A944132D641A792C0FCF3E920A185 /* FBSDKInstrumentManager.h */, + 53F0B0735D8A3242B97FF7CEB9C29047 /* FBSDKInstrumentManager.m */, + 03F4D32A7AD01E7073A7A9161D5F1A0E /* FBSDKInternalUtility.h */, + 323FCD99E8787D4E0D81E6B1F3118469 /* FBSDKInternalUtility.m */, + 34CA781CF32FA494FBDA5999BF916C92 /* FBSDKKeychainStore.h */, + 1330CDEA75AC8171E33A5BEA88FA6E85 /* FBSDKKeychainStore.m */, + 23677EE99356D5BA21D4ED3B199730BE /* FBSDKKeychainStoreViaBundleID.h */, + 41C3B8D760B02AE7B31A3F45C538B047 /* FBSDKKeychainStoreViaBundleID.m */, + A465A3B2B6F28AA4A989CF1B8CF1F09B /* FBSDKLogger.h */, + A7E4B2EB2EB3911221EE5B823DEB0718 /* FBSDKLogger.m */, + 4A6F9603EDB276B5C7641C82E272DA9D /* FBSDKLogo.h */, + 6F529CCEB89009735EBC5E0848B8C02A /* FBSDKLogo.m */, + 8E538A0968AC5CDC1137A8A66B1DAA7E /* FBSDKMaleSilhouetteIcon.h */, + 2DAED3B103AA265A9BC13DEAF4BAF84F /* FBSDKMaleSilhouetteIcon.m */, + 55336FC4EDB257F3F95601891C41CBCA /* FBSDKMath.h */, + 0552BCC8940279F8E0D84987BF1209C3 /* FBSDKMath.m */, + 0E1B8A562A11132560B57A87A901AFE6 /* FBSDKMeasurementEvent.h */, + 4A24D5F33E4AE0D558DCE24899D66B2B /* FBSDKMeasurementEvent.m */, + 51E94E817640FE5976D2180005058D01 /* FBSDKMeasurementEvent_Internal.h */, + 81E3784BFB1E4CD98BEC2FA444C5EC96 /* FBSDKMeasurementEventListener.h */, + EA65880AF47FCC8B0BC6E2E129C16546 /* FBSDKMeasurementEventListener.m */, + C489353961A5A10CAB96702867E8ABDF /* FBSDKMetadataIndexer.h */, + 329B67D0590B3383A55A0805548DB7EC /* FBSDKMetadataIndexer.m */, + 5631CF77F9DD01A8FA3A0BBD4BC00341 /* FBSDKModelManager.h */, + 657CDC49DB5FE547437DAC287F0E4897 /* FBSDKModelManager.m */, + F3387611B5A713CCF468249DF4AF8ED9 /* FBSDKModelRuntime.hpp */, + 8E81BA723F41409BE9A16A388DB565B0 /* FBSDKModelUtility.h */, + 6C68E169BD7D0C6446FA7DF0CBE1A5F3 /* FBSDKModelUtility.m */, + B04B3681D9ED0D6FE3ED94F48426B75B /* FBSDKMonotonicTime.h */, + 852021629653B523F49CB8F30BB1309C /* FBSDKMonotonicTime.m */, + EF7738EEB176B4C37E08A1CFA535CAEE /* FBSDKMutableCopying.h */, + C1F551602F580F748AC4552678C67FF9 /* FBSDKPaymentObserver.h */, + 287DF17A69CEC392664192AB510E13AC /* FBSDKPaymentObserver.m */, + FA2385F50008B69FA122D58F91A5B037 /* FBSDKProfile.h */, + 636A68168EC4733D9F61624E6757FA76 /* FBSDKProfile.m */, + 1B52F6C34A843E42FD64F0ED172D75F7 /* FBSDKProfile+Internal.h */, + E9AB7E5055801BA24E9DFEE6961E7BAA /* FBSDKProfilePictureView.h */, + 71A06BB30009F32E400270D235147D25 /* FBSDKProfilePictureView.m */, + D54DCF433B650978B2BE021712703EFE /* FBSDKRestrictiveDataFilterManager.h */, + 8165EC86DD47D40A6EDC50FFD343565D /* FBSDKRestrictiveDataFilterManager.m */, + 3CA98E198A4B97875050B3AD61B4EBC1 /* FBSDKServerConfiguration.h */, + D32299C749DF7BFF728B728301B3A5D7 /* FBSDKServerConfiguration.m */, + 110EA9182671792B69AEC591C4944AD0 /* FBSDKServerConfiguration+Internal.h */, + E35CB065E29FB2533BA836083DB38C63 /* FBSDKServerConfigurationManager.h */, + 2E0F30DE6BDF6213E262657879DF53E0 /* FBSDKServerConfigurationManager.m */, + 3AD91B7BAE93A491DAAF421184A9686C /* FBSDKServerConfigurationManager+Internal.h */, + 68322907696B557517A8AE7622CCEE74 /* FBSDKSettings.h */, + 2A06DD6B48F22EB61D9E3CF45032607E /* FBSDKSettings.m */, + 8CEC8AEFA9998D1A3C244EF87DB8033F /* FBSDKSettings+Internal.h */, + D8513A607D2B16709BB101D5508D44DA /* FBSDKStandaloneModel.hpp */, + 6A91CE36DBA01B4CAB82DD92E949DCF9 /* FBSDKSuggestedEventsIndexer.h */, + 1A00E20D5DE70A3808DF6711419FC460 /* FBSDKSuggestedEventsIndexer.m */, + BC933DCA1AC52030C0D6FE0F47134977 /* FBSDKSwizzler.h */, + 25D82AD06CB92CB3D706398BD0C20FA7 /* FBSDKSwizzler.m */, + ADB6B856A08A66A9E10FCB3499EC08DB /* FBSDKTestUsersManager.h */, + 501C8A534911DE7EE7D1963C96491CCD /* FBSDKTestUsersManager.m */, + 3CB91A037064C3C44641BC84A4B262B4 /* FBSDKTimeSpentData.h */, + AF435A751586736FA3164D9BCB1D4218 /* FBSDKTimeSpentData.m */, + 378DB89FEFF9BBD1FB03532BD5A36DB5 /* FBSDKTriStateBOOL.h */, + 3BDD3551ECF58D3B8B435D6F1528D9A3 /* FBSDKTriStateBOOL.m */, + 57D38D21E25BDF933DF115562F2A6E4B /* FBSDKUIUtility.h */, + 01C2A25DE0F502E685105850791B7150 /* FBSDKURL.h */, + E3B363271724A81ABA270C2BB7B000BD /* FBSDKURL.m */, + 45B56CD9DF3A415949C13BCE153B3CAB /* FBSDKURL_Internal.h */, + 68428AFCDE9D2DEB6121FF80F9B35883 /* FBSDKURLOpening.h */, + 51A0B10803186F987DFD090783BDFB9B /* FBSDKUserDataStore.h */, + 6E6CEA7C7EF38700FEFC5CCF29FCE88F /* FBSDKUserDataStore.m */, + 7B50E3AE357D160D9341636DBEA54A11 /* FBSDKUtility.h */, + 1D96AE4748D7956BB0A1BE7C732E3EC4 /* FBSDKUtility.m */, + 61E5329550CA53F16B7CBB57C3F03C7A /* FBSDKViewHierarchy.h */, + 1E259E6E3D19C982AFA51B732ABF05BB /* FBSDKViewHierarchy.m */, + F72291810FE39CCB20903C582D447635 /* FBSDKViewHierarchyMacros.h */, + 3D96728A0ED9D25F0E2CC5A442582BD8 /* FBSDKViewImpressionTracker.h */, + B00D22BB5368D25419618D3B5AFBBEB2 /* FBSDKViewImpressionTracker.m */, + 6B51958FA5570084434E46FD5CEB51B4 /* FBSDKWebDialog.h */, + E8D327794FFA0E3A7AC54F981ABC5972 /* FBSDKWebDialog.m */, + C3C232FA77DF01FA491AAA8587CA19F6 /* FBSDKWebDialogView.h */, + 75430D08B578AC2FE620477A2F755B8E /* FBSDKWebDialogView.m */, + 7C643911D8D47E461771483B0A88E7B2 /* FBSDKWebViewAppLinkResolver.h */, + 8D06271E8C2B970012EE88EC976B4B8D /* FBSDKWebViewAppLinkResolver.m */, + 4389A928F20FBF5D3552A2027BBCF536 /* Resources */, + ); + name = Core; + sourceTree = ""; + }; + 4389A928F20FBF5D3552A2027BBCF536 /* Resources */ = { + isa = PBXGroup; + children = ( + BE4BA4E04D1FDEB4A08DAA37DB048A77 /* FacebookSDKStrings.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + 45F09F81E0E9E8003C76DCCF8BB158CC /* mopub-ios-sdk */ = { + isa = PBXGroup; + children = ( + E493227EEA0BDC9A3BA7B76F2C0361CC /* Avid */, + EBBAA216D2C485D3FE1479ACFDBF4352 /* Core */, + 5B3A94D82A26B70D16C31353B1D89F82 /* Moat */, + 609E0D187AD6B9781FD62DE279AF3354 /* Support Files */, + ); + name = "mopub-ios-sdk"; + path = "mopub-ios-sdk"; + sourceTree = ""; + }; + 4897F6C56C6AC332CDE214D893409A62 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7D5853D286F153705E5E2B9F9BAFB64E /* MPUBMoatMobileAppKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 48AE0286DA15879EBF8C5224BC883F6B /* FlurrySDK */ = { + isa = PBXGroup; + children = ( + CAB1577C028A7FE2A14418BB27C0E9FA /* Flurry.h */, + D5E4DCB8F35CB11F7F45FEE85551A6EC /* FlurryCCPA.h */, + D814186BBA59DF50A4A5DE72D6A4B403 /* FlurryConsent.h */, + A64353FF22F2A7500F0048D3A90E56A2 /* FlurryEmpty.m */, + EDCB994AC630ABC7B6EEBF4237250AFF /* FlurrySessionBuilder.h */, + 9BA14FA7946D261A7C10EC3506E212CC /* Frameworks */, + ); + name = FlurrySDK; + sourceTree = ""; + }; + 4DECFC59820750033DC721B2D820318F /* Frameworks */ = { + isa = PBXGroup; + children = ( + CE676C56F6267E7D53E3130433FACAE7 /* libAvid-mopub-3.6.1.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 578DDA435DA6B13DBE3185182E250EB3 /* FBAudienceNetwork */ = { + isa = PBXGroup; + children = ( + 93A8FB7AA6702DA48E67A4FCD7A0FA3A /* FBAdBridgeCommon.h */, + 29D3CD2CA186D9CF2788670F40E165F0 /* FBAdBridgeContainer.h */, + 7980A3F23898E63D4E15E249795A2FEA /* FBAdChoicesView.h */, + E72DA8F5954F2E02720E4015EC16EBFF /* FBAdDefines.h */, + 40258AE3299C2FDF973FA66BB5EE6F86 /* FBAdExtraHint.h */, + C856D39FC3FF26980255ECC9AB34F7E8 /* FBAdIconView.h */, + 6EA1FF1B14F4970D283FEBBB7038FD8B /* FBAdImage.h */, + CE0A5007C7A1AEAA096F238CD46C7459 /* FBAdOptionsView.h */, + BACC8A632A5B303A23152109968F1807 /* FBAdSettings.h */, + D7AB17C62BD95B90774AF31EDF156677 /* FBAdSettingsBridge.h */, + 8311F954EE61A955734B0BE2CFAFC905 /* FBAdSize.h */, + 2E54C0CF7D34B2AC7D2E17E72B4FCEDD /* FBAdUtilityBridge.h */, + 214FEE613211CC80815AB92F2F6FDB5A /* FBAdView.h */, + 08D5FE71FE5FED5E593AEAA995F24D9A /* FBAdViewBridge.h */, + 5EBF87C7C2616BA3B2EC24E5C7150338 /* FBAudienceNetwork.h */, + 823CC922454A052979AA32DC73D88742 /* FBAudienceNetworkAds.h */, + D690DE23C9B4BE38E51137CF9BD7918E /* FBInstreamAdView.h */, + 5E5800A8882F2703C2B38B7D8A9D7803 /* FBInterstitialAd.h */, + 5120B39C135FBFA3A903A9375E22AE37 /* FBInterstitialAdBridge.h */, + 19B00EDE77FF178F5018F1694C539749 /* FBMediaView.h */, + FF4A3FFC19B6BCDD1452BD9CC16C2B56 /* FBMediaViewVideoRenderer.h */, + F7D56E63FD3467A75A3B7407276D0440 /* FBNativeAd.h */, + 03265F667A478068951E2D60340F3636 /* FBNativeAdBase.h */, + 9B5C0292FC0F86D2D8268D38D3A0A5F3 /* FBNativeAdBaseView.h */, + 84432FE0B6790C7E1F6BAADD759711E4 /* FBNativeAdCollectionViewAdProvider.h */, + 9F42B4A9486145FB22DA881736A75C0D /* FBNativeAdCollectionViewCellProvider.h */, + BC31025A88BDCB9AE1CAE2BC265ADEBF /* FBNativeAdScrollView.h */, + 36C6921F388D2990D123575B95BB6CB2 /* FBNativeAdsManager.h */, + 9E68656159746FFDFD1A912AAEA97C01 /* FBNativeAdTableViewAdProvider.h */, + 11D4D469B335020513DEFF9E322D9BB6 /* FBNativeAdTableViewCellProvider.h */, + 80A4CF5615E247D7250F811CE10F9290 /* FBNativeAdView.h */, + EDF2A44401F9F9C50DC19E20635FE241 /* FBNativeAdViewAttributes.h */, + 20F91703DAB155BE3C89C419DCFF7C1B /* FBNativeBannerAd.h */, + F1C9BB72C1F0D2DD6BDD19DD00AA4A21 /* FBNativeBannerAdView.h */, + 8501F470C9E15C983C70C6A2284E6D19 /* FBRewardedVideoAd.h */, + 2558D72FA9705C461A89748653E8E17B /* FBRewardedVideoAdBridge.h */, + 8A49C2A87D07E0CC13F354F51B608CF2 /* UIView+FBNativeAdViewTag.h */, + 789C76EA0D3186F59F1F2325B7B38EEA /* Frameworks */, + BF617C9EE429B35FD196475D8FB6CCBB /* Support Files */, + ); + name = FBAudienceNetwork; + path = FBAudienceNetwork; + sourceTree = ""; + }; + 58639BB0D36462B2D084B77AF78AFF96 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 49E3236A8FC095E9EADF61185A094393 /* AppsFlyerLib.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 594C14B288C1AE4B72EB8923C92A2995 /* FBSDKLoginKit */ = { + isa = PBXGroup; + children = ( + 313AD1F569DEE7CF8BE94CA1C0246778 /* Login */, + C5F214292E0D57AD2C90D748AE9087FE /* Support Files */, + ); + name = FBSDKLoginKit; + path = FBSDKLoginKit; + sourceTree = ""; + }; + 5A614A5D9F9917FA6C4CB631A0D45813 /* Support Files */ = { + isa = PBXGroup; + children = ( + 7F71BDE1D326DE086E182FA69BF19265 /* Flurry-iOS-SDK.modulemap */, + ABB9CB11418E9C7719F6F86CB8FF0718 /* Flurry-iOS-SDK.xcconfig */, + 2552FDCD9818F7CD0B109D8EDB879B62 /* Flurry-iOS-SDK-dummy.m */, + 0BED1C9AC27D2B9F3F1459CA94C37334 /* Flurry-iOS-SDK-Info.plist */, + 91611B835F724D6451131A9E4FB1FC6F /* Flurry-iOS-SDK-prefix.pch */, + 1116050AE20859D0A7B220F9CD014B3A /* Flurry-iOS-SDK-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Flurry-iOS-SDK"; + sourceTree = ""; + }; + 5B3A94D82A26B70D16C31353B1D89F82 /* Moat */ = { + isa = PBXGroup; + children = ( + 777F01027D6974230DFE5AE5103EA09B /* MPViewabilityAdapterMoat.h */, + 603042150D80603D987E5D656BF626D7 /* MPViewabilityAdapterMoat.m */, + 4897F6C56C6AC332CDE214D893409A62 /* Frameworks */, + ); + name = Moat; + sourceTree = ""; + }; + 609E0D187AD6B9781FD62DE279AF3354 /* Support Files */ = { + isa = PBXGroup; + children = ( + 88E0DA233DB60D828CC0C627CC990BC2 /* mopub-ios-sdk.modulemap */, + 9D675BBB0EF7CD368D652F17E752443A /* mopub-ios-sdk.xcconfig */, + FF6E8C2F6E3D4E66751CE3CDAB12D830 /* mopub-ios-sdk-dummy.m */, + 55DBC70BE256804860A51F663B538B7B /* mopub-ios-sdk-Info.plist */, + E25F9C8696C2ED8BB8ADFAACE47EAF17 /* mopub-ios-sdk-prefix.pch */, + 915F9A8728AD7BBEDE3AF872546E2A97 /* mopub-ios-sdk-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/mopub-ios-sdk"; + sourceTree = ""; + }; + 641DE686AED1710FC708E039476C3FD1 /* Products */ = { isa = PBXGroup; children = ( D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker_3_0.framework */, - F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts.framework */, EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */, 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */, 40F694279899D5DE08A1D633DAFE496B /* Flurry_iOS_SDK.framework */, + 0A8924B6305C5116EA8035AE891818F6 /* MoPub.framework */, + 31C596999512C76A20CD0BAD735E6110 /* MoPub_FacebookAudienceNetwork_Adapters.framework */, A50D488397CF80FE035346303494968D /* Pods_MAPS_ME.framework */, ); name = Products; sourceTree = ""; }; - B352CA9AE771483D6DCD6094DC716703 /* Frameworks */ = { + 789C76EA0D3186F59F1F2325B7B38EEA /* Frameworks */ = { isa = PBXGroup; children = ( - 591EEF5B379133A5C03813212DF69178 /* libFlurry_10.1.0.a */, + B25F711F781BA7B3E7EB09D3077D1975 /* FBAudienceNetwork.framework */, ); name = Frameworks; sourceTree = ""; }; - B3E6107DCD2AF9D5D8FC521131D3EF68 /* Support Files */ = { + 7A4154FC7AAF00EF4823CD26D4B5062C /* Pushwoosh */ = { isa = PBXGroup; children = ( - B3E09070D83C63191C46E66A39279B51 /* FBSDKCoreKit.modulemap */, - EE15204756DE856378A2436E7AA3EC7A /* FBSDKCoreKit.xcconfig */, - B42175B4B133CEEF2E2910EF36C886F8 /* FBSDKCoreKit-dummy.m */, - 5A6D3957F9E05AF30E20B88A6D7E2CD7 /* FBSDKCoreKit-Info.plist */, - 86F6655942C8C47CCE5B4D3A203452B9 /* FBSDKCoreKit-prefix.pch */, - 739BD4005CB6CCD9A50FF44CDFB4EC27 /* FBSDKCoreKit-umbrella.h */, + CCE9BA5A78AE6FB0733F42C422F8B67A /* Core */, + D57351C0C2855BB3F3F5D8E85A725FEA /* Support Files */, + ); + name = Pushwoosh; + path = Pushwoosh; + sourceTree = ""; + }; + 870AA25D619FC0951E6F4B3EAE46C560 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1571EB3A7237BE55F3FC58C53245EC1D /* FBSDKCoreKit.modulemap */, + A8A80C4FB218C8B86BA0230B1CC613BC /* FBSDKCoreKit.xcconfig */, + 8BF241FBFDC4842766A0E1FF113AEA81 /* FBSDKCoreKit-dummy.m */, + 61AC2A061D672F4B60DE1F5A4BE57D66 /* FBSDKCoreKit-Info.plist */, + 051FBC862DF1CD5C4A05AA5ACA57927B /* FBSDKCoreKit-prefix.pch */, + 40CF1452EBFB5FD75ECADA5BBE5CD2DF /* FBSDKCoreKit-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/FBSDKCoreKit"; sourceTree = ""; }; + 9BA14FA7946D261A7C10EC3506E212CC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 63D627033DAECD391E890FBAF385FF58 /* libFlurry_10.1.0.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + AFF51D439AE7324BA4078057E9D36B4A /* ActionSheetPicker-3.0 */ = { + isa = PBXGroup; + children = ( + 4C1DFC7D31D0E0612492469AD5BE28F7 /* AbstractActionSheetPicker.h */, + C0F9BFA0A7E47A8B7BE3952A7A47D53D /* AbstractActionSheetPicker.m */, + 79559A0B662BA3EEABDF38DFD41DAEC8 /* ActionSheetCustomPicker.h */, + 5C31FC567866474470186C507211ED48 /* ActionSheetCustomPicker.m */, + 3ABF810893517F2EEEE149E0C4DFDD6C /* ActionSheetCustomPickerDelegate.h */, + 24611B99B0F13EBDCFB559BD33E15EE2 /* ActionSheetDatePicker.h */, + 2E16E946A2F3EF0A54043FF4C2FCBBC8 /* ActionSheetDatePicker.m */, + 933E4A9A7F1C4B673710AA9F07CFC98B /* ActionSheetDistancePicker.h */, + 5444100EB77E645F8C46E64D19B38BC0 /* ActionSheetDistancePicker.m */, + DDF70F7C1F95C149D7ABD6C402EA2E14 /* ActionSheetLocalePicker.h */, + 57E4BA6C3815CEDA62CAB177D7EEAB4A /* ActionSheetLocalePicker.m */, + 579C168BFEA5C0805652CA990022B175 /* ActionSheetMultipleStringPicker.h */, + C88762CBD79A679AFE437D3F66FF6F8D /* ActionSheetMultipleStringPicker.m */, + 66F1E9E6014D2076196090416F8AFFA5 /* ActionSheetPicker.h */, + 7EF6EE8844E339C10613416C512B82E5 /* ActionSheetStringPicker.h */, + 1157A8F98AC3F381302EEC958F1CF015 /* ActionSheetStringPicker.m */, + F0D16ABEAA9C6C177449A761B24F5AE3 /* DistancePickerView.h */, + C5BF3A43B2EA317162AC3CCB54B5BD6E /* DistancePickerView.m */, + 518F1E4B1B01832842CA6D695DE46F61 /* SWActionSheet.h */, + A3C78A4890EA536616F9144BD86C8CBC /* SWActionSheet.m */, + 114B487B6CEB74A5B294C6B1B9D5D349 /* Support Files */, + ); + name = "ActionSheetPicker-3.0"; + path = "ActionSheetPicker-3.0"; + sourceTree = ""; + }; + B3194280112DAE6F3876D4ADC646B920 /* Support Files */ = { + isa = PBXGroup; + children = ( + 5278627B37FE7CD987E6CDC75B9741F9 /* MoPub-FacebookAudienceNetwork-Adapters.modulemap */, + 77A8043BA8B05BE74858231DA2787C3C /* MoPub-FacebookAudienceNetwork-Adapters.xcconfig */, + AB53EE7A8380257496157BD03C9AAA02 /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m */, + AD37EA8099DAE3C25DFFCA74BE7A15D5 /* MoPub-FacebookAudienceNetwork-Adapters-Info.plist */, + D005096B183635B0BDE393E54DE3FAB4 /* MoPub-FacebookAudienceNetwork-Adapters-prefix.pch */, + 2DD71A7861ADDCDA83F5979BFBC8BFBE /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/MoPub-FacebookAudienceNetwork-Adapters"; + sourceTree = ""; + }; + B62BD0174B03D781F18EBE821CB77E91 /* Pods */ = { + isa = PBXGroup; + children = ( + AFF51D439AE7324BA4078057E9D36B4A /* ActionSheetPicker-3.0 */, + 0D1399AA45170A7519F1619CB8B984A3 /* AppsFlyerFramework */, + 578DDA435DA6B13DBE3185182E250EB3 /* FBAudienceNetwork */, + D3DB99362B6C5E09FA4294E8B67790CF /* FBSDKCoreKit */, + 594C14B288C1AE4B72EB8923C92A2995 /* FBSDKLoginKit */, + 004664A4769FEFA7476BE292868682C4 /* Flurry-iOS-SDK */, + C517D16F366E1075D709B1224EA3C71D /* MoPub-FacebookAudienceNetwork-Adapters */, + 45F09F81E0E9E8003C76DCCF8BB158CC /* mopub-ios-sdk */, + 7A4154FC7AAF00EF4823CD26D4B5062C /* Pushwoosh */, + ); + name = Pods; + sourceTree = ""; + }; BDE0D5FDCD80D5FC2D88642960D810F9 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -1319,139 +2530,561 @@ name = "Targets Support Files"; sourceTree = ""; }; - C50246DDF28E1384F44436C0AFB1E647 /* Bolts */ = { + BF617C9EE429B35FD196475D8FB6CCBB /* Support Files */ = { isa = PBXGroup; children = ( - 03B4DA11FA8937F6FDB7438D0EC5591F /* AppLinks */, - 871DA88B32791F6235AF388B9B4FDA37 /* Support Files */, - D0AF5E7F746E79D597570B79212171AE /* Tasks */, + BBA2B5936513D291ADEC6879F9B5F6F1 /* FBAudienceNetwork.xcconfig */, ); - name = Bolts; - path = Bolts; + name = "Support Files"; + path = "../Target Support Files/FBAudienceNetwork"; sourceTree = ""; }; - C67E8E699D53431CEB6E56A912E8A15F /* AppsFlyerFramework */ = { + C517D16F366E1075D709B1224EA3C71D /* MoPub-FacebookAudienceNetwork-Adapters */ = { isa = PBXGroup; children = ( - 0E7276412224CE4F17BDF19D6B8FD57B /* Frameworks */, - FEAD8C66BA7737E31EE07873167CB4D6 /* Support Files */, + 037B14C5C70E38BBFBD67BAEFCC0EC68 /* Network */, + B3194280112DAE6F3876D4ADC646B920 /* Support Files */, ); - name = AppsFlyerFramework; - path = AppsFlyerFramework; + name = "MoPub-FacebookAudienceNetwork-Adapters"; + path = "MoPub-FacebookAudienceNetwork-Adapters"; + sourceTree = ""; + }; + C5F214292E0D57AD2C90D748AE9087FE /* Support Files */ = { + isa = PBXGroup; + children = ( + 3517AADFC42DDBEE4637B6125598DD75 /* FBSDKLoginKit.modulemap */, + 7D808C5A6CE4C37BD741817479541F4F /* FBSDKLoginKit.xcconfig */, + F0BFC35340F99750CE136136ADEE7667 /* FBSDKLoginKit-dummy.m */, + D9FAE058EEE18EF162B620C0B8F84454 /* FBSDKLoginKit-Info.plist */, + DAC016B23AD39357E0C1A7E7AEDEB2B8 /* FBSDKLoginKit-prefix.pch */, + 32C4A859DA26526CC22A1C502E3DB6A8 /* FBSDKLoginKit-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/FBSDKLoginKit"; + sourceTree = ""; + }; + CCE9BA5A78AE6FB0733F42C422F8B67A /* Core */ = { + isa = PBXGroup; + children = ( + 1396B5526DD5F696678F51629B841C63 /* Frameworks */, + ); + name = Core; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - F42DBD4367685023FF828F386FE38436 /* Frameworks */, - ECB2954E96A22358938959E30D41F7EC /* Pods */, - 963283AC58D03237120F023CF78FD7FB /* Products */, + E2B2C0FBB092BD1A240062132918FB8F /* Frameworks */, + B62BD0174B03D781F18EBE821CB77E91 /* Pods */, + 641DE686AED1710FC708E039476C3FD1 /* Products */, BDE0D5FDCD80D5FC2D88642960D810F9 /* Targets Support Files */, ); sourceTree = ""; }; - CF6A4419C35B60470624A961055325AF /* ActionSheetPicker-3.0 */ = { + D3DB99362B6C5E09FA4294E8B67790CF /* FBSDKCoreKit */ = { isa = PBXGroup; children = ( - DA960F595A5A54729BF5032FC09E0F80 /* AbstractActionSheetPicker.h */, - 06ACBF01504EF7D75398A4EC06168725 /* AbstractActionSheetPicker.m */, - 64A923E23237A741C96AE063BDE9C5E3 /* ActionSheetCustomPicker.h */, - 3ED4E5956BCC80299A5E443A0CF847B0 /* ActionSheetCustomPicker.m */, - CA87FDB0999691EA19D1C2FDA57014BA /* ActionSheetCustomPickerDelegate.h */, - BFF018B42AB403160A32C0E9739F1155 /* ActionSheetDatePicker.h */, - C6626452F4468CB2BA3C2A3BBC75C261 /* ActionSheetDatePicker.m */, - 28F72C955224D63ACDEF4159DC9D8661 /* ActionSheetDistancePicker.h */, - 69003AFD351E25C2A0924C76F462FFCC /* ActionSheetDistancePicker.m */, - 4E80367343A2A40B3A3FB76CD8ABC906 /* ActionSheetLocalePicker.h */, - 646EF293E15F898BADE450251AEA07A5 /* ActionSheetLocalePicker.m */, - 70DC6116A6D768AB600AB3D3D4C1A541 /* ActionSheetMultipleStringPicker.h */, - D7B17E1FE6B3F4180D6EF865958DA81B /* ActionSheetMultipleStringPicker.m */, - B504A439CAB3C8BC83CB10078C05CC27 /* ActionSheetPicker.h */, - DA707D91E00FB28CDCF7BA31E36D07BA /* ActionSheetStringPicker.h */, - 6E2EF1CF8AD5E3113651553975D9B843 /* ActionSheetStringPicker.m */, - 6124B64E1E23E46DB1BD5404ADD9BE3A /* DistancePickerView.h */, - 2C78A208388AAAFF4EC64B73868970DE /* DistancePickerView.m */, - 481D46D6F219428528D7B90629CDEAB9 /* SWActionSheet.h */, - 69E18D17CB62ECF138096EFEC9FB192A /* SWActionSheet.m */, - 52FD9A7761263FE07FBC6FE3B8D088AD /* Support Files */, + D6016EA4AE986A80F14A0C1159FD653D /* Basics */, + 387BC9DD1B5FA96854377739D64EDD2E /* Core */, + 870AA25D619FC0951E6F4B3EAE46C560 /* Support Files */, ); - name = "ActionSheetPicker-3.0"; - path = "ActionSheetPicker-3.0"; + name = FBSDKCoreKit; + path = FBSDKCoreKit; sourceTree = ""; }; - D0AF5E7F746E79D597570B79212171AE /* Tasks */ = { + D57351C0C2855BB3F3F5D8E85A725FEA /* Support Files */ = { isa = PBXGroup; children = ( - 5CE6A5F6D11A5A83BAA28269645C25D9 /* BFCancellationToken.h */, - F5142241EAD0FBBF0DF46A5F3EB2F447 /* BFCancellationToken.m */, - DE9F5904080F117322672612BF55C15D /* BFCancellationTokenRegistration.h */, - E2D523A4F4193431449F7B6287726A6F /* BFCancellationTokenRegistration.m */, - A7FBF373133D0002E964D92E37EF330C /* BFCancellationTokenSource.h */, - 873DD00D8A8ED6AE54A6F907881156C8 /* BFCancellationTokenSource.m */, - 7023ECF48ED539181E896376F65FADBA /* BFExecutor.h */, - 020236ECB8EFACF5ED33285B9354DFDE /* BFExecutor.m */, - 19D3FAF20AAEC199AD3CAA2263027AE8 /* BFGeneric.h */, - D42362A0618254932DA8C712A79A8C3E /* BFTask.h */, - B6CCD2D2BFD873129B257051DC070FDB /* BFTask.m */, - 5E5D3B73801EA4B673396D5BFFEE0B69 /* BFTaskCompletionSource.h */, - 24CFA9C269A6C712EAB850307C22D12E /* BFTaskCompletionSource.m */, - 34195B528E8927827EC8CA3054D9F525 /* Bolts.h */, - B1A7A4E7578A85E1940D42B3741342EA /* Bolts.m */, - ); - name = Tasks; - sourceTree = ""; - }; - DCF0591DACEBF38ED88F06AA2C045C93 /* Flurry-iOS-SDK */ = { - isa = PBXGroup; - children = ( - 4A7DBFCE14C08D4294A030568673021D /* FlurrySDK */, - 0AEF6280A7288A2CF9D112188ACC27CC /* Support Files */, - ); - name = "Flurry-iOS-SDK"; - path = "Flurry-iOS-SDK"; - sourceTree = ""; - }; - E7922CD2F2E180909FCF13A8D9B8D65D /* Support Files */ = { - isa = PBXGroup; - children = ( - F62DF9856EA18D8F0E5399282F0251F0 /* Pushwoosh.xcconfig */, + 4B2D7F39EE114D3E593BF786AE4E7D30 /* Pushwoosh.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/Pushwoosh"; sourceTree = ""; }; - ECB2954E96A22358938959E30D41F7EC /* Pods */ = { + D6016EA4AE986A80F14A0C1159FD653D /* Basics */ = { isa = PBXGroup; children = ( - CF6A4419C35B60470624A961055325AF /* ActionSheetPicker-3.0 */, - C67E8E699D53431CEB6E56A912E8A15F /* AppsFlyerFramework */, - C50246DDF28E1384F44436C0AFB1E647 /* Bolts */, - 37A379FA51F87C1F11F87111399F6540 /* FBSDKCoreKit */, - 389C9C631F77C2F60028D6A9EF909724 /* FBSDKLoginKit */, - DCF0591DACEBF38ED88F06AA2C045C93 /* Flurry-iOS-SDK */, - 2653FD05AE19EE8EF3A2578508881F66 /* Pushwoosh */, + 4C77219B12E5D3A76DBCF836A9468E3B /* FBSDKBasicUtility.h */, + A1F79B81F3521071C1B3CC59DAE647C5 /* FBSDKBasicUtility.m */, + 744253A82D88BA526A83AF6269B01239 /* FBSDKCrashHandler.h */, + B1AC28EC2893CB60103213508D720B17 /* FBSDKCrashHandler.m */, + F5C19D2E77BE770CDF8C2DED6FBC8FD8 /* FBSDKCrashObserving.h */, + 9477445BB8D4D813D222AC484C2230DA /* FBSDKLibAnalyzer.h */, + 8125E4E787DFBAD19567A4C2EFB4BEA7 /* FBSDKLibAnalyzer.m */, + 9EE4FC4EEB6833099B0A9C54CF6172B4 /* FBSDKTypeUtility.h */, + D2DFE685023ECCFA9855178CC0DEE9BD /* FBSDKTypeUtility.m */, + 0E51F09A31E9D9EFFF62AB77320C9A7B /* FBSDKURLSession.h */, + 18E8140B372BFB565A831F487A84FCCB /* FBSDKURLSession.m */, + 4A439B067378E5ECAAC8167747EDF530 /* FBSDKURLSessionTask.h */, + 07DF861E50FDA73373DDBB39815BE748 /* FBSDKURLSessionTask.m */, ); - name = Pods; + name = Basics; sourceTree = ""; }; - F42DBD4367685023FF828F386FE38436 /* Frameworks */ = { + E2B2C0FBB092BD1A240062132918FB8F /* Frameworks */ = { isa = PBXGroup; children = ( - DB2C7F69FC9D1B66E8B4125E92D52598 /* Bolts.framework */, - 0F24AE9432C17B8C178FB43A321BA301 /* FBSDKCoreKit.framework */, - 3875744666E4311A89C26B443EA24725 /* iOS */, + 329F8150FA690A1AC8E66F102DC1E11E /* FBSDKCoreKit.framework */, + E6BB25FDC527503F5C5048E21113690F /* iOS */, ); name = Frameworks; sourceTree = ""; }; - FEAD8C66BA7737E31EE07873167CB4D6 /* Support Files */ = { + E493227EEA0BDC9A3BA7B76F2C0361CC /* Avid */ = { isa = PBXGroup; children = ( - F35ECF36146A2B85D414417FCEF7C7A3 /* AppsFlyerFramework.xcconfig */, + 28514EA67BF3D15ED365252805F5D88C /* MoPub_AbstractAvidAdSession.h */, + F09B98D1E0717E9E51CCADA8989DB1C1 /* MoPub_AbstractAvidManagedAdSession.h */, + 1F76FE05C3A10B10D401A281E37400C9 /* MoPub_Avid.h */, + 1F5E4C3AE4806DE03A7B41F1C28EC893 /* MoPub_AvidAdSessionManager.h */, + EB21B0A94FF4B4299A6DCF6B60985AD9 /* MoPub_AvidDeferredAdSessionListener.h */, + 2A0C8C574B881BB5E7514975886865A3 /* MoPub_AvidDisplayAdSession.h */, + 83A2D20D7993E608818EF3AF40F0BDE0 /* MoPub_AvidManagedDisplayAdSession.h */, + EF4B298895D0E56F0362DA482C2E50F9 /* MoPub_AvidManagedVideoAdSession.h */, + 4E2E6CBA2387E0533F9AFD73FCCE76D6 /* MoPub_AvidVideoAdSession.h */, + 02A461C927F19BA74ED2B3B1FD6D363A /* MoPub_AvidVideoPlaybackListener.h */, + 92AE8ADB5D67B1993A87D63E728D85F6 /* MoPub_ExternalAvidAdSessionContext.h */, + 4B21888C64296EBFB772292B225F139C /* MPViewabilityAdapterAvid.h */, + 717C7C323A9013570CD9C34AF5E16965 /* MPViewabilityAdapterAvid.m */, + 4DECFC59820750033DC721B2D820318F /* Frameworks */, ); - name = "Support Files"; - path = "../Target Support Files/AppsFlyerFramework"; + name = Avid; + sourceTree = ""; + }; + E6BB25FDC527503F5C5048E21113690F /* iOS */ = { + isa = PBXGroup; + children = ( + 200662F8DFB100E592E0456FCD3191B5 /* AVFoundation.framework */, + EA85682B12AF0CFFB2D55EC92DB2662D /* AVKit.framework */, + BDE226862CA9A4B8A396B0701AE758C9 /* CoreGraphics.framework */, + BB6CADD9DE1AD5FD17805AF92E4C5577 /* CoreLocation.framework */, + 2C6C9C78586EAB29A9CD319A29D5F4CB /* CoreMedia.framework */, + 1AA95A2DDFE61900F052C891C37878E2 /* CoreTelephony.framework */, + 8F6CD57A543990947480FE66FD8730E5 /* Foundation.framework */, + 3156DBAB3A2BF6A7FE510D9D3619F782 /* MediaPlayer.framework */, + E67C7E0311D18E5905370B8D8AAD9934 /* QuartzCore.framework */, + CBE09AD2DDB03674EF271071D0D19A41 /* SafariServices.framework */, + E21BEE5051D43121C303FB2B7F567FB0 /* Security.framework */, + FCD2FB4B26D095833E2EE883574545E3 /* SystemConfiguration.framework */, + 279CB81A80DF1E1FB11A341C5DCA3788 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + EBBAA216D2C485D3FE1479ACFDBF4352 /* Core */ = { + isa = PBXGroup; + children = ( + E1ED39001A78BBFFCBF1F48878403C27 /* MoPub.h */, + BD9C1DF434F83C00700CF117FF425DB8 /* MoPub.m */, + EAC89CE26A5883DB3EEB6224E6538EC8 /* MoPub+Utility.h */, + 1C6F498BB183C38DB09455DE873C87B1 /* MoPub+Utility.m */, + E41120F51714C91D6F930D4C4CED9448 /* MOPUBActivityIndicatorView.h */, + AAABD478B43516AC833BB4C14ED44DFD /* MOPUBActivityIndicatorView.m */, + 778EC7E82BEEE1BA594D3E4054D30FD0 /* MOPUBAVPlayer.h */, + C0E3EA2E26CCDB8303300E9DF6D5A592 /* MOPUBAVPlayer.m */, + 29A9B4D11E50A089C4254DF5B9096019 /* MOPUBAVPlayerView.h */, + CFF488C534F8903F2B100F31200CA1F4 /* MOPUBAVPlayerView.m */, + 1DA1F94AA1105EE86DF528ECC851CCCB /* MOPUBDisplayAgentType.h */, + 2AD8A362659C83A68FAEC6F024764EB2 /* MOPUBExperimentProvider.h */, + 6929702B8CAF9B272E66A9FC85C980EE /* MOPUBExperimentProvider.m */, + 1C918FF7721864FFABC4CE297964C3A2 /* MOPUBFullscreenPlayerViewController.h */, + FE2A4DCF4177B35E10F3046B363D28D9 /* MOPUBFullscreenPlayerViewController.m */, + F4AF64484FA6C4C72A88B5A81FC06A22 /* MOPUBNativeVideoAdAdapter.h */, + 2345DD42E20DDB4323C7C8BF40A2A912 /* MOPUBNativeVideoAdAdapter.m */, + 45D593E87257D2B9DB07FCE7060091E8 /* MOPUBNativeVideoAdConfigValues.h */, + A7E29FA889C79F264E45301FC453ED97 /* MOPUBNativeVideoAdConfigValues.m */, + C0CF359045629F2CC052CD933CE93655 /* MOPUBNativeVideoAdRenderer.h */, + B6E92E5EE9CA95519175CD43916EF8F0 /* MOPUBNativeVideoAdRenderer.m */, + C7A9CD85641F1E4358582C2C433FCA79 /* MOPUBNativeVideoAdRendererSettings.h */, + 943C60AA863EF1CE4BF6E79443FB8AD8 /* MOPUBNativeVideoAdRendererSettings.m */, + 3B279AE02BE057335B49062F3B1380F8 /* MOPUBNativeVideoCustomEvent.h */, + F82E383530F945BF727E9A15322A4647 /* MOPUBNativeVideoCustomEvent.m */, + 4DA2A13AF95552A9E591C9873DBA4507 /* MOPUBPlayerManager.h */, + 672D07CE3FF65BA9CB60B288645971A4 /* MOPUBPlayerManager.m */, + 840AC724ABFD6667BFC151EC8A7A71CF /* MOPUBPlayerView.h */, + 0BC4C6AF4144870305222E06AED8ED8B /* MOPUBPlayerView.m */, + DD7CEC3B8B46188033AD5A867E690AE5 /* MOPUBPlayerViewController.h */, + 1B37A1AE0F01C051CD0EACDC5F2A3003 /* MOPUBPlayerViewController.m */, + 63C13850004ED10B7D1451A1332C3FF2 /* MOPUBReplayView.h */, + E862213BC8437635BD90EE2AE196B93B /* MOPUBReplayView.m */, + 78AF1958669D6639CACE164BD0E0031C /* MPActivityViewControllerHelper.h */, + E167BCEDF50D52BE36ED1B1EBEED9D69 /* MPActivityViewControllerHelper.m */, + 7D3C0EED3BAA5ED67B96FCF0713D78FF /* MPActivityViewControllerHelper+TweetShare.h */, + 1EB939DC78F393B43E92E0FB05770983 /* MPActivityViewControllerHelper+TweetShare.m */, + 837C9B637F543D90B0F18515DADC4EDD /* MPAdAlertGestureRecognizer.h */, + 90E111B49E196997025FFB72D808704C /* MPAdAlertGestureRecognizer.m */, + 41FBD33928A78E754BB3CF85BE4C3FDC /* MPAdAlertManager.h */, + 57455311E595D80DC1B44FF90BD5402F /* MPAdAlertManager.m */, + 222BBC66E350FF4E01C2CD6221CD98F9 /* MPAdapterConfiguration.h */, + 6D86C1DE3D160C2308DC872DE3D2DE3B /* MPAdConfiguration.h */, + 8D0F999FBE7C8955784DB2555958CF85 /* MPAdConfiguration.m */, + DADD834F93E695F68C1379C591E7B845 /* MPAdConversionTracker.h */, + 481EF3FAD79EB451F840E84E750B9974 /* MPAdConversionTracker.m */, + 3E8F0BA1821C5F72F39DA01F336B4DE0 /* MPAdDestinationDisplayAgent.h */, + 1233DABE131B7FCA66E2785227DE3A8E /* MPAdDestinationDisplayAgent.m */, + 941C88C2FEC2970BE2B32AD58E11D142 /* MPAdImpressionTimer.h */, + 672DB295A82F043D9A1159E8F4132205 /* MPAdImpressionTimer.m */, + AC9AD637CAF1C6863F7C127239C79948 /* MPAdPlacerInvocation.h */, + 5850B55677B3029BBB8BF92A26549EF8 /* MPAdPlacerInvocation.m */, + 2EF08767081B86C21BD0AC576CB566C7 /* MPAdPositioning.h */, + 8B067FEBE1405CB90DE0F916EDC8F7C3 /* MPAdPositioning.m */, + 47135979C1F938BFBAAD320D42C8D6B9 /* MPAdServerCommunicator.h */, + 312F0B884CAC3F5F21BC932A402F4AE7 /* MPAdServerCommunicator.m */, + 86FC8DFD7B5C6E8BF61C72A150A5CF87 /* MPAdServerKeys.h */, + 276A12FF8E9F11F8B21046A5EF52228C /* MPAdServerKeys.m */, + D17ED6E113B47357BC1B1C19C5C92F40 /* MPAdServerURLBuilder.h */, + 2D49BB12C479517F693968E77057F55D /* MPAdServerURLBuilder.m */, + 0867A32E414B06D0FD80A054063E2A47 /* MPAdTargeting.h */, + E14BCF6C93261D2D3511D75AE2FEA0FE /* MPAdTargeting.m */, + 16E193415C4FDCA57FA826A6CDD8308A /* MPAdView.h */, + EF21C10A78AE55D1FA2A3047387BB737 /* MPAdView.m */, + ACBEDFB2E839391EF4233B648889A478 /* MPAdViewDelegate.h */, + A8D1683CF2B4C7272830B5CD282C4C4B /* MPAdWebViewAgent.h */, + 18CE2A49F5159B4B1E5C5AC71C12FEA3 /* MPAdWebViewAgent.m */, + 94EBDEA67E356B45E7A5168040CA58AA /* MPAnalyticsTracker.h */, + C01431716813CFFBA7A4D5A45ABF51B9 /* MPAnalyticsTracker.m */, + 65F27BB35097F2D8D08FA8B681ECA773 /* MPAPIEndpoints.h */, + 878E6082F5AC49C23F646E8D6DB65E00 /* MPAPIEndpoints.m */, + 22355F169BF11F9BB098AA2D1F34DECE /* MPBannerAdManager.h */, + 4D8D180A327EDE07ABDD3B7F425E3C05 /* MPBannerAdManager.m */, + FDE30D15554C2C30D47208E3387A0021 /* MPBannerAdManagerDelegate.h */, + C68170AE51E8A9C6B91656BBB9A92E37 /* MPBannerCustomEvent.h */, + 777C16BBC363F0C83179312D32086A56 /* MPBannerCustomEvent.m */, + 20E3A9210C554252984A00059B396BC5 /* MPBannerCustomEvent+Internal.h */, + 33669BB30B376F1408C10B5533132475 /* MPBannerCustomEvent+Internal.m */, + AF983AE41C46FAEDA89714A4FDE68309 /* MPBannerCustomEventAdapter.h */, + 54C31E7C923D59B35A34CAE619546BC4 /* MPBannerCustomEventAdapter.m */, + 1E7BE70F36A2033F11FAACC1DC86E909 /* MPBannerCustomEventDelegate.h */, + A03F02892CF56F0F8ECABF0B778A87A7 /* MPBaseAdapterConfiguration.h */, + CD6E18FD964B70B08F9D4BAF828DE52A /* MPBaseAdapterConfiguration.m */, + 36D8023B92984E96D0AF18B251E4D157 /* MPBaseBannerAdapter.h */, + 5525CE4FEA2981057A060682417208C4 /* MPBaseBannerAdapter.m */, + A458F03247D14AF47B6A63934D383A77 /* MPBaseInterstitialAdapter.h */, + 4AB56BDBFFCF3B94A1D816B9260A1D8B /* MPBaseInterstitialAdapter.m */, + F432D8890E5C58E8F9346D22CFA439E9 /* MPBLogger.h */, + 0085F0318135DFE58E7F516FC5DE0B0A /* MPBLogLevel.h */, + 2DA1D3C489B84543139AC54F16A71AB9 /* MPBool.h */, + 3D7498E97EF1E6C6B9D3E526F6FBCD68 /* MPClientAdPositioning.h */, + 3D53AFED7E5E9CC5E731C7B45D34FA4F /* MPClientAdPositioning.m */, + A9C775F7CC59EC88AAFAE75BBD5935AB /* MPClosableView.h */, + 4235D763C60A8DE4E97CCEE6D785D963 /* MPClosableView.m */, + 337939E5164002DE8321DE8F5714CC56 /* MPCollectionViewAdPlacer.h */, + E59809B0DC59C4DA0BA75DB7927C17DA /* MPCollectionViewAdPlacer.m */, + D843C258AB8E6AAC8E061D79A1FA89EA /* MPCollectionViewAdPlacerCell.h */, + A8FD603FB8D92568C2F00475C782E1DC /* MPCollectionViewAdPlacerCell.m */, + 15B10174B9420EE52B289461785BA7CB /* MPCollectionViewAdPlacerDelegate.h */, + F2A412F43B948AE0A464C0308714FE7E /* MPConsentChangedNotification.h */, + FAE4E5837E2A9714C55713E81E8BCD12 /* MPConsentChangedNotification.m */, + E0BA71712E5371FDB33E10230DF27767 /* MPConsentChangedReason.h */, + 4055012FAC722795AA7452ADD20EAD9C /* MPConsentChangedReason.m */, + B4106CEC5B3A50684F2092D75E32E70B /* MPConsentDialogViewController.h */, + 57657C36A5C493F8DBDEAABFE8052B82 /* MPConsentDialogViewController.m */, + 008F93DD87706371A30DD9079345D216 /* MPConsentError.h */, + 70EE9A5E8A0D640EB95232BEF4529A9D /* MPConsentManager.h */, + D21DF05E8CD024EBD37DCA3DC4B0C96B /* MPConsentManager.m */, + D43CBC300B6EAB3D1D61E89FB9FB654B /* MPConsentStatus.h */, + 593BE715D12FA111F2FBE47ADE8AC9A2 /* MPConsoleLogger.h */, + CB8431C448F404B803148A5FBBF4548F /* MPConsoleLogger.m */, + FE15101B8B396F7595B709AE49680129 /* MPConstants.h */, + 88DECB3F8BA7B4E5B7EDF1AA0BB0B792 /* MPConstants.m */, + BF055D4767EEAEDDDF6F316FC80D01E0 /* MPContentBlocker.h */, + 9A4BA7AD3D00B4A3E17F5E68D0574BD3 /* MPContentBlocker.m */, + 4ED366E76B118C3C794976A49C4FBB01 /* MPCoreInstanceProvider.h */, + 38C83CCDD174A0877B3A34F444A927B5 /* MPCoreInstanceProvider.m */, + 3553067D69289A14BF958D4CB1A769E4 /* MPCoreInstanceProvider+MRAID.h */, + 24CA4B2A7047159346094DBA275C905C /* MPCoreInstanceProvider+MRAID.m */, + D727BAFBEC97FA32B283FC8C1FDB391D /* MPCountdownTimerView.h */, + 429F6E9B5D6776BA92727D1A976B6C7A /* MPCountdownTimerView.m */, + 1FA00D80F7E0BC7B3AF7AF266172A236 /* MPDiskLRUCache.h */, + 7A9749911324189B6B7D431FC7C90F57 /* MPDiskLRUCache.m */, + E42F4AA85A9EE2AD782966045AAEC654 /* MPEngineInfo.h */, + 53BC3CB3982B71C708D28F18038C32CA /* MPEngineInfo.m */, + D16E8165E37857ACF68A72747C36DF0B /* MPEnhancedDeeplinkRequest.h */, + 51573793E30701F329FC4B585DCA9B6D /* MPEnhancedDeeplinkRequest.m */, + 669FEF5E033940469407629FB149C049 /* MPError.h */, + 9E094436766E2B7FDD52B0A5D6575705 /* MPError.m */, + A5EA4BEB66C7CB06A927DA65FF7BBC94 /* MPExtendedHitBoxButton.h */, + 93351F1223E5FB869A9CAF199D8FCA01 /* MPExtendedHitBoxButton.m */, + 32FE0FBECB01959799DA0CB95E2D05CA /* MPForceableOrientationProtocol.h */, + 755B63DFE64AC680C8976B22CA5F8CAF /* MPGeolocationProvider.h */, + 4BA6157D1625CEC0C628D38D222EEC62 /* MPGeolocationProvider.m */, + 198A044FC22435493B92E1EF208A9F2A /* MPGlobal.h */, + 76BFEB1255A5D7756F8E034C49CC75C5 /* MPGlobal.m */, + CE17E3F5F6250B447A8F1FC5F2B2A7DD /* MPHTMLBannerCustomEvent.h */, + 40E8FADE08C7EC74A9D73199F5F5AD57 /* MPHTMLBannerCustomEvent.m */, + 6E8409716AE9F73CB937ACFC120B127D /* MPHTMLInterstitialCustomEvent.h */, + 5466F3D7A3CD085C3E453B4B2C5E662E /* MPHTMLInterstitialCustomEvent.m */, + F3244FC531DA3A8C4CE676BBBBB7036C /* MPHTMLInterstitialViewController.h */, + 06A0413A67675E359653EF6302D1C848 /* MPHTMLInterstitialViewController.m */, + 65B45BB217FF4829276E865984B2A0ED /* MPHTTPNetworkSession.h */, + C427B24CBD516E150F32E5EBDCF96D4D /* MPHTTPNetworkSession.m */, + 21D7D711FA0FA48C30FAFC67D3AE42B0 /* MPHTTPNetworkTaskData.h */, + 5CCC6D9B6582B2944D8D3CDF726C3D7E /* MPHTTPNetworkTaskData.m */, + 110523D99609BBC332C17E07B6B8828B /* MPIdentityProvider.h */, + 70A74EA69D29EEE2738DB05AC058A94F /* MPIdentityProvider.m */, + D9AD3717822FC119D19CADDC8CD3D729 /* MPImageDownloadQueue.h */, + F32A1022D86582175CCFB8976F259F1B /* MPImageDownloadQueue.m */, + 07CD7114BDD12615F4CABC9B12465308 /* MPImpressionData.h */, + FCB56E23BB027CBC50C8DDF6A79124FA /* MPImpressionData.m */, + 27D99329498836CD82D748659666B8B9 /* MPImpressionTrackedNotification.h */, + 23285F5C86C0AD01FC461E453763B6A5 /* MPImpressionTrackedNotification.m */, + 17ECD05CA2ACA6D69B4BC5685C4BADD1 /* MPInterstitialAdController.h */, + 7E361C5F49EACC4BBC77F3D98D69DA14 /* MPInterstitialAdController.m */, + 730388327989C9B8D309121F78A31745 /* MPInterstitialAdControllerDelegate.h */, + 97A7C1BA7547CD86275C4C9A041F9F43 /* MPInterstitialAdManager.h */, + 1985E0C78A859F8865BB6FFD8D8426FB /* MPInterstitialAdManager.m */, + 3E38AB9681AEEB1F39B4445EA18564A3 /* MPInterstitialAdManagerDelegate.h */, + FAE7EDE92A1D542687BAD2E56B6A65DD /* MPInterstitialCustomEvent.h */, + 0F58F9028375B7C2D62CFC9C646ABD50 /* MPInterstitialCustomEvent.m */, + 12664A9327783FCD1F087A641F758F8A /* MPInterstitialCustomEventAdapter.h */, + 28A88BE853735D98DD2CB27E60219422 /* MPInterstitialCustomEventAdapter.m */, + FD699BC08360062BDC6F015EFF29D130 /* MPInterstitialCustomEventDelegate.h */, + B40E47DFA15A97FC8B30D4E8BF2407DB /* MPInterstitialViewController.h */, + 1D8ED3FA8E3FC87CD92BDEF8306C0F33 /* MPInterstitialViewController.m */, + D3745DCA98D941EB4F8C14DAC7633D27 /* MPLastResortDelegate.h */, + C19EF40F96FF83DBCD40007BBECEA746 /* MPLastResortDelegate.m */, + 313F763C5FF890729EB53A69A62C3334 /* MPLogEvent.h */, + 66032CECA8D63253F9CFD396B3CF606E /* MPLogEvent.m */, + A404A78E5C43B4C82E8A4C589415A293 /* MPLogging.h */, + C932706C872C628422065773221CCEF7 /* MPLogging.m */, + 2E0975D043E62D62AA0D9FF73BA2C82A /* MPLogManager.h */, + 79C95AF9466B4CA8F786C16186BC2133 /* MPLogManager.m */, + BB914BD29A63398B1F2CBBC026F74DF2 /* MPMediaFileCache.h */, + 2366B91A33BD2E8CF00FFA763E833314 /* MPMediationManager.h */, + 69A102E51EBB7EB8CCF0521D150B341D /* MPMediationManager.m */, + 3F713C112C0705DDB9B2DB12189A85A7 /* MPMediationSettingsProtocol.h */, + BE17778FCACBD6ACBC2F476B25ECE044 /* MPMemoryCache.h */, + 0A0A3F2D5CAD0B6AF27292B4D9D0EDED /* MPMemoryCache.m */, + D6C4669933A9909FCD02018C3A81CFDB /* MPMoPubAd.h */, + 74F552E1E440350F05EA7055DDC2922C /* MPMoPubAdPlacer.h */, + A8D271DDBA21E726ABF2556C28DFC8FE /* MPMoPubConfiguration.h */, + 9BC658E0FFBADD4F78379492E9D4303D /* MPMoPubConfiguration.m */, + CE9290ABC6DC55518EEB631DE2828222 /* MPMoPubNativeAdAdapter.h */, + BAB93924CE9E764DA3D08C5277759391 /* MPMoPubNativeAdAdapter.m */, + A30268303B18BB45431F9DE4E87E5154 /* MPMoPubNativeCustomEvent.h */, + 7EF02A7CBC18BE7D50438EA7676FCA4B /* MPMoPubNativeCustomEvent.m */, + 901F47300BBE057457E27F80A648E15A /* MPMoPubRewardedPlayableCustomEvent.h */, + 11F67DED88D3BB296072360441927DD0 /* MPMoPubRewardedPlayableCustomEvent.m */, + EA7D77DB3FEF0D6DC0745E21E2A0865A /* MPMoPubRewardedVideoCustomEvent.h */, + 178723CBFD514D20B3A9CB81C7540CD7 /* MPMoPubRewardedVideoCustomEvent.m */, + C178B64401709715C2EBE85FE75D9003 /* MPMRAIDBannerCustomEvent.h */, + C41528FAD99AC9E4E4FA3BAF45C91EC6 /* MPMRAIDBannerCustomEvent.m */, + 7E52876BE401A05D3024EDF9D2040BAD /* MPMRAIDInterstitialCustomEvent.h */, + 631741C3C4348599076C373EE142A286 /* MPMRAIDInterstitialCustomEvent.m */, + 2FCCC13F94E233F98949445DC1B8015B /* MPMRAIDInterstitialViewController.h */, + 44C5F0DAC6881EE657664B00EBBF94D5 /* MPMRAIDInterstitialViewController.m */, + 5184D952BECA90E5A4B5D5470129725F /* MPNativeAd.h */, + 6C0F422BF024FFADE6E1DCA93A9D9392 /* MPNativeAd.m */, + 18B488FEB32C633B59C98DC68C21F8FF /* MPNativeAd+Internal.h */, + EECA1C1FC5842A736DC2CC0325C3F100 /* MPNativeAd+Internal.m */, + C4BB57E032320280EB787306526155D0 /* MPNativeAdAdapter.h */, + 3381200DCBAA53514E00DE88FBB6A11C /* MPNativeAdConfigValues.h */, + 92241D298024AF72E7AB65A5B8DAA3C5 /* MPNativeAdConfigValues.m */, + CA63F538A0BAC2E440F16A216E0375BC /* MPNativeAdConfigValues+Internal.h */, + 1CC2D1B77AAEB0065EBFEED89B820F53 /* MPNativeAdConfigValues+Internal.m */, + BF16F4CBF5C8802AB5E82DD7E0FEE33F /* MPNativeAdConstants.h */, + 88A82E657D846BF8C13574BBA163EAEF /* MPNativeAdConstants.m */, + 9AAD013E29245EEAA588311B80FE807A /* MPNativeAdData.h */, + 2DFDA930918B19C3DCB2D11CAD6348B0 /* MPNativeAdData.m */, + EC157DA59A809EE7D3051A904E1F14E5 /* MPNativeAdDelegate.h */, + 28EC887828D27B5D9DF2C571BC57FC3F /* MPNativeAdError.h */, + A3477F3D06F7112D3BE6CB6730600DF0 /* MPNativeAdError.m */, + 46EC0D2DD50AC9981E42A59136E366A1 /* MPNativeAdError+VAST.h */, + 5EC50DD9A926C0225E7D8D7C99F19B30 /* MPNativeAdError+VAST.m */, + 78A9A16575459C01B0D806781FA91BE6 /* MPNativeAdRenderer.h */, + 5C2198FEBD707153A061873D910AEB16 /* MPNativeAdRendererConfiguration.h */, + DE10286539719D07BB92F56417F0225C /* MPNativeAdRendererConfiguration.m */, + 24D2F4F54F9C024B5D2FF91E211A1A64 /* MPNativeAdRendererConstants.h */, + E55AF0D570AF4193719E16841EC2E091 /* MPNativeAdRendererImageHandler.h */, + 3D73DAFD979E01E211CBCCC3F3D5FB35 /* MPNativeAdRendererImageHandler.m */, + 46D8B85F47E2DB8337E61804A6C0CD2F /* MPNativeAdRendererSettings.h */, + 643E2683778ACC9EB5CB76FBC7956795 /* MPNativeAdRendering.h */, + 6B5EF0DA2500F915C96625ABB9C9B91B /* MPNativeAdRenderingImageLoader.h */, + 7155A767452679DAA2CCDF87F40D3C99 /* MPNativeAdRenderingImageLoader.m */, + 2A193992127099DC68C97AAA8DD8F962 /* MPNativeAdRequest.h */, + A68F24D96C2A714846BD0101868E3BBF /* MPNativeAdRequest.m */, + BCAE4EBE65B4691186D268B0180906B2 /* MPNativeAdRequest+MPNativeAdSource.h */, + CC313E7DCDADF5A498A1986201BF9E39 /* MPNativeAdRequestTargeting.h */, + C4BF407BFD75F9D32BB5FCEEC85AD1FE /* MPNativeAdRequestTargeting.m */, + AC43C8DB0218F9E556E2E43641A52444 /* MPNativeAdSource.h */, + A68A055AFEA93ACEC7BF5DDB1869A84B /* MPNativeAdSource.m */, + 7C9243623C2EEC3E811401AD292C9585 /* MPNativeAdSourceDelegate.h */, + 3787CEAE775611EDFA2FE56C0C216395 /* MPNativeAdSourceQueue.h */, + 69CF1C36DE317A8879C959F7FCFC2ED9 /* MPNativeAdSourceQueue.m */, + A92B85A965A9F9DF3777C778ADB9EBFB /* MPNativeAdUtils.h */, + 40AA539E8B036523C84511ECA73C6A2F /* MPNativeAdUtils.m */, + 3F68075B3D8E243FEB835D28EE50C32A /* MPNativeCache.h */, + 7FA399F7C9FD2D0836E0666ADAA2354C /* MPNativeCache.m */, + C43A134B25A805A03D18DB19ADCA9198 /* MPNativeCustomEvent.h */, + 483AD4476BD22474474125111E540A11 /* MPNativeCustomEvent.m */, + 91833573344C58D392E34F2596366606 /* MPNativeCustomEventDelegate.h */, + 12F869F13A5CB9EF708A2048E0FDBECD /* MPNativePositionResponseDeserializer.h */, + 29E4320D71CE55CD9B43324AB45988BC /* MPNativePositionResponseDeserializer.m */, + 384B19B6C54F9385A814116E6306F644 /* MPNativePositionSource.h */, + 7502FC2F85683377493A6C7E6A8372DE /* MPNativePositionSource.m */, + 63955E4F4F737B6D06DB1DF034B512BD /* MPNativeView.h */, + 9961931672C417884E78AA03E6F10597 /* MPNativeView.m */, + E5C0551E6E0F447355893182A32E06C6 /* MPPrivateBannerCustomEventDelegate.h */, + 8F101030586B5E2D461622E2A0E2D33F /* MPPrivateInterstitialCustomEventDelegate.h */, + EF1E0E526F9393A3082A02D9BC62D815 /* MPPrivateRewardedVideoCustomEventDelegate.h */, + BABA6C719A5DCE00F46E614F4126DC37 /* MPProgressOverlayView.h */, + B2283B39EABDFB4652A6D71406D45FA2 /* MPProgressOverlayView.m */, + F3F541DB52E1AE5B7F2A89786E9047F3 /* MPRateLimitConfiguration.h */, + 53648406E1F91895916021AC15DAF5A4 /* MPRateLimitConfiguration.m */, + 80CFC130948D54FEAE8418992ED017D4 /* MPRateLimitManager.h */, + 4FC8ECB0B0AC2F04D218EA34CD8D7CF9 /* MPRateLimitManager.m */, + F5EC29A86D037F510754CCE7E3982C97 /* MPReachability.h */, + D0E27063B51D90CBCE78AF2B83B072C0 /* MPReachability.m */, + 5474068C68892BFB96B07EF1FEC99148 /* MPReachabilityManager.h */, + CAA9B99F13BC0E6806D0B5D2155F779C /* MPReachabilityManager.m */, + 835C43B4AFCE8FF0A12E5A69E4E83BF8 /* MPRealTimeTimer.h */, + 04D607DE87A2DDEC9FC7F9E145507C57 /* MPRealTimeTimer.m */, + B179DF24E9073802CCE5A7311F0998C7 /* MPRewardedVideo.h */, + F9D36F30D658A2459997378A67A10691 /* MPRewardedVideo.m */, + 8FBB8BE5B6013C39A11EB8C1FF454EDD /* MPRewardedVideo+Internal.h */, + D0DC89E0B3F421A54F512B482427D6BF /* MPRewardedVideoAdapter.h */, + 5509B0EB0CE3C370E4BF564165744E82 /* MPRewardedVideoAdapter.m */, + 61D2996792055AC9D459F58B61F54320 /* MPRewardedVideoAdManager.h */, + E47EC2BE49A98F564CC54B5E7384683B /* MPRewardedVideoAdManager.m */, + 8E1A040CD6DDA17C872083C354AEF1AB /* MPRewardedVideoConnection.h */, + 7AE1E4C17D0B33DA5409493330F706E6 /* MPRewardedVideoConnection.m */, + 09D2A15FE487B02D9FE21E5ECC4DE16B /* MPRewardedVideoCustomEvent.h */, + 42FB6AC97DA8B6DDB58BAFAD6892BD25 /* MPRewardedVideoCustomEvent.m */, + 0B3238406C62DB98D637B658FE140BF9 /* MPRewardedVideoError.h */, + 84A02660FE1077689726CEFE3BFFEA06 /* MPRewardedVideoError.m */, + 8EF494E03636BDFC1AEF93C125FEBCF2 /* MPRewardedVideoReward.h */, + A7DAE76FEFC3D71F73225299036F4E8C /* MPRewardedVideoReward.m */, + 317086D2417B02C70797E5C3C1D3DC44 /* MPServerAdPositioning.h */, + 9113537F8C5C4546583EC38BEF0F7AD2 /* MPServerAdPositioning.m */, + C00EE2DCD9D49B863F78C6F885A7369D /* MPSessionTracker.h */, + A46A0694CA33E8FA4A6FF6776EF48301 /* MPSessionTracker.m */, + C9B603800F1CAEF40BF5B66BF307538A /* MPStaticNativeAdRenderer.h */, + D64DADE6F35CD7BB28FBC0C6FA243CFF /* MPStaticNativeAdRenderer.m */, + 1F9565EB82C022835E0A5257A2EFD1B0 /* MPStaticNativeAdRendererSettings.h */, + A900443509C5E605A6AA6B440A4F097D /* MPStaticNativeAdRendererSettings.m */, + DCA155048122258B8D4B0B7F7B2B05C9 /* MPStopwatch.h */, + C1864D080BCBF4477766525ADB47E824 /* MPStopwatch.m */, + 2AA938C762685308D5DDA08B31DCECB1 /* MPStreamAdPlacementData.h */, + 559F7EAE03EA94D72F7A73BC6DF86A0E /* MPStreamAdPlacementData.m */, + 72E1D4279EC05F7179D2143916C50F89 /* MPStreamAdPlacer.h */, + D6C449BA26D872881ECD678859C27B43 /* MPStreamAdPlacer.m */, + B807205C484E2661499607C16A6E9225 /* MPStreamAdPlacerDelegate.h */, + AC4C84128FC0D34C431A6FFD970DB5BB /* MPTableViewAdPlacer.h */, + A5DDBDE0EDCBBCC85F7CC5549887DA8F /* MPTableViewAdPlacer.m */, + 29D7E62007F4E97F085CE0F45D5DDCF7 /* MPTableViewAdPlacerCell.h */, + 6586A589843DB8F3F358004ADC84ECAD /* MPTableViewAdPlacerCell.m */, + C2ACF1656B62A5AA447D93EEEBDB8F05 /* MPTableViewAdPlacerDelegate.h */, + 3C0CC63A891D79F760E49C0FE2EC9263 /* MPTimer.h */, + 0CCB325A1CE8DF3EEFE5256301B436FC /* MPTimer.m */, + 2C746E2E0A9C781A3787FDE42FF6D82F /* MPURL.h */, + EF63751A556A1BD133ABC30D6CA05E47 /* MPURL.m */, + D616BA0574DA45CAEFF05CD38215AFE0 /* MPURLActionInfo.h */, + 993E9FD739B848734F41F1C74C8CAAB2 /* MPURLActionInfo.m */, + 1D1C4F2BDDC1A2DAA7C9EF6A4DE772FD /* MPURLRequest.h */, + C0EB147C8CA495A57110E29C0E07F46D /* MPURLRequest.m */, + 166A802457E735F98DF54B4BE2379548 /* MPURLResolver.h */, + 9CB1D7DE3964948FFAEF4B5C4410EB9B /* MPURLResolver.m */, + ADA6AF43A36323C557811C3806F544A6 /* MPUserInteractionGestureRecognizer.h */, + 775479F1B123573F2321C2FE7ADD8528 /* MPUserInteractionGestureRecognizer.m */, + 22D013D7719F2E60F07C8F150F150B32 /* MPVASTAd.h */, + 7E2733436B4C0444F92294CE1755EA69 /* MPVASTAd.m */, + 20C1DB506FCC7605E1EDD7B1A68341C3 /* MPVASTCompanionAd.h */, + 818CF7621788EB57243D6C4A5C003488 /* MPVASTCompanionAd.m */, + 8E108A00A30A1176AA41EB15C588B61C /* MPVASTCreative.h */, + DA0F58385DA596725A53D3859C3C8C68 /* MPVASTCreative.m */, + B2A0D479C2EA14467845DCD938375D89 /* MPVASTDurationOffset.h */, + C532AC8F01A34C2DD3B73C4097AABEC1 /* MPVASTDurationOffset.m */, + 6955FA68A34770181A88C0BFE3A5DE3C /* MPVASTError.h */, + 90F86564B3EC25D60A1BD2D3E1ADB2F3 /* MPVASTIndustryIcon.h */, + 7E2AE5344FCBE356171F0BAB71E0E856 /* MPVASTIndustryIcon.m */, + 74F8BCC2C46C026ECC22EBD02B844B87 /* MPVASTInline.h */, + CE65EF010803C6674566E2D9DE335C96 /* MPVASTInline.m */, + E26AE9638199D65BA27C8E2B0ECCA247 /* MPVASTLinearAd.h */, + E36B25228BC0DC50CCC60BE52D32323F /* MPVASTLinearAd.m */, + AA9E0D2E2DD8DA0F0DD28282A817EB4A /* MPVASTMacroProcessor.h */, + CAF29C3A2C0231EDF9441D77EB896CAB /* MPVASTMacroProcessor.m */, + 7057094CE5447E7FBD6B6406D558E201 /* MPVASTManager.h */, + BE6AA695A1243C229327735B4AEDB65C /* MPVASTManager.m */, + 966574BBF13F33EE3DD660C9DFB688C1 /* MPVASTMediaFile.h */, + 9295D48241321877C9FE74BC6AB6A0C9 /* MPVASTMediaFile.m */, + 96D1FB37A3A92C36D6EB3219C1B36AA1 /* MPVASTModel.h */, + ED75C2B3EB6E4E481C1DAB1CB9DED0B8 /* MPVASTModel.m */, + 4697854BCB6ADF8B7BD5912A820F1281 /* MPVASTResource.h */, + 123829815E6758EECE5329D5D0695C78 /* MPVASTResource.m */, + 7EBE8A5369286502900D0FF7E9636017 /* MPVASTResponse.h */, + 202D2DC71F90F79B93F7031A411D4149 /* MPVASTResponse.m */, + F66ECA950B107ADFCEC708B17A751127 /* MPVASTStringUtilities.h */, + A73DF0C449187B9EA68A4C6AAE220C8F /* MPVASTStringUtilities.m */, + 4BFA696B2A83B22B12FC28F3F7368681 /* MPVASTTracking.h */, + 07D2D903FA50E592586284275FC08FE1 /* MPVASTTracking.m */, + A679A574C99F682298C6F165A995670E /* MPVASTTrackingEvent.h */, + ABCFF4FAC93BC2C51CBF81D27E49FDB7 /* MPVASTTrackingEvent.m */, + 19FEBAF7B1AD4C939CD21F125EEC367D /* MPVASTWrapper.h */, + 637A5C36C92BA6521561BD9E974D314A /* MPVASTWrapper.m */, + 93D148011ADBC4DB85E3A8208E165BDC /* MPVideoConfig.h */, + 92AC26435795AD8929F6A59855866D62 /* MPVideoConfig.m */, + F0709010DEB2CE6FF63CA9540A3737D0 /* MPViewabilityAdapter.h */, + C382E4F80D21FB66993E6C000599A077 /* MPViewabilityOption.h */, + E8880ACFDD1626E845D356D5B9BA1012 /* MPViewabilityTracker.h */, + 6A15DF00D3C630F687C9DCB0460751FF /* MPViewabilityTracker.m */, + 1C23D5519090AE7A2791FB566E69A5EC /* MPWebBrowserUserAgentInfo.h */, + 7440508D561A617A31F3661D11DBE4E4 /* MPWebBrowserUserAgentInfo.m */, + C5EEE842FD14BDABF6B75D508EF597AB /* MPWebView.h */, + 08645684D6B705E777B2916E36A63D6F /* MPWebView.m */, + 39D3971615A8B57D3BF0C850972DEBCA /* MPWebView+Viewability.h */, + 96D5B3C9355BF0FD6259C04CE54A5D87 /* MPWebView+Viewability.m */, + 56D5C86CC76FADAEBE68517166805AFA /* MPXMLParser.h */, + D03154A17F2B2C28AEE2D661970B5F34 /* MPXMLParser.m */, + 2ADA3CC8949A9F999611C4DF2262A3DF /* MRBridge.h */, + 4F0669EE3EC010EB3612C96F6C48C04B /* MRBridge.m */, + 113EE07F75C317AC7BBF135B331DAA7C /* MRBundleManager.h */, + 9CBD2D32630CA781CC20C04A92C9236C /* MRBundleManager.m */, + DEA8F0B19D9D0B45167526ABF5B96757 /* MRCommand.h */, + C068E9221648C9D43880EC57CDAC05E6 /* MRCommand.m */, + 48293070A0F825A59DA3BB37DD55A101 /* MRConstants.h */, + F3DA677D40DB7A271E6C2F2ECAC540FA /* MRConstants.m */, + 3222A660AA76FDE4042164F5211E3770 /* MRController.h */, + 39407006E9C1FF3993373B817535A159 /* MRController.m */, + 952AD8D7F79D839DCF4D0E4DE6B7472A /* MRError.h */, + 6DECC32DB4046B242175C9C8B2A8500C /* MRError.m */, + C6FFFEA3F59060DB53CDF59945AADD66 /* MRExpandModalViewController.h */, + A139C802A166E40070BF1764597F8F14 /* MRExpandModalViewController.m */, + 77BEDD7554CE6572DEAA5130F9BE091E /* MRNativeCommandHandler.h */, + 0629A4CF913403ED8BF8A587F51E5AFF /* MRNativeCommandHandler.m */, + DFE717B1569AE3EDE5EA12247CD22CC8 /* MRProperty.h */, + E753705DBA15FA24567AC97FF80B0465 /* MRProperty.m */, + 0CE1CF550E23B510D2C6F68F29A7AD03 /* MRVideoPlayerManager.h */, + CE6FE5FDD0AF11FDD40CEA9FB164967D /* MRVideoPlayerManager.m */, + F538853FB162911DD9A83C235AAE34E7 /* NSBundle+MPAdditions.h */, + BC5CC01AABDBC06D4379BC716186E002 /* NSBundle+MPAdditions.m */, + 15B18350657A3A8ABB3A902CE3B364DD /* NSDate+MPAdditions.h */, + A55BDFD69D3689D1AFA0F4CE297A5679 /* NSDate+MPAdditions.m */, + 97D5DA84FDFBC09323EF4F7FF9A504C0 /* NSDictionary+MPAdditions.h */, + 2AF24FF965B163B35A6A1F7256E532F2 /* NSDictionary+MPAdditions.m */, + 7B35BE8B12E043B3742817CD8B61CB38 /* NSError+MPAdditions.h */, + 36E8EFAB0C262822AF60ECF9D9D1C082 /* NSError+MPAdditions.m */, + 5723C12544848708ED3A50705397BB9D /* NSHTTPURLResponse+MPAdditions.h */, + EB0A61CE9D2654A7A63E42E4BB9D8C43 /* NSHTTPURLResponse+MPAdditions.m */, + A881258CDC98D74871DCA7BA4D1176E0 /* NSJSONSerialization+MPAdditions.h */, + 2BE10FE7F4AE12647177883F5827B63F /* NSJSONSerialization+MPAdditions.m */, + 06757E5666943EE6196D8B301E12AEE1 /* NSMutableArray+MPAdditions.h */, + 3AB26FE24E67641C267B774D4EAA4108 /* NSMutableArray+MPAdditions.m */, + 253B55A5F9C406C5541903CC8F45B708 /* NSString+MPAdditions.h */, + 72F93DA4636619F51DF60D5E61326A7F /* NSString+MPAdditions.m */, + 60863948D4E605FFAE575ED46939DA12 /* NSString+MPConsentStatus.h */, + B1D390CFF8696121F3FE27BF99A55CE7 /* NSString+MPConsentStatus.m */, + 840186D225507611F8E45D7E340CCC58 /* NSURL+MPAdditions.h */, + 24D45DF4A924A9E28CE7976AE16FD94F /* NSURL+MPAdditions.m */, + 25A3859019401E6CAFD8A50CCA9A6E9A /* SKStoreProductViewController+MPAdditions.h */, + 1E0FDE46DAF192D4E3F9D4F1880CA4CD /* SKStoreProductViewController+MPAdditions.m */, + C1780139C3FEABBD2A81C413C999D001 /* UIColor+MPAdditions.h */, + 662C8DFC2BB210CEC404D76B95FCDE12 /* UIColor+MPAdditions.m */, + ABEC294AC9E3A5C3FD9ABCB63FC9B7BF /* UIView+MPAdditions.h */, + B3D334ECEED0074F4AD58F7103C02938 /* UIView+MPAdditions.m */, + 279D16B8E9D107440BC8242700B5EC22 /* Resources */, + ); + name = Core; sourceTree = ""; }; /* End PBXGroup section */ @@ -1476,32 +3109,394 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 1625B3D8042B4904B08FC5D5201F49E1 /* Headers */ = { + 26FDC25213B99218A2FFAAD562914653 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6BAB5426897C8C441B95C9FBC185428C /* BFAppLink.h in Headers */, - 33A4EE3F5F0064AF102F8062BADDC37E /* BFAppLink_Internal.h in Headers */, - 89ADFC991B0DE83D942340C85191C3E5 /* BFAppLinkNavigation.h in Headers */, - 6FF1FB0B86FA129561B45B28D2D80643 /* BFAppLinkResolving.h in Headers */, - 9D1D8B0B58436FE71F570F1BCAAFFC1B /* BFAppLinkReturnToRefererController.h in Headers */, - 4902C5F7F63D6A9CABCE785FE647B673 /* BFAppLinkReturnToRefererView.h in Headers */, - 843BC421728151F13FC4C4979284FE63 /* BFAppLinkReturnToRefererView_Internal.h in Headers */, - E1EC757A331DD3DDA144CC01B3A8872A /* BFAppLinkTarget.h in Headers */, - 8722D20160EC45F5DD786E0762F44A4F /* BFCancellationToken.h in Headers */, - D5E575E32622E749BE6DE64C04FD4201 /* BFCancellationTokenRegistration.h in Headers */, - DF998104BA4737B39320FF0A3EAADC78 /* BFCancellationTokenSource.h in Headers */, - 06AFA7CDCE86E762BEBB6ECE41823E62 /* BFExecutor.h in Headers */, - AD0E1747EB6E556E8D354DFA08AF0050 /* BFGeneric.h in Headers */, - 58E6EFB2DAB38671D9AB326C5C410809 /* BFMeasurementEvent.h in Headers */, - 67A33DEE3AEB516554397A329188BD2B /* BFMeasurementEvent_Internal.h in Headers */, - 4DFBD4B1DDA8A59CD5E89EA82F102A16 /* BFTask.h in Headers */, - 3515BA57EEB21704683FD75E7A06AB22 /* BFTaskCompletionSource.h in Headers */, - B8FD9AFAE0B3C703E1D5A40E9C27E42E /* BFURL.h in Headers */, - 6A55B983D2BDF23F04E79456E8AD6767 /* BFURL_Internal.h in Headers */, - 96148033E3C745D236932B17E6D15D2B /* BFWebViewAppLinkResolver.h in Headers */, - C355C18C7B80C7A1340D423E3329BFE0 /* Bolts-umbrella.h in Headers */, - 42CA950495A2D4213AEB8130001A79DB /* Bolts.h in Headers */, + F87185B2FC1341FD754AED13A0CCDAB1 /* MoPub+Utility.h in Headers */, + AEDA52B1C604D990C73DA8074DC595E6 /* mopub-ios-sdk-umbrella.h in Headers */, + A4C57A541753427184E516AEE91E43D5 /* MoPub.h in Headers */, + 1B452A4A4A3DC37C2C6A4BFD9D282011 /* MoPub_AbstractAvidAdSession.h in Headers */, + B9473C65866D10C65EC505508DD26BBF /* MoPub_AbstractAvidManagedAdSession.h in Headers */, + A011267AF3857695A23B69529364B327 /* MoPub_Avid.h in Headers */, + A565BAAB2D5826C6D6E9395049E475F2 /* MoPub_AvidAdSessionManager.h in Headers */, + DA450774BEFF3290BACAB7228E18C3AF /* MoPub_AvidDeferredAdSessionListener.h in Headers */, + 91ECEE7D67DB91CAE00CE4F7F626A841 /* MoPub_AvidDisplayAdSession.h in Headers */, + 8DCCB306BA52E23F376378DF5C03630F /* MoPub_AvidManagedDisplayAdSession.h in Headers */, + 6A2448AFAFCC00E1B8368FF5EFA718C7 /* MoPub_AvidManagedVideoAdSession.h in Headers */, + 1051848A2FF7B251B19671377B430AA5 /* MoPub_AvidVideoAdSession.h in Headers */, + 6A8B75FF479CEE94559AB64BC1B9A338 /* MoPub_AvidVideoPlaybackListener.h in Headers */, + FFEFA493963CAE6C9247B4984669DABB /* MoPub_ExternalAvidAdSessionContext.h in Headers */, + 9DF307F86061E2716C3E982229D9AADB /* MOPUBActivityIndicatorView.h in Headers */, + 16AF5B8600824A975CFAA6435234CE7B /* MOPUBAVPlayer.h in Headers */, + 75F7487E11C96E66D980AACFE724155B /* MOPUBAVPlayerView.h in Headers */, + 75E13B9C4291B650E1BF1948B423B8F8 /* MOPUBDisplayAgentType.h in Headers */, + B0C6DFFCD7CA4E4EC3A1E385340253C9 /* MOPUBExperimentProvider.h in Headers */, + F6EC932037BA6072A27C5295559DE4B5 /* MOPUBFullscreenPlayerViewController.h in Headers */, + 6B1AAC720701D6697516DAD43ACA5FC1 /* MOPUBNativeVideoAdAdapter.h in Headers */, + 7493751D7E49D768C9BB556F1D2CC4CD /* MOPUBNativeVideoAdConfigValues.h in Headers */, + 3FE445250268A6175F78C0DC88033DC8 /* MOPUBNativeVideoAdRenderer.h in Headers */, + 604DF811303E72196BF3E133A3189B39 /* MOPUBNativeVideoAdRendererSettings.h in Headers */, + 2E76724A8F4CBFC501B34171FFA38606 /* MOPUBNativeVideoCustomEvent.h in Headers */, + 639A32A8951AA4BCD36D1EA63864C130 /* MOPUBPlayerManager.h in Headers */, + 467F04AA25B35120FF5340CC155FA522 /* MOPUBPlayerView.h in Headers */, + 8D5A0313D4FE1087442735B5598A43FE /* MOPUBPlayerViewController.h in Headers */, + 9BD272B22C532336C1E249CF98B3904F /* MOPUBReplayView.h in Headers */, + 8E5820C207E42B0DEA579571B1209DF1 /* MPActivityViewControllerHelper+TweetShare.h in Headers */, + 40FAC915304E0E0C9A9B9E0FB75EE335 /* MPActivityViewControllerHelper.h in Headers */, + CBB4D9260D03A59BFD36973CEFC47C51 /* MPAdAlertGestureRecognizer.h in Headers */, + 7FEBF4EEE7965D97B113497F4F08D83C /* MPAdAlertManager.h in Headers */, + BC7D5590B5C7F5585A7CFA4C75B919E9 /* MPAdapterConfiguration.h in Headers */, + 61416C4EE78A64A227F28DA0075E5E49 /* MPAdConfiguration.h in Headers */, + 9B13B2B8FB13FD4B5C1DCA3D67F4CD6D /* MPAdConversionTracker.h in Headers */, + 5E751954DBE4B9D90705E95A7B58EBBE /* MPAdDestinationDisplayAgent.h in Headers */, + 05F6342D4EE6CAF292B47FAA6131AC32 /* MPAdImpressionTimer.h in Headers */, + 5F03E14F63E920B11DABEE65D10525AF /* MPAdPlacerInvocation.h in Headers */, + 21A6C4D406DD05E6ECAA68419DCF6B7D /* MPAdPositioning.h in Headers */, + BE270414FF53EAB5CD235F0E179CD5A0 /* MPAdServerCommunicator.h in Headers */, + 49305CC1D06B560C6F61D00A0EF2312C /* MPAdServerKeys.h in Headers */, + A4B3BFD200AECF01E889D1161B17B8A2 /* MPAdServerURLBuilder.h in Headers */, + B0EF1405DEBCCE2014C180CED61A5059 /* MPAdTargeting.h in Headers */, + 6799B366086E0FA39E1814FF3980D93A /* MPAdView.h in Headers */, + 19F2EAD0A4AA6557D3C4E6D486F3CABA /* MPAdViewDelegate.h in Headers */, + E48DA8E4B267DAFA77557C3B882FA7F5 /* MPAdWebViewAgent.h in Headers */, + F6202B8FFE1A6FED5D8C3C4C59BE0E4C /* MPAnalyticsTracker.h in Headers */, + 4EF1B8159104573F5AFB007CC0F688FF /* MPAPIEndpoints.h in Headers */, + 5ED457C6C6E1582A0EDF57E5609B39CC /* MPBannerAdManager.h in Headers */, + 4AF7C21A55CA989ADFEF40763421E386 /* MPBannerAdManagerDelegate.h in Headers */, + 25DDF02E79C83A808837421B988057B3 /* MPBannerCustomEvent+Internal.h in Headers */, + EA2232A0CCB020779946D66F22C17D16 /* MPBannerCustomEvent.h in Headers */, + 12BDA19B8F5988560B08BAD4F26B664F /* MPBannerCustomEventAdapter.h in Headers */, + 9D2F64261FFDFE9B4C67BF15D3980B7F /* MPBannerCustomEventDelegate.h in Headers */, + 8864F1B9EFBB01C0FD97E2979C2AAFE2 /* MPBaseAdapterConfiguration.h in Headers */, + 2BF9F89988F0A3F8FED2327B55B4676B /* MPBaseBannerAdapter.h in Headers */, + A7F373A19C86747C781DEE9DD05D3E3E /* MPBaseInterstitialAdapter.h in Headers */, + 86851C31BFD0A60145CECEF9E30DEBCE /* MPBLogger.h in Headers */, + F723CA86766868956AABD3216A8FBE49 /* MPBLogLevel.h in Headers */, + DD0BCF17F675BBC91CA1491392528077 /* MPBool.h in Headers */, + 15E0F79DFD3F8F0C85EDF2F90E48E1AB /* MPClientAdPositioning.h in Headers */, + C405AEFCEF08D2D06D297B6B9E88BB2C /* MPClosableView.h in Headers */, + 65FDBEFC578D05EEDFE0C82D124C5B1A /* MPCollectionViewAdPlacer.h in Headers */, + 7DC330235E15B8DF43B1AA68C2C23B9C /* MPCollectionViewAdPlacerCell.h in Headers */, + 427563B0D40EFFA030A2318326BEE86A /* MPCollectionViewAdPlacerDelegate.h in Headers */, + 73EF6B3A1D33BCFD79FB052240F3CD68 /* MPConsentChangedNotification.h in Headers */, + C72408FB97AE26D31EB56AB90C2D354B /* MPConsentChangedReason.h in Headers */, + 78897DEAA59A931DD8AEB98F6800D68E /* MPConsentDialogViewController.h in Headers */, + A88830E30039D2DE548EA93C695F05B9 /* MPConsentError.h in Headers */, + 8683D8486220758D2D67E4C8C4A73980 /* MPConsentManager.h in Headers */, + D285F6CB2EF57198AE246D85BAF42C1C /* MPConsentStatus.h in Headers */, + 9B2C62C7EE304DD76D2F83E9127792FD /* MPConsoleLogger.h in Headers */, + E02F89B80434B83BB3853DA4CD5CBA9E /* MPConstants.h in Headers */, + 630D8B4A89C39005608D12485CF0BC1C /* MPContentBlocker.h in Headers */, + 91D2FF6842C88F477E7C2067381F13D2 /* MPCoreInstanceProvider+MRAID.h in Headers */, + 5A3B07FBBC8FD96D2E92699364646C54 /* MPCoreInstanceProvider.h in Headers */, + 2A30094D087E344EF6AD3C954D4A0015 /* MPCountdownTimerView.h in Headers */, + 4B4BC5F79FC593FDDA5537B6831D1371 /* MPDiskLRUCache.h in Headers */, + C3AC2BE0F184D30A3105B48734D05FA9 /* MPEngineInfo.h in Headers */, + BA0CA6AE91BBD4510121CEAFB8F30295 /* MPEnhancedDeeplinkRequest.h in Headers */, + 3B1CA84936C0575AE8DF25E30C23B789 /* MPError.h in Headers */, + EB2B562C8195755A62FDFA41278E8A89 /* MPExtendedHitBoxButton.h in Headers */, + 5C32FB004982AF96D4EE51B9037663D6 /* MPForceableOrientationProtocol.h in Headers */, + C41B538A846E32B1D3F4FF8FC3375918 /* MPGeolocationProvider.h in Headers */, + F696F9D23DCC05DD6BEDA4E0D735879D /* MPGlobal.h in Headers */, + 027BB2C5CCEBDB80C6822E36DEE1BA52 /* MPHTMLBannerCustomEvent.h in Headers */, + 067AB334180356C16BBDF4A981A2C8CF /* MPHTMLInterstitialCustomEvent.h in Headers */, + FDD1539D2A9FFF1E16B1073269C1DE26 /* MPHTMLInterstitialViewController.h in Headers */, + E47F60210C4D4D257211E12F07103436 /* MPHTTPNetworkSession.h in Headers */, + 03C0E5FB2AB2F1D6480CEB0BE991A304 /* MPHTTPNetworkTaskData.h in Headers */, + A37CE5B8694D24797927B895F023845B /* MPIdentityProvider.h in Headers */, + 5D3F58D2C976087E1062E4CDD20BADBC /* MPImageDownloadQueue.h in Headers */, + F0693FE70E00674E88A37ECE39F65C20 /* MPImpressionData.h in Headers */, + 65329895BE77866CC1472716B456ACBA /* MPImpressionTrackedNotification.h in Headers */, + CBBC3F8C7788D3B7C14EA9431D57341F /* MPInterstitialAdController.h in Headers */, + 168FD0351FCFBDC31C4B9F95AC414F76 /* MPInterstitialAdControllerDelegate.h in Headers */, + 5CFE9BE97DEA453F1E9E8A676775B326 /* MPInterstitialAdManager.h in Headers */, + 4BFE2E8C03DC0AADE3996635D7E2DC62 /* MPInterstitialAdManagerDelegate.h in Headers */, + 3C338326A2B4A3C4B7F7047CAC4F41EE /* MPInterstitialCustomEvent.h in Headers */, + AD8C670386E26C4B7958942868881958 /* MPInterstitialCustomEventAdapter.h in Headers */, + 46B91257C03FC97D8118A8CC0C42EFE5 /* MPInterstitialCustomEventDelegate.h in Headers */, + A4517C16A5981529EDD39D09BBAE106E /* MPInterstitialViewController.h in Headers */, + F7180C999A5DD215C7C93AE0BEDECFBF /* MPLastResortDelegate.h in Headers */, + F850BFA68CA30186A3118593E94935BC /* MPLogEvent.h in Headers */, + BE519BCC7F2D5F0A577FEC4B8581B145 /* MPLogging.h in Headers */, + 33C21B01BD0894456549301F017B5741 /* MPLogManager.h in Headers */, + 7694323A7175031EA979F1A00678C48C /* MPMediaFileCache.h in Headers */, + 64C950B4C4808E89279D2E1BDCEB8AB5 /* MPMediationManager.h in Headers */, + 5379BEE55DC2964C41B073F880972FCB /* MPMediationSettingsProtocol.h in Headers */, + 1B3B25090E8D1493C756AA838AE64B40 /* MPMemoryCache.h in Headers */, + 3226C2BE765627FB26BF00DAE87158B6 /* MPMoPubAd.h in Headers */, + 0EAC2B34822ABC3E8AC2853B6F8073BB /* MPMoPubAdPlacer.h in Headers */, + 6342FD34EB5DE8D901E67BA1FAAC6E94 /* MPMoPubConfiguration.h in Headers */, + 7808ABF0A64A9F2593D97822452C0C06 /* MPMoPubNativeAdAdapter.h in Headers */, + 23B58C3E9B5A0C4AB23030C6E6F1707E /* MPMoPubNativeCustomEvent.h in Headers */, + A4D622FD6F5BFB399FBCCD258D3A98BB /* MPMoPubRewardedPlayableCustomEvent.h in Headers */, + B9D4400960D54EB686599CFD0ABDF629 /* MPMoPubRewardedVideoCustomEvent.h in Headers */, + 05B66668376E3B6583BB39057CE779AA /* MPMRAIDBannerCustomEvent.h in Headers */, + F5C8252D886800AE115FD6775CC6A5A4 /* MPMRAIDInterstitialCustomEvent.h in Headers */, + CA326429E2D92F3B5D277A7DE58C2EEF /* MPMRAIDInterstitialViewController.h in Headers */, + EE1844AFBB3ECA923A702091DA6C5551 /* MPNativeAd+Internal.h in Headers */, + 906BD1BF0FBBA09FB2FA44F1E3329F18 /* MPNativeAd.h in Headers */, + 7D83204DE28936E8D78A92A1726F72AC /* MPNativeAdAdapter.h in Headers */, + 9EDA2048D01FCA6820F83E7D6A2821F8 /* MPNativeAdConfigValues+Internal.h in Headers */, + 904EDA9F1D6CC4ADBFCBE471547FD3C2 /* MPNativeAdConfigValues.h in Headers */, + 5748C395D4CDE822F615E6A0B9C7550C /* MPNativeAdConstants.h in Headers */, + 565230934CB628F1FB97EE18DDC414AC /* MPNativeAdData.h in Headers */, + 4982A430F6DD11A45CCD5F8888A65BC2 /* MPNativeAdDelegate.h in Headers */, + 92237C7EAB3E1009AB7F6C72A90814FA /* MPNativeAdError+VAST.h in Headers */, + 2F1350573333441D9ABFE221FA80B176 /* MPNativeAdError.h in Headers */, + 8B95E73264E738625B624A6E46042D5B /* MPNativeAdRenderer.h in Headers */, + CE3DA82BE50B5E3A1C23BB1E373DF220 /* MPNativeAdRendererConfiguration.h in Headers */, + FAC80914A298EDAC4B45CDE69B3ED376 /* MPNativeAdRendererConstants.h in Headers */, + 3819FD77127CDB2D38883AEF0CDE316B /* MPNativeAdRendererImageHandler.h in Headers */, + B854A85F981D13CB4A472909AAA7CDCC /* MPNativeAdRendererSettings.h in Headers */, + 161B36DA3C59F4B19DFA1365F7F6BAAA /* MPNativeAdRendering.h in Headers */, + D0414EEBBBB38955013EF23BC71A0C36 /* MPNativeAdRenderingImageLoader.h in Headers */, + 4E74A4FB657FE4522FC2AEB95AD5097E /* MPNativeAdRequest+MPNativeAdSource.h in Headers */, + 361B73A90A33D308D6F07B234D92FC61 /* MPNativeAdRequest.h in Headers */, + 2188E019CF43737B6C27D644B1633305 /* MPNativeAdRequestTargeting.h in Headers */, + A89AB2C1170F9F9212A146C0A23CFE9D /* MPNativeAdSource.h in Headers */, + 64EE33EB6EB613014E7CB2FCB8DFEA29 /* MPNativeAdSourceDelegate.h in Headers */, + F6A52B91765A3A6ABAC7699CCC444B33 /* MPNativeAdSourceQueue.h in Headers */, + 3970138CE3A7604E9E1110CDA9ECE934 /* MPNativeAdUtils.h in Headers */, + 33F2B21A70984B889C2613BAE7251F42 /* MPNativeCache.h in Headers */, + 78F6242031052C0C8065AC4E62E70188 /* MPNativeCustomEvent.h in Headers */, + 2E5A5684F5161AA2AEDB67594FEFD3C7 /* MPNativeCustomEventDelegate.h in Headers */, + 7099BD0E45302A5AEBB4813103C1C79A /* MPNativePositionResponseDeserializer.h in Headers */, + ED67F2E81742D7B483D15C0FF885E9AB /* MPNativePositionSource.h in Headers */, + 73CA1C6E7DBB28C4CC3BF2593AD2A5C6 /* MPNativeView.h in Headers */, + C0D323A7712CA108D737F65C83D38B98 /* MPPrivateBannerCustomEventDelegate.h in Headers */, + 17AE052C3641183678ECF6AC1D8C9C6D /* MPPrivateInterstitialCustomEventDelegate.h in Headers */, + A4BDF3A7DF9F9E4587DAE238B8BDDAF5 /* MPPrivateRewardedVideoCustomEventDelegate.h in Headers */, + 16A46E45A1460FAB73049BE0F6B257D4 /* MPProgressOverlayView.h in Headers */, + 4FF30CA83CBF7B234F1EC39DFAA3B5FE /* MPRateLimitConfiguration.h in Headers */, + 02479249D93077FD40359F71214A8616 /* MPRateLimitManager.h in Headers */, + 0BB2A6FF34D8ED0616B3D43A7E78CADA /* MPReachability.h in Headers */, + 19D63109C16032532E3E0190FABA0E8B /* MPReachabilityManager.h in Headers */, + FBB08756A57C8B6E9A73A01905A98009 /* MPRealTimeTimer.h in Headers */, + F32861B7E19C50912AF2B80016F03B3C /* MPRewardedVideo+Internal.h in Headers */, + 0F2C3F1663A541C4B95F63121BB34584 /* MPRewardedVideo.h in Headers */, + 899C6CAC4D19F0735AF8BDD7AF90B1F6 /* MPRewardedVideoAdapter.h in Headers */, + C5E467CCFE9B91D80955C8EF02EE676D /* MPRewardedVideoAdManager.h in Headers */, + 11A283A7AFE0AB48F20E4AE028DA30FD /* MPRewardedVideoConnection.h in Headers */, + 09B219D7B8DB72868B145A5FEB6A9398 /* MPRewardedVideoCustomEvent.h in Headers */, + 32A423E22C6D24FDEA50B25923F729F9 /* MPRewardedVideoError.h in Headers */, + E643F1079B5FDF8F5E524211AE40DCC0 /* MPRewardedVideoReward.h in Headers */, + 193F37980F9C6C592DC4610BDA125962 /* MPServerAdPositioning.h in Headers */, + E376898278769F32D9D5026F5728E021 /* MPSessionTracker.h in Headers */, + C22EEF15745C025AC0DB2E048BE47BAC /* MPStaticNativeAdRenderer.h in Headers */, + E6201AAE15DEFDCAC9E5E45E702C6C87 /* MPStaticNativeAdRendererSettings.h in Headers */, + 2EAE1E7925D5EE2FE81AB1413A656718 /* MPStopwatch.h in Headers */, + 1C39143A215F79C26B4D61D20DB7B7B1 /* MPStreamAdPlacementData.h in Headers */, + 3A2007CA85BFA9A086602C7C5620F6D2 /* MPStreamAdPlacer.h in Headers */, + 62B59E460675C59A7097DF0782BD8729 /* MPStreamAdPlacerDelegate.h in Headers */, + 2176790F0B08289BB7C0955A8CCA3006 /* MPTableViewAdPlacer.h in Headers */, + BAC2FB9A585F1D6C704DD6EA20D2EF03 /* MPTableViewAdPlacerCell.h in Headers */, + BA329794EDF2DD10438C7A3B4AB0C78E /* MPTableViewAdPlacerDelegate.h in Headers */, + A8C1DFB20CDD8F99F65279D7C9105801 /* MPTimer.h in Headers */, + C5E0CA2B3003C90D9A3153DA06C8E70C /* MPURL.h in Headers */, + D33C29C93C0990769B0F7FAE3510F982 /* MPURLActionInfo.h in Headers */, + AB0D45A3ABAB8CEA33A4C2C6682594ED /* MPURLRequest.h in Headers */, + 092CE72389BDFA1A1B7B2AFF8816AB17 /* MPURLResolver.h in Headers */, + FEE8A77B49B345E0C091D8B5F8E0BD16 /* MPUserInteractionGestureRecognizer.h in Headers */, + D220F58AE120E0BD26BC3168EE919F25 /* MPVASTAd.h in Headers */, + 1633DF5A442EC685F10DBFD9238BE165 /* MPVASTCompanionAd.h in Headers */, + 7A4E77DA4FC04AEA1E75266D6603F3E4 /* MPVASTCreative.h in Headers */, + 5AD957A1794F4B407F1E0A2B092AC18C /* MPVASTDurationOffset.h in Headers */, + B6C492026D450D440902B5F5F79F233B /* MPVASTError.h in Headers */, + F81F0FE191D29B67581DA0C863842BBA /* MPVASTIndustryIcon.h in Headers */, + C5B7B84103999E2D556E3DECE987E2ED /* MPVASTInline.h in Headers */, + E41E542C60DDCD811442E2AE0712E998 /* MPVASTLinearAd.h in Headers */, + F8878443E20309F3B6ADD0EBF8B73A4D /* MPVASTMacroProcessor.h in Headers */, + FA6CEADC7B781B6113531E01EEB5F1A3 /* MPVASTManager.h in Headers */, + D5FDF3A85F9834AF8D6534B11D90872D /* MPVASTMediaFile.h in Headers */, + 9044E7DB3D14ABDFCEB2ED2669056D60 /* MPVASTModel.h in Headers */, + 4F9B7E01E401DF1E29C59140E80E8028 /* MPVASTResource.h in Headers */, + 8CF1CACB012A40FBC7A73BD745892939 /* MPVASTResponse.h in Headers */, + FB310CF1A49200A95E429CE45FF32109 /* MPVASTStringUtilities.h in Headers */, + 239E937E59FAD1E5DD289BDE15C11ACF /* MPVASTTracking.h in Headers */, + CF75D1A3884DE92C4EEC8E69AE509FBB /* MPVASTTrackingEvent.h in Headers */, + ACE52F73FE8EA2D25FC60AA41ECBACD5 /* MPVASTWrapper.h in Headers */, + 8E137DC5E8951A24AAEC957BCB6559E8 /* MPVideoConfig.h in Headers */, + 4F242BEAE76C327AC9881A58B353183E /* MPViewabilityAdapter.h in Headers */, + 49DA2A16B499FCD25602C1BC80C9E2E5 /* MPViewabilityAdapterAvid.h in Headers */, + 86DDBC7D015B17059B6F59072C6C1FF5 /* MPViewabilityAdapterMoat.h in Headers */, + 2FFF8BF681C383C602CE763BBCC3EE51 /* MPViewabilityOption.h in Headers */, + 36D4D66627866DF3A7B6AFD125C12F54 /* MPViewabilityTracker.h in Headers */, + 9F0FB121CF133CF44B2FD7C516139F12 /* MPWebBrowserUserAgentInfo.h in Headers */, + 65B7139EE1EC65CD58038003683D7F5E /* MPWebView+Viewability.h in Headers */, + C490F00F45D01A4A560A423AA9C649EE /* MPWebView.h in Headers */, + 2181E14B3686E2546B15655362A5CE7A /* MPXMLParser.h in Headers */, + E8C975363C56DE178CAC0C48D42696CF /* MRBridge.h in Headers */, + 5C9D9FC9B18AEF09EEFD1359A88DE354 /* MRBundleManager.h in Headers */, + A72591EDDA14B3E826D3BD557F237ADF /* MRCommand.h in Headers */, + DDEA2121BF00460785B6E133B7E88BDF /* MRConstants.h in Headers */, + 8841C5C992BC89A040D8610CC08F83D1 /* MRController.h in Headers */, + 442BD9028E6021220369BBE40C869FA1 /* MRError.h in Headers */, + F61879584F19C73EDA297B8668E6F686 /* MRExpandModalViewController.h in Headers */, + FB6FE92203D4575B3A21F161A30D1F80 /* MRNativeCommandHandler.h in Headers */, + 648C9247C15264ED1D27904A3A4E6CD3 /* MRProperty.h in Headers */, + 998F60E61CA9E5FBBC160C4C28B4042C /* MRVideoPlayerManager.h in Headers */, + AEEFFB0497E3A8B6A09A8E94E8C19381 /* NSBundle+MPAdditions.h in Headers */, + 78CBF367C2EECFFA094EA7B0F097B5C7 /* NSDate+MPAdditions.h in Headers */, + 131664ACEF880A9531E746ADB96E40CC /* NSDictionary+MPAdditions.h in Headers */, + F00EFB863CAC794A2D5F81CC6A8F6911 /* NSError+MPAdditions.h in Headers */, + 967EAD0A3C269D5250C44C5912A23918 /* NSHTTPURLResponse+MPAdditions.h in Headers */, + 5E0B18790B27E40B095961010BC7FEFB /* NSJSONSerialization+MPAdditions.h in Headers */, + 94DBAA96B2E94B3EDBA5CE812B5871C8 /* NSMutableArray+MPAdditions.h in Headers */, + 89267435178CA68399198F8EEF4F3E22 /* NSString+MPAdditions.h in Headers */, + CE61BCC5F7CE907728D40CCC6DF10DC8 /* NSString+MPConsentStatus.h in Headers */, + 247E6480310ABC7E378FE956656D441F /* NSURL+MPAdditions.h in Headers */, + 3F1AA1FF23FA156ABDD8B1BDD34BEA1C /* SKStoreProductViewController+MPAdditions.h in Headers */, + FB7BFC6B27D1B01592B395A388BE0B79 /* UIColor+MPAdditions.h in Headers */, + F26A30A0DA5A07CA6BC786188F535D9F /* UIView+MPAdditions.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2CEB9E13BA4FB4549F88D757DBE2B57A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 804B7A7A3554377F87BEFE7A5B3E686D /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */, + 2D99CBD579A9015A5640C0E351276A49 /* FBSDKAccessToken.h in Headers */, + 7EB36B65E3C197BDA6BF5697C763EB33 /* FBSDKAccessTokenCache.h in Headers */, + 4908454DC030A1EB3F2E9F1F0D78BE20 /* FBSDKAccessTokenCaching.h in Headers */, + CC0D5667D474D47C9D19A9007C807B2A /* FBSDKAccessTokenExpirer.h in Headers */, + 778EFD2D0AA5936ABE6FE664AD0A9D35 /* FBSDKAddressFilterManager.h in Headers */, + 18CD066F9B767E6DA031CBF880EEDAFC /* FBSDKAddressInferencer.h in Headers */, + 62EFCDB438C72C641CFF5328FD56682A /* FBSDKAppEvents+Internal.h in Headers */, + 56D703DD018DEE06A04F26477DEB2EF4 /* FBSDKAppEvents.h in Headers */, + 9E681A9E18BEFF00C5980154AFEDFF4D /* FBSDKAppEventsDeviceInfo.h in Headers */, + B7F22139B1E7A57FD250A7AA1152761C /* FBSDKAppEventsState.h in Headers */, + 16A2606A4DB0F520D7D7092296A2C9EE /* FBSDKAppEventsStateManager.h in Headers */, + 259131DF0D82AB297F9007362A06C8C8 /* FBSDKAppEventsUtility.h in Headers */, + 817276D4EA1F987BED80809EF03D7730 /* FBSDKApplicationDelegate+Internal.h in Headers */, + 2EA5D06D14115FDFAE4A694FAD834D66 /* FBSDKApplicationDelegate.h in Headers */, + E4AADBC57A59E02C6F797100689C639A /* FBSDKApplicationObserving.h in Headers */, + 44FFDE0A1B40896690C0F158FF7B21C9 /* FBSDKAppLink.h in Headers */, + 71325B3E0CB811C679E86F8E07C9835C /* FBSDKAppLink_Internal.h in Headers */, + 314E87AA88A3568D21AD51E7DFBDB21F /* FBSDKAppLinkNavigation.h in Headers */, + B6FDED9E03376A01BBCEF073F10D5E52 /* FBSDKAppLinkResolver.h in Headers */, + 62B93BCFED9447D1237AB02F03B74B34 /* FBSDKAppLinkResolving.h in Headers */, + F45B0DEDEAAD73B109EC444D31BCC525 /* FBSDKAppLinkReturnToRefererController.h in Headers */, + 0647ECD3719029CE0C841C220436BA72 /* FBSDKAppLinkReturnToRefererView.h in Headers */, + A24AFB37CD3D65296C23D68A6673FF81 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */, + 5660EEA8846479528BEAD1AF69B433FB /* FBSDKAppLinkTarget.h in Headers */, + 174CDEB53F83B7B140373D378E8A8CA5 /* FBSDKAppLinkUtility.h in Headers */, + E462BE763F4FA31600C8D31625CBA6B8 /* FBSDKAudioResourceLoader.h in Headers */, + 8EE0E622983E6E9B69C41AC47D6846E1 /* FBSDKBase64.h in Headers */, + E2FB83714AC2725E53D43E1DA2B9F856 /* FBSDKBasicUtility.h in Headers */, + EEA983AEF29CE65E91369951EA4D2BFC /* FBSDKBridgeAPI.h in Headers */, + 8D509A021EFDBAC4F49D47574975BEF5 /* FBSDKBridgeAPIProtocol.h in Headers */, + 2D827084DC0B994F907F1A99E7FBFB35 /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */, + 862A5DA61C28D4C7BD936893656373BF /* FBSDKBridgeAPIProtocolType.h in Headers */, + 4D2B6B69E167A21306EE3AF52210B8E4 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */, + 5961450F94738E41BEEC9B48CC6C5DC7 /* FBSDKBridgeAPIProtocolWebV2.h in Headers */, + 18BFDA6C7EFF38857F6CE47DA0EA2B58 /* FBSDKBridgeAPIRequest+Private.h in Headers */, + BA813553A8175149466B9CE80EB91FD2 /* FBSDKBridgeAPIRequest.h in Headers */, + 5F166B51A9E213AFF1E24E704C1B1C34 /* FBSDKBridgeAPIResponse.h in Headers */, + 097FCFF6FA371ED473D71C7CD9029CDB /* FBSDKButton+Subclass.h in Headers */, + 4D6A2D20610DB7DDCFE78E255DBB7BC6 /* FBSDKButton.h in Headers */, + CC93F5D18EBAD6473A9A80B2463A63CC /* FBSDKCloseIcon.h in Headers */, + 85DF52AA1E078B55BE63B8BE7969D85B /* FBSDKCodelessIndexer.h in Headers */, + 767C078B4C6A22B2E4D5878C5BE5B936 /* FBSDKCodelessParameterComponent.h in Headers */, + 4EB71F5A3C02FD4FEB8776B4CD310E08 /* FBSDKCodelessPathComponent.h in Headers */, + 994643393FF400075BDD02041BE1DA2E /* FBSDKColor.h in Headers */, + 625A7A6150E72573906A8EA6C2E2A7FD /* FBSDKConstants.h in Headers */, + 753FFD3F748311837199510717F4E9BD /* FBSDKContainerViewController.h in Headers */, + D0B2F480337B7A3EED740272DE79E97B /* FBSDKCopying.h in Headers */, + 5F232ABE66E4DB5C23DDB5804DD3BB1F /* FBSDKCoreKit+Internal.h in Headers */, + C7421D95D2E582BCCDE7E7AE74111504 /* FBSDKCoreKit-umbrella.h in Headers */, + 8AF367C4169DAD3CA7B92847F191EA18 /* FBSDKCoreKit.h in Headers */, + 424D77400804804D59F80064E83F7B9A /* FBSDKCrashHandler.h in Headers */, + D59951463EB36B14E5B116F76EDCAF0C /* FBSDKCrashObserver.h in Headers */, + C3E612990F8C93410D0AE58D7866B96A /* FBSDKCrashObserving.h in Headers */, + D922C8B8E4816C71A2224B8B8E6F947F /* FBSDKCrashShield.h in Headers */, + 8559003F0CFE87A98EB2FFCC5561D7B5 /* FBSDKCrypto.h in Headers */, + 23E05975E1539A5D9D5BD8E484D2AF85 /* FBSDKDeviceRequestsHelper.h in Headers */, + FD072A8CCC977B2E384E2EE9ACB09183 /* FBSDKDialogConfiguration.h in Headers */, + 621693D6508E92E1469D580D93BBA2DB /* FBSDKDynamicFrameworkLoader.h in Headers */, + E762434FB8357C4EEF51A507F07A0CC0 /* FBSDKError.h in Headers */, + 2172A807C228BBEAC230693E4DC56417 /* FBSDKErrorConfiguration.h in Headers */, + 20CA62FC571A4817256FC6C81C96BD3C /* FBSDKErrorRecoveryAttempter.h in Headers */, + DD2F269933E04993BFFBCF712350A1E0 /* FBSDKErrorRecoveryConfiguration.h in Headers */, + 24302196E3001D38B32F1DBF456D0715 /* FBSDKErrorReport.h in Headers */, + A323F77BB0C39585F5063E5D1F4C7CB3 /* FBSDKEventBinding.h in Headers */, + AD819AF5EC74A50F97D31108E7FB3CB7 /* FBSDKEventBindingManager.h in Headers */, + 1DB054560C116AFFBAD9D7631AE73411 /* FBSDKEventDeactivationManager.h in Headers */, + 538BFD599CA1BA7C99048D8A02533FA7 /* FBSDKEventInferencer.h in Headers */, + 4F5F245CFF777BDE31807DC864BE4A8A /* FBSDKFeatureExtractor.h in Headers */, + ED9C531A394DB72A8638950F9EE51F69 /* FBSDKFeatureManager.h in Headers */, + C37D8C509FC9799E33EF27B4E371E36C /* FBSDKGateKeeperManager.h in Headers */, + EEB783B198D694D8DAB50BAF4C80CC6D /* FBSDKGraphErrorRecoveryProcessor.h in Headers */, + 603B128B3D26CBD875A8CCAB8233A0F0 /* FBSDKGraphRequest+Internal.h in Headers */, + 4ED32D97F593E10E15F57F741F828504 /* FBSDKGraphRequest.h in Headers */, + 1C8B56BAF9532AE4BA85CF61DE4DB396 /* FBSDKGraphRequestBody.h in Headers */, + B2767BA0803662F0E5B0E1E6811B2CD2 /* FBSDKGraphRequestConnection+Internal.h in Headers */, + 4C9F66D9864B631B31D2AE4AECB456F8 /* FBSDKGraphRequestConnection.h in Headers */, + 2592A8DF103EB021E2909FBF2E62BD6B /* FBSDKGraphRequestDataAttachment.h in Headers */, + 1BA58ED4679E8E488E211FBB2518C89F /* FBSDKGraphRequestMetadata.h in Headers */, + 1DA1420CEBE99BBC22DECE157BD400C6 /* FBSDKGraphRequestPiggybackManager.h in Headers */, + 8AB0CFC27BC146E29BC6D6B6D400621B /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */, + F4B0E21B16B1979ED9D7564BA5265952 /* FBSDKIcon.h in Headers */, + E99E9B79DE4C8B08C9E2860E0B238948 /* FBSDKImageDownloader.h in Headers */, + A621829BC3E5F93D86A4D2901F7E71FE /* FBSDKInstrumentManager.h in Headers */, + 50AF83E9CCB5C878FDD6577FA4849E66 /* FBSDKInternalUtility.h in Headers */, + C9D9E5451AD69BF47E3E06721493E180 /* FBSDKKeychainStore.h in Headers */, + C43DB9A6CB32185147306E589DD08B56 /* FBSDKKeychainStoreViaBundleID.h in Headers */, + E1E1F2BBCC80829E556B3728FF380B2D /* FBSDKLibAnalyzer.h in Headers */, + 88CAF50E7B47E012C340C46F3C8940B4 /* FBSDKLogger.h in Headers */, + E17E02BC00417D9A5EAD55B77A666EF8 /* FBSDKLogo.h in Headers */, + 4568AA9DA70DAE130DE2DD367DAE3C04 /* FBSDKMaleSilhouetteIcon.h in Headers */, + 327F718CDCD2CBF416EE881353BCBBE8 /* FBSDKMath.h in Headers */, + 02036FBA7E928BD9C94C83F09882FDCC /* FBSDKMeasurementEvent.h in Headers */, + B66AAEA5A8CEA0751854F182C211FF78 /* FBSDKMeasurementEvent_Internal.h in Headers */, + 8505B82FFDB7CEB7AF2CF10DE143E342 /* FBSDKMeasurementEventListener.h in Headers */, + 6055746A15F10F410DAE146034C5B2C5 /* FBSDKMetadataIndexer.h in Headers */, + 62B4748927C99171F7D8D8C1E5633BF3 /* FBSDKModelManager.h in Headers */, + 1FE10080CED13A5FB6C62FCB095D67FD /* FBSDKModelRuntime.hpp in Headers */, + A4CD07154114E828A14B3FBA023A09B4 /* FBSDKModelUtility.h in Headers */, + 8B7EDAC95B7EC47A24E2856FB2FAA891 /* FBSDKMonotonicTime.h in Headers */, + A3E97A31D3756E1D02A41144E4AED2A6 /* FBSDKMutableCopying.h in Headers */, + 2FF66B848F716E266C6214BB0ACDD79E /* FBSDKPaymentObserver.h in Headers */, + C9E2BE2935BBB95C18C90C01647BF6EB /* FBSDKProfile+Internal.h in Headers */, + 3A2F00590EBA38075C48B4A94662BF38 /* FBSDKProfile.h in Headers */, + 634D4257786AD6D7B1DF9F3FD4FAD2F6 /* FBSDKProfilePictureView.h in Headers */, + 853DBDF36308091F44B9BE359CD1F85E /* FBSDKRestrictiveDataFilterManager.h in Headers */, + 8C6C0806DB2B7E1B6BF730C3DAD40C6E /* FBSDKServerConfiguration+Internal.h in Headers */, + B7A47A54476F57192ECC997BE03D1FF7 /* FBSDKServerConfiguration.h in Headers */, + 1F5BE42904AD681ACACFD1530102B183 /* FBSDKServerConfigurationManager+Internal.h in Headers */, + DE498982A95D2F08119B4B854E0F68B7 /* FBSDKServerConfigurationManager.h in Headers */, + 4E5F687BB4BCCC1D578D55CE096B33BE /* FBSDKSettings+Internal.h in Headers */, + DB25A0F191FC76FF5EFC77139025CBD4 /* FBSDKSettings.h in Headers */, + 71586277FBCF79A1B72BDD4B2BDC2FD2 /* FBSDKStandaloneModel.hpp in Headers */, + F5FBABCC8A78388D18BDF2EDFCB57C87 /* FBSDKSuggestedEventsIndexer.h in Headers */, + D388DF85A06EAB1B331E8BB15EFD7661 /* FBSDKSwizzler.h in Headers */, + 330ECEDBC06A84C77024FC004C2358B7 /* FBSDKTestUsersManager.h in Headers */, + C4F041B195BEBE34216663CC8C14AC09 /* FBSDKTimeSpentData.h in Headers */, + 8555C431D4740655C8447CD66BB74038 /* FBSDKTriStateBOOL.h in Headers */, + 711EAB36727C177F69C6D454D656D438 /* FBSDKTypeUtility.h in Headers */, + 1392887D80328361C0E43DEFDEC31920 /* FBSDKUIUtility.h in Headers */, + FEA041E6D6FFCA7B58294A6065C4D30C /* FBSDKURL.h in Headers */, + EF963020D1F4C9015F426FF4000FD2FE /* FBSDKURL_Internal.h in Headers */, + 733C1410A5EC2221CF95DDC44D66499C /* FBSDKURLOpening.h in Headers */, + 1212CE4EE0D7E7A1F51C0B5D5FD54B74 /* FBSDKURLSession.h in Headers */, + A1E9D903AD5CA376C03D69F39EF32A6F /* FBSDKURLSessionTask.h in Headers */, + 2C585B72F41236E4F31D8F5365777E14 /* FBSDKUserDataStore.h in Headers */, + 12F9C731955A1B386C05ED94967C924E /* FBSDKUtility.h in Headers */, + 36230572D1A4C19B13BBB2D8DAB9BF6F /* FBSDKViewHierarchy.h in Headers */, + B21CCF8F79D8970BA8E5769C2522F5C6 /* FBSDKViewHierarchyMacros.h in Headers */, + 526873BB539FE91A022658D77C14C53A /* FBSDKViewImpressionTracker.h in Headers */, + 9BA3E0E9A45078DB22331D8AE17C4848 /* FBSDKWebDialog.h in Headers */, + B272DEF0933D936168CA2765BB53355A /* FBSDKWebDialogView.h in Headers */, + 0FCC22129D09EA37628E3B2D2B251FC2 /* FBSDKWebViewAppLinkResolver.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3552B4FAA86ACCF631231DC3FF34C9FA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E2B32179A5F079FED54DEB230159198 /* Pods-MAPS.ME-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1546,136 +3541,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9CE8AF9083D8E6955DAEC85701243432 /* Headers */ = { + C8709933173FA8AACB0115659C31C65C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - D174F8CE70D18D1904F725D75249EFAD /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */, - AA2E43D76012D0355AEBE42D2BA151E5 /* FBSDKAccessToken.h in Headers */, - 3F01FAB6B6B6FE82EF13FC60DC42365D /* FBSDKAccessTokenCache.h in Headers */, - 1C55D7E1D61E47900C0E39CF5444FF2E /* FBSDKAccessTokenCacheV3.h in Headers */, - 03A961EF502CF16B268E7AB1EA4BF971 /* FBSDKAccessTokenCacheV3_17.h in Headers */, - FC1367FC564AA395C75292A8179B20B9 /* FBSDKAccessTokenCacheV3_21.h in Headers */, - 5036B2478664077D7CB5DAE371EBA7D6 /* FBSDKAccessTokenCacheV4.h in Headers */, - 8F8D2F81A79D6A614004763731770121 /* FBSDKAccessTokenCaching.h in Headers */, - 5C704B83CD1CB8E88225EBD2754E0CB4 /* FBSDKAccessTokenExpirer.h in Headers */, - 8FDACDF0E1DED05189FFC2B4CB89E073 /* FBSDKAppEvents+Internal.h in Headers */, - 2361179E43B17C5FED31AA9E55C2C2B7 /* FBSDKAppEvents.h in Headers */, - 727FBBAE12B35ECC41AA7A21BF886846 /* FBSDKAppEventsDeviceInfo.h in Headers */, - 62CC14C253CB00AFCE0CEE9C7357FD05 /* FBSDKAppEventsState.h in Headers */, - 87D16CABD153A174EF38012B6A9A1D39 /* FBSDKAppEventsStateManager.h in Headers */, - D406844371781C3D90359F16C223C26B /* FBSDKAppEventsUtility.h in Headers */, - 0DBB9722D161CC29745C39552DF39053 /* FBSDKApplicationDelegate+Internal.h in Headers */, - B192552C493DF252BB8770D3F696603E /* FBSDKApplicationDelegate.h in Headers */, - 9584AD03B1B97830D2F066D0FB6132E2 /* FBSDKApplicationObserving.h in Headers */, - 9DCC14D4925D13E71AE9EE0C94D0221A /* FBSDKAppLink.h in Headers */, - 4FE7163B9F3F9CD0D290AA6291F62368 /* FBSDKAppLink_Internal.h in Headers */, - 38ED79251F5A4ED6C23952215CD187D6 /* FBSDKAppLinkNavigation.h in Headers */, - FDBE239A028CA466179E98952F8C0737 /* FBSDKAppLinkResolver.h in Headers */, - B40FB964A33670827C695C1686470D00 /* FBSDKAppLinkResolving.h in Headers */, - 48D8372040EEED0D099553806C45D829 /* FBSDKAppLinkReturnToRefererController.h in Headers */, - 219701FD316A0824C25B25434896A5E0 /* FBSDKAppLinkReturnToRefererView.h in Headers */, - 7C7D5A0F79491656C13B975F2A9333B1 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */, - AED378BD18D92B2221C5121954D28E20 /* FBSDKAppLinkTarget.h in Headers */, - 26EB677496359A0D19AD8ADBDCCE672F /* FBSDKAppLinkUtility.h in Headers */, - 6CBD31AAF9805916BB5CAAD226A84109 /* FBSDKAudioResourceLoader.h in Headers */, - D309229F43D15B9BB95D2D43FE6EB3C0 /* FBSDKBase64.h in Headers */, - 4CABA3E2E1ADBBCB0BBBBF3F0C4D5A97 /* FBSDKBoltsMeasurementEventListener.h in Headers */, - C0402D89B9FBB83740F9699072D136D6 /* FBSDKBridgeAPI.h in Headers */, - CA2F02EE3D7FF0CBD732FA22BDE7C9EE /* FBSDKBridgeAPICrypto.h in Headers */, - E53D9952C2FEEEF0FB01DEAE0584E350 /* FBSDKBridgeAPIProtocol.h in Headers */, - 37ECDA45CCC9952B527202C4AE904DC8 /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */, - 40695FF29D946370F434ADE183D57AE2 /* FBSDKBridgeAPIProtocolType.h in Headers */, - 0F934CFF701AD67053070C32579E52E0 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */, - 55527BFE70C5FCCAEE1BAB440699C22C /* FBSDKBridgeAPIProtocolWebV2.h in Headers */, - 39F66138BDB07E0D56A9BDFB5B088BC7 /* FBSDKBridgeAPIRequest+Private.h in Headers */, - AFE65CBADAE0055A087B4BCE9FD89703 /* FBSDKBridgeAPIRequest.h in Headers */, - E39B48EF5E543B48A32CC6902D3E460A /* FBSDKBridgeAPIResponse.h in Headers */, - 03DEF0DDA892A347C8BAD19D4673CAAE /* FBSDKButton+Subclass.h in Headers */, - 87825071C366F02F9C414F404FBFF120 /* FBSDKButton.h in Headers */, - 1416449DDF1CA04F7A932B6B0AE14015 /* FBSDKCloseIcon.h in Headers */, - 93AF52726896C0563EDE613C7078D1A5 /* FBSDKCodelessIndexer.h in Headers */, - 0ECC1D9FA87CCA19FE63CF0A4F2EE139 /* FBSDKCodelessMacros.h in Headers */, - 3C155CA17DFC9FDD2C7734D491185130 /* FBSDKCodelessParameterComponent.h in Headers */, - 198AE99247767682585D194C9EAB3E71 /* FBSDKCodelessPathComponent.h in Headers */, - 61C76E507B6DCCBAD633656FFA32AAA6 /* FBSDKColor.h in Headers */, - 7C0FF5010BEA0F608AB0D019462683AF /* FBSDKConstants.h in Headers */, - C271BD7CB97D8E5AC5B253F5E97784B3 /* FBSDKContainerViewController.h in Headers */, - 3C9B65BA5622D23B3A598B317B68FFC9 /* FBSDKCopying.h in Headers */, - 1C013DA5FE16422D89FB79420EA68D78 /* FBSDKCoreKit+Internal.h in Headers */, - 1D11560616E4E01DE89BF75536834400 /* FBSDKCoreKit-umbrella.h in Headers */, - A4A9067F0B8D658E12DAB186479D26CF /* FBSDKCoreKit.h in Headers */, - 7BB65BEA9B39943A40F0DE4B3F28BEE7 /* FBSDKCrypto.h in Headers */, - 4FA1046559A93D87FD9CDF7E300CC6D8 /* FBSDKDeviceRequestsHelper.h in Headers */, - A0E7EB291A2EE4760723192D4E887F91 /* FBSDKDialogConfiguration.h in Headers */, - 5F56188536467F6871A49AC13551D754 /* FBSDKDynamicFrameworkLoader.h in Headers */, - 6407DD235B291ABFBE96368D56A49EF8 /* FBSDKError.h in Headers */, - 05B15F025F54A4BF7B993C2DE595534B /* FBSDKErrorConfiguration.h in Headers */, - C809C91B427A09A2D04B371DABB1134E /* FBSDKErrorRecoveryAttempter.h in Headers */, - 7CA0AD9FBBF67B8280E183A3047085AB /* FBSDKErrorRecoveryConfiguration.h in Headers */, - CF35A9A3F2FF6F46C2C4A430035631A6 /* FBSDKEventBinding.h in Headers */, - 92A558D3F65DCFE0374E479A33207B06 /* FBSDKEventBindingManager.h in Headers */, - 131C35368E74AC3DD117EC4A5A7264AC /* FBSDKGateKeeperManager.h in Headers */, - B8F9A6922C4037F0639BDB89E9D93A2B /* FBSDKGraphErrorRecoveryProcessor.h in Headers */, - B2683A7C5415A0B9DBE2C2FBAAD53753 /* FBSDKGraphRequest+Internal.h in Headers */, - FCC372CC88EEB6C68CE7B1E4058ED542 /* FBSDKGraphRequest.h in Headers */, - 4C54A369045C29BBAB1E27793A749894 /* FBSDKGraphRequestBody.h in Headers */, - 05F23DF9FF1E3D7747151711215B6C28 /* FBSDKGraphRequestConnection+Internal.h in Headers */, - E007CAE2FE8029E29A3762ACA4C94FDF /* FBSDKGraphRequestConnection.h in Headers */, - 12DDECC384C52B4107A7DBD6DE953DAF /* FBSDKGraphRequestDataAttachment.h in Headers */, - BAF168A84ECE353258270601CD112A75 /* FBSDKGraphRequestMetadata.h in Headers */, - EC9B1C7762F0308ECAAF72B228B6648C /* FBSDKGraphRequestPiggybackManager.h in Headers */, - 7B84A7EB3F220FB5248B01D3A31C2223 /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */, - 8036BD4414D266EEB1CC15636AE3BE8D /* FBSDKIcon.h in Headers */, - 694D671B5B74EFD18377FBDC51CFFDEB /* FBSDKImageDownloader.h in Headers */, - FF83C21198A892399F2F1B53AFCDB16A /* FBSDKInternalUtility.h in Headers */, - 6ED3073B1BA75DF2E579DF112285AB88 /* FBSDKKeychainStore.h in Headers */, - B3D6DF744ADE53B035EF51C5AECDE204 /* FBSDKKeychainStoreViaBundleID.h in Headers */, - A3638D268EBB7CC71DFDA8CCFB0BA1EE /* FBSDKLogger.h in Headers */, - 82AB767166F2A5771472A4165D656C4D /* FBSDKLogo.h in Headers */, - 1626932AD3FBB3480DB2956E7A5628B7 /* FBSDKMacros.h in Headers */, - 24184565A7C9A3E0DB3B68FAF53BABE8 /* FBSDKMaleSilhouetteIcon.h in Headers */, - B4B8758C84E6F1DBC7C66CB55755BACF /* FBSDKMath.h in Headers */, - 7D8DC6A727A36C40BCEE184D8F70DCCA /* FBSDKMeasurementEvent.h in Headers */, - 509726CB1F0C64832383AD492F8CBA88 /* FBSDKMeasurementEvent_Internal.h in Headers */, - D2946E16CA9FA73C84FEF1FC245E95C7 /* FBSDKMonotonicTime.h in Headers */, - 75AB19145D3C68B8DB03E5939C6AB43D /* FBSDKMutableCopying.h in Headers */, - 5A3444B667D82F5801495CB4C9209A70 /* FBSDKPaymentObserver.h in Headers */, - 0CCFB73674D71117963F5DEBD89A372B /* FBSDKProfile+Internal.h in Headers */, - 2A1A0D933CB0E19929547CF2F55E197B /* FBSDKProfile.h in Headers */, - FA4821D3C8D0C0587762BC94D1E5ED61 /* FBSDKProfilePictureView.h in Headers */, - EBDAAC646E118366895D9B3EBE4DD444 /* FBSDKServerConfiguration+Internal.h in Headers */, - 9B8B53EF72C804A9EB556A24C112EB8C /* FBSDKServerConfiguration.h in Headers */, - 774220E1FD8E6ABEB514216924496036 /* FBSDKServerConfigurationManager+Internal.h in Headers */, - 928794E199CCE0D68408EE7910502AB5 /* FBSDKServerConfigurationManager.h in Headers */, - 510553EB83265D0A6A611765D87165C9 /* FBSDKSettings+Internal.h in Headers */, - C436933A3D55576FEDB2AC6A08A4EDC7 /* FBSDKSettings.h in Headers */, - F7E70B83F7C654498F83BA0D5E34662F /* FBSDKSwizzler.h in Headers */, - 0A932C150623473A43628372CD652088 /* FBSDKSystemAccountStoreAdapter.h in Headers */, - 16DE65A99D6607A33DE7423B592ED278 /* FBSDKTestUsersManager.h in Headers */, - D347D2D531C0DAF090792446DA63BD80 /* FBSDKTimeSpentData.h in Headers */, - E26FEC03EC46FE391B0716507CEE0254 /* FBSDKTriStateBOOL.h in Headers */, - 3964446C9F47735E0AF4259F4BCCDBF6 /* FBSDKTypeUtility.h in Headers */, - A62562A26B23FF1BA8CAEB554F0C339C /* FBSDKUIUtility.h in Headers */, - A25E71DD4B4C0D791A1923DCF2CB3204 /* FBSDKURL.h in Headers */, - 20803318BF15F6F2FEE623658B2D2C98 /* FBSDKURL_Internal.h in Headers */, - FA3AE69823D9862377338B6AB33A51DE /* FBSDKURLOpening.h in Headers */, - 4F86D108A95272B1C8B4786818D602CA /* FBSDKURLSessionTask.h in Headers */, - B4F3182206C3B8A874CBF81B933D38E8 /* FBSDKUserDataStore.h in Headers */, - 1451ACF5365C93981FF0EBB219BC00EF /* FBSDKUtility.h in Headers */, - 98E42B76428E08DB5DFF9190A70443F9 /* FBSDKViewHierarchy.h in Headers */, - EC14CBCBD39FC34A6D85A19E5D414972 /* FBSDKViewImpressionTracker.h in Headers */, - 17A3E72C74C074D9CB2B6D57AF15A848 /* FBSDKWebDialog.h in Headers */, - CC285CFB2ECF6BF4615B0F1F3EB09977 /* FBSDKWebDialogView.h in Headers */, - B03625A70EB62172C2D78133BE00A5CA /* FBSDKWebViewAppLinkResolver.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A97D35961D9A37B709CA8EE4D51E7DFB /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 800FDD35614483EFB7CF8D15BB6F4590 /* Pods-MAPS.ME-umbrella.h in Headers */, + 6EC8F1E79495D3C82BC0922F64A9304F /* FacebookAdapterConfiguration.h in Headers */, + 80FFE96C93D46CE6A8BD9EA6F28BC425 /* FacebookBannerCustomEvent.h in Headers */, + 40CC5DDC74579949569909FC11FFC0DF /* FacebookInterstitialCustomEvent.h in Headers */, + AD569C7DABFA469E3996A349ED215993 /* FacebookNativeAdAdapter.h in Headers */, + DF2ADA01BAE8FFB98AAA7FD20891AD48 /* FacebookNativeAdRenderer.h in Headers */, + A05F1219176C7E28D47B8310BC89D653 /* FacebookNativeCustomEvent.h in Headers */, + 25AB320E015896E84AFDE5EAE60DF73F /* FacebookRewardedVideoCustomEvent.h in Headers */, + BEDAA29F039AF2F6B4537D6D3CDEC484 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1721,60 +3598,63 @@ }; 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 0C8C0D3C55FF12F1DB88732D62C94BAD /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */; + buildConfigurationList = 76ED545758C9056F2236E0F1AA9D714E /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */; buildPhases = ( - 9CE8AF9083D8E6955DAEC85701243432 /* Headers */, - DAEFE07E9F77566DD862274F159F13D8 /* Sources */, - 61DEAED519118049D1C0606E95E987B9 /* Frameworks */, - AF858219EB42D75940A2F2C16553691B /* Resources */, + 2CEB9E13BA4FB4549F88D757DBE2B57A /* Headers */, + 0BC411A1A84984A8D425D9FFC045138D /* Sources */, + 1A8437E8639C6B124FCC635FBFB343BD /* Frameworks */, + BCA1D8C418FC7A12338AB4B7C23E4DF6 /* Resources */, ); buildRules = ( ); dependencies = ( - AD37BB7C6F54577458810AC01FF4B4C7 /* PBXTargetDependency */, ); name = FBSDKCoreKit; productName = FBSDKCoreKit; productReference = EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */; productType = "com.apple.product-type.framework"; }; - 42465A188431886AB035275F049824D3 /* Bolts */ = { + 8D115411ACEA387C9D854E11FDDD914F /* MoPub-FacebookAudienceNetwork-Adapters */ = { isa = PBXNativeTarget; - buildConfigurationList = 4EFC6F48627135CE71DEAF73738FFDA8 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = 47259152A956C00811D7147734A8451D /* Build configuration list for PBXNativeTarget "MoPub-FacebookAudienceNetwork-Adapters" */; buildPhases = ( - 1625B3D8042B4904B08FC5D5201F49E1 /* Headers */, - 8E6D7DD5E767C7E7B61A9BF2D053931B /* Sources */, - BAF65F3088AF4B3369F295875DB1A418 /* Frameworks */, - F1E8DFD71EE099DC937F35A1652678A1 /* Resources */, + C8709933173FA8AACB0115659C31C65C /* Headers */, + C4DFBFB01C4D8091EAF1B59290668945 /* Sources */, + 72D7D04F29459BCECD7B754DA42E545E /* Frameworks */, + F937EC9C6A0FDD8A83215EC8876B199E /* Resources */, ); buildRules = ( ); dependencies = ( + 4DFE57D29D0E575ABE21D3959C7464D8 /* PBXTargetDependency */, + 6E24786D3AFE0ED68A54F67AC02B1A01 /* PBXTargetDependency */, ); - name = Bolts; - productName = Bolts; - productReference = F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts.framework */; + name = "MoPub-FacebookAudienceNetwork-Adapters"; + productName = "MoPub-FacebookAudienceNetwork-Adapters"; + productReference = 31C596999512C76A20CD0BAD735E6110 /* MoPub_FacebookAudienceNetwork_Adapters.framework */; productType = "com.apple.product-type.framework"; }; A05F1244859CDEEE96C5DBB250BB0266 /* Pods-MAPS.ME */ = { isa = PBXNativeTarget; - buildConfigurationList = CD0E7B75DDDCA9971C59A75F5F735AF9 /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */; + buildConfigurationList = 9DBE88E9E76D4E0512EB057E5F9AB74D /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */; buildPhases = ( - A97D35961D9A37B709CA8EE4D51E7DFB /* Headers */, - 4DE97F898785C4C80B4EA92C339B23DA /* Sources */, - 7B18E34A7D3D9519A4E8ED95437962A0 /* Frameworks */, - 5D4B6F7CE6D2F0A00D3557108ECB43BA /* Resources */, + 3552B4FAA86ACCF631231DC3FF34C9FA /* Headers */, + A404A9869C03D458EC24DD30F7835B7C /* Sources */, + AC445D70BC0916420847BD605276DA3E /* Frameworks */, + B2102DFE97E5A4A39B4C84BD8CB461D8 /* Resources */, ); buildRules = ( ); dependencies = ( - 1F722C9C1A690091CB2C635E7E9892B4 /* PBXTargetDependency */, - B216B9AC3D17741524C91C963DD8E1E1 /* PBXTargetDependency */, - 77BFF3B016D0AD813ACC16DDB382BDFF /* PBXTargetDependency */, - A8FDC8E05F89A678CCA653E20515FA16 /* PBXTargetDependency */, - 1F122504ABCC62CA60595B18B2167225 /* PBXTargetDependency */, - 6D03F9CD8C687C553623027C11036F15 /* PBXTargetDependency */, - B2D5DB037E68143BD8E29D119734C1E6 /* PBXTargetDependency */, + 6529C86874FD4DEA62BBF9E6FB34430C /* PBXTargetDependency */, + 931880C5EA889B2F01E4CCBF8A7ECF11 /* PBXTargetDependency */, + 9E864548E31ECADEF3CD9BFD26A4B94F /* PBXTargetDependency */, + 029194B2F4EA41FAC2D9AC5BE7C7CE4D /* PBXTargetDependency */, + 93B92E043BC681B4EF093AFCD02C2017 /* PBXTargetDependency */, + 07D5D7EBC38677002D76239AE8E12419 /* PBXTargetDependency */, + 86050E10750E9F4494B9A0EEFFC02AB5 /* PBXTargetDependency */, + 53254A43C6BCE60BBF641B1D6D8CB443 /* PBXTargetDependency */, + 6169C11455551BE58B6C1148583238D6 /* PBXTargetDependency */, ); name = "Pods-MAPS.ME"; productName = "Pods-MAPS.ME"; @@ -1799,6 +3679,24 @@ productReference = D6E470A0C684D4FBC08BDF7A28A2A38B /* ActionSheetPicker_3_0.framework */; productType = "com.apple.product-type.framework"; }; + BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6377DB413E1980A77072E63A49F61298 /* Build configuration list for PBXNativeTarget "mopub-ios-sdk" */; + buildPhases = ( + 26FDC25213B99218A2FFAAD562914653 /* Headers */, + 81CBFACA0E443700F09640C00300F3BF /* Sources */, + 727019B8B9FD77F412B1A6D4A7DC0A10 /* Frameworks */, + B178A53EF8EC54F604F65C3CC17BF75A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "mopub-ios-sdk"; + productName = "mopub-ios-sdk"; + productReference = 0A8924B6305C5116EA8035AE891818F6 /* MoPub.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1816,16 +3714,18 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 963283AC58D03237120F023CF78FD7FB /* Products */; + productRefGroup = 641DE686AED1710FC708E039476C3FD1 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( A43B25DDF20FCB9228471F8F5135C866 /* ActionSheetPicker-3.0 */, B0B23938B1EBCBAD2419AB6E9D222A0B /* AppsFlyerFramework */, - 42465A188431886AB035275F049824D3 /* Bolts */, + D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */, 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */, 10C5885FCB0908EF785774EE52473DAB /* FBSDKLoginKit */, 23EE62D8F7B4475F49FFAC72AEF81FAF /* Flurry-iOS-SDK */, + 8D115411ACEA387C9D854E11FDDD914F /* MoPub-FacebookAudienceNetwork-Adapters */, + BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */, A05F1244859CDEEE96C5DBB250BB0266 /* Pods-MAPS.ME */, 803EF1AFD27445A470912B1033353BFC /* Pushwoosh */, ); @@ -1833,13 +3733,6 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 5D4B6F7CE6D2F0A00D3557108ECB43BA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 708723D5D7E0C8CE318578EB80D01522 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1847,11 +3740,45 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AF858219EB42D75940A2F2C16553691B /* Resources */ = { + B178A53EF8EC54F604F65C3CC17BF75A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1FD7EE67FF9BD24D9FB17632834692D6 /* FacebookSDKStrings.bundle in Resources */, + 065AFFB7C4A2C242CC11CC4FF8B6856D /* MPAdapters.plist in Resources */, + 580B8ED267DC9D03681C5F4DF68C7853 /* MPCloseBtn.png in Resources */, + B764FF514CE79D03FEFB0B1C7EEAA7B2 /* MPCloseBtn@2x.png in Resources */, + E8867E9BAE40AB06BF3F495D967A34C5 /* MPCloseBtn@3x.png in Resources */, + 5749EF7E07CABE86B0CCED3245CE0E63 /* MPCloseButtonX.png in Resources */, + 284ECF9F62F883A3453B8D682FEADE25 /* MPCloseButtonX@2x.png in Resources */, + 94A4538D76D3E96D6A3ACFB8B864F398 /* MPCloseButtonX@3x.png in Resources */, + E2A5EAF2265A65CA9769D0A6152F245E /* MPDAAIcon.png in Resources */, + 854DD3D739187EB98A8CA8951816A7A6 /* MPDAAIcon@2x.png in Resources */, + C49593F0B56B8AE0ECF64F1B26A64E9D /* MPDAAIcon@3x.png in Resources */, + C18AF2F84B93E829BD8A76BD516903B0 /* MPMutedBtn.png in Resources */, + 1F8D42862BE064B299C205A54A721042 /* MPMutedBtn@2x.png in Resources */, + 94A6877945A38755C00F1F459BB407B9 /* MPMutedBtn@3x.png in Resources */, + C35D48D75D05B89392C23F912154B086 /* MPPlayBtn.png in Resources */, + 6655FD0C2FA08EFEA0DA4B85B5C6C275 /* MPPlayBtn@2x.png in Resources */, + 7E89EAA274BE2B10022D9B3E8BC8441D /* MPPlayBtn@3x.png in Resources */, + 4129AA8AE37E1E98947DA0D3DE542F9B /* MPUnmutedBtn.png in Resources */, + 726DE02C0632561539CB38CDAEA6BBF4 /* MPUnmutedBtn@2x.png in Resources */, + 1A1388F59CC87A356A480EAA4790741C /* MPUnmutedBtn@3x.png in Resources */, + 1C9F5FEE5AA1987F861AF00A869732BF /* MRAID.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2102DFE97E5A4A39B4C84BD8CB461D8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BCA1D8C418FC7A12338AB4B7C23E4DF6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9E2A96AFCE9CAFE79B2C403AD9141283 /* FacebookSDKStrings.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1869,7 +3796,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F1E8DFD71EE099DC937F35A1652678A1 /* Resources */ = { + F937EC9C6A0FDD8A83215EC8876B199E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1879,6 +3806,117 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 0BC411A1A84984A8D425D9FFC045138D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B5BB92F54F36648952B7B43C380B2E16 /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */, + 13F5D67C775733024B54D3EC30C0D066 /* FBSDKAccessToken.m in Sources */, + 9E00C23C1555AA3D7604A3655CA595F4 /* FBSDKAccessTokenCache.m in Sources */, + 9BDE03A113BCCE93A024C249A4FF1F11 /* FBSDKAccessTokenExpirer.m in Sources */, + 5F3AE8FE4839A87469D65A90C473E676 /* FBSDKAddressFilterManager.m in Sources */, + 227F8539FBCE66AB79DF33E2C3E93A60 /* FBSDKAddressInferencer.mm in Sources */, + C63E819562D9C176AA89EBD61764772A /* FBSDKAppEvents.m in Sources */, + ED817A7E9666C0B365AECEE707B94E9B /* FBSDKAppEventsDeviceInfo.m in Sources */, + 93418BCD4C1A01F71B3DEED73DDF6AC2 /* FBSDKAppEventsState.m in Sources */, + A8D12E18BCE4E2B17F0744323336B84E /* FBSDKAppEventsStateManager.m in Sources */, + F5D24230C39641F78C0DA21247C3AB88 /* FBSDKAppEventsUtility.m in Sources */, + 4174E2E2A7A7F063B1E791C270B77C2C /* FBSDKApplicationDelegate.m in Sources */, + BF5A87A4511EAFEB94E0E4F589934512 /* FBSDKAppLink.m in Sources */, + 5595739B682ABC08453C455F11AAAA81 /* FBSDKAppLinkNavigation.m in Sources */, + 597934736CCE39B52EE9802A726D3800 /* FBSDKAppLinkResolver.m in Sources */, + 263759F81B38648C674D39F8ABCA89C7 /* FBSDKAppLinkReturnToRefererController.m in Sources */, + A34BDD9B0D93EDB9B94080CA2A20ADE2 /* FBSDKAppLinkReturnToRefererView.m in Sources */, + 1F0D817911B245964C4421A3A283B0E9 /* FBSDKAppLinkTarget.m in Sources */, + 0E06F5DCF13DD9168D996070D4940CCF /* FBSDKAppLinkUtility.m in Sources */, + F2D8AEFEEE3E7D818E2B7FDE236AB49B /* FBSDKAudioResourceLoader.m in Sources */, + CED12A07E95C33A6F6E38332AB227EB6 /* FBSDKBase64.m in Sources */, + AB50BE1BFFB89FB20A90B80302EE2D87 /* FBSDKBasicUtility.m in Sources */, + B0FCD5B5793D7839B56EF408BADAF486 /* FBSDKBridgeAPI.m in Sources */, + ECADF5D3E08EE4EBA2D1C72F54F19B8A /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */, + 7B2245D85819B6D853DFD4768E7B4A09 /* FBSDKBridgeAPIProtocolWebV1.m in Sources */, + A5777451B6F23747D746F47D4238132D /* FBSDKBridgeAPIProtocolWebV2.m in Sources */, + 824BF771FCF57C0C182871F3B57C68B5 /* FBSDKBridgeAPIRequest.m in Sources */, + C37CE38415220932B38155BD3EC5F57B /* FBSDKBridgeAPIResponse.m in Sources */, + B9949DEA35326F5EC41F6DC03418752A /* FBSDKButton.m in Sources */, + A1B66BFE9F6A50AC7DFC9A1A5A0CBB51 /* FBSDKCloseIcon.m in Sources */, + 2468B6EBE3F97293BFA1AA5FD5F7BD9A /* FBSDKCodelessIndexer.m in Sources */, + 38978619C5E87325D5225A8B7795A3A2 /* FBSDKCodelessParameterComponent.m in Sources */, + 8FA0C73F0245B15D0F0431EBE81EECA6 /* FBSDKCodelessPathComponent.m in Sources */, + C48876F9C3087E035993B84C3C6AC27A /* FBSDKColor.m in Sources */, + 58A4DFF728B162C6EF90438378791B0B /* FBSDKConstants.m in Sources */, + 1469FBB91C8E8C656CEB5A04FF78C13E /* FBSDKContainerViewController.m in Sources */, + 1ED4A3CEEFFDDFECA906E10902B68BCC /* FBSDKCoreKit-dummy.m in Sources */, + 4810596752263774D32CD7263B35A136 /* FBSDKCrashHandler.m in Sources */, + 7F347E726A5B29C46ABEB4AA241A330B /* FBSDKCrashObserver.m in Sources */, + 155F5A6421D431B51973BA007D4B659D /* FBSDKCrashShield.m in Sources */, + 32A130CA48324CBD4ADCD5F62D189271 /* FBSDKCrypto.m in Sources */, + DF4DCB3DCE680F09750E65A4DD239757 /* FBSDKDeviceRequestsHelper.m in Sources */, + BD4A3D42A0EA06E90FEE0E56BFB96889 /* FBSDKDialogConfiguration.m in Sources */, + C991AD0A9329ADF6E8B16A4DA1B597D6 /* FBSDKDynamicFrameworkLoader.m in Sources */, + 4C87872CBD9016DC645C8C6E7ECEA602 /* FBSDKError.m in Sources */, + EC8913260E5EFD865FFCB4FE5D27C455 /* FBSDKErrorConfiguration.m in Sources */, + B36EA516901BCD3DF63C202EFE4C3C0C /* FBSDKErrorRecoveryAttempter.m in Sources */, + A9BE7579BF22DFBEBFDAFDB845CA690D /* FBSDKErrorRecoveryConfiguration.m in Sources */, + 2FD5001316F1879F6C68F3A0F10E5758 /* FBSDKErrorReport.m in Sources */, + 4227F6E3D7BA1AD407412D4A6FA4BCD1 /* FBSDKEventBinding.m in Sources */, + F2151BC04CD39E0DA7090A74265C09CA /* FBSDKEventBindingManager.m in Sources */, + FA3AA7E0F8F2B4C75D7CAC80B61883FD /* FBSDKEventDeactivationManager.m in Sources */, + 61AB85D1CC040D9CAF34BB266A0F3B76 /* FBSDKEventInferencer.mm in Sources */, + DA93BCB4AB338D2564FB41ECBAE73DE9 /* FBSDKFeatureExtractor.m in Sources */, + F72C9795E543C14E0CCA3DE702E2800F /* FBSDKFeatureManager.m in Sources */, + ABDB485D16D893AB11EB7173B54301E7 /* FBSDKGateKeeperManager.m in Sources */, + 9084B34C40D45898E85F699B20079482 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */, + 4647AF91CC80A4DF039BB0F4A765FD1A /* FBSDKGraphRequest.m in Sources */, + F39DF214A9F312AAC64147A90E503B6D /* FBSDKGraphRequestBody.m in Sources */, + 0D281BD5E830E4F4532F6BAD4B64B730 /* FBSDKGraphRequestConnection.m in Sources */, + 08E26B0F04957B7F250B7BD9E671E4DE /* FBSDKGraphRequestDataAttachment.m in Sources */, + C630D534C348B21A9B80C871F9B63338 /* FBSDKGraphRequestMetadata.m in Sources */, + BD6DD779349FC3417D505CBD1A7DA6C5 /* FBSDKGraphRequestPiggybackManager.m in Sources */, + F77DB69CA5034CD59D4014FC0E0F214A /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */, + 5B0A8438A25B3D1DC37225086074504E /* FBSDKIcon.m in Sources */, + BAAB3444DCAEB195141F8B5BD6919478 /* FBSDKImageDownloader.m in Sources */, + 9A1FA421DE5BBFD68E5FCEBBED07DE16 /* FBSDKInstrumentManager.m in Sources */, + 9FF2AC925005FDE7E4235E5F61778877 /* FBSDKInternalUtility.m in Sources */, + 66607BAEE968424CEB69EC8D173E1B78 /* FBSDKKeychainStore.m in Sources */, + AC8EBC4BD9ED76364A624C967DF95CDF /* FBSDKKeychainStoreViaBundleID.m in Sources */, + 59E848F4D0831D405A91897D56DC3266 /* FBSDKLibAnalyzer.m in Sources */, + 972501C66BD0378911249362C6CA68B3 /* FBSDKLogger.m in Sources */, + D0068271BF438A2176CAE513F6B4D0EF /* FBSDKLogo.m in Sources */, + 5649329A1FDB24C4A085BD1F9111BF5C /* FBSDKMaleSilhouetteIcon.m in Sources */, + 2649CD84E148F9F0266B216FA6C8C1F5 /* FBSDKMath.m in Sources */, + 3BC84D661D22FDECE7023C0212546BFC /* FBSDKMeasurementEvent.m in Sources */, + 858E64D71F101C506406D4D04BE34560 /* FBSDKMeasurementEventListener.m in Sources */, + F6251F594B3DDB13CE089C8459537B05 /* FBSDKMetadataIndexer.m in Sources */, + 1897175AB925298FA3C93F07F7D330E9 /* FBSDKModelManager.m in Sources */, + 7A5E9BA2743A6279BD278102DD2DB2E2 /* FBSDKModelUtility.m in Sources */, + 295EA9CDB46454C380A182A10FD5E74F /* FBSDKMonotonicTime.m in Sources */, + 25866CF4C6552A1601C082E52A6DB2C5 /* FBSDKPaymentObserver.m in Sources */, + D0CBB65589747232A98AC1A8023D10D1 /* FBSDKProfile.m in Sources */, + BA2DA4C9B665EF880642E42A5DAAA5FB /* FBSDKProfilePictureView.m in Sources */, + EA6F781F751B13CB42A2511A0F623BBC /* FBSDKRestrictiveDataFilterManager.m in Sources */, + 0CA12EDFF5DB3C9D582C34AA2AA819AE /* FBSDKServerConfiguration.m in Sources */, + 1FF491D6711B2A034BDC6D03D00DF10A /* FBSDKServerConfigurationManager.m in Sources */, + 63CEFB3E172C0F886B1F9837397E0048 /* FBSDKSettings.m in Sources */, + EADCEB2E23894517C29C51B41EF9F77A /* FBSDKSuggestedEventsIndexer.m in Sources */, + D470419DDC9499F347F5626AB36A9B14 /* FBSDKSwizzler.m in Sources */, + 6EFF6B10AEC0BD068920F49B3AACF748 /* FBSDKTestUsersManager.m in Sources */, + 4453EECA79527A653B8A0735EEC27EE5 /* FBSDKTimeSpentData.m in Sources */, + 03936525CBDB647A066F8859E65F8752 /* FBSDKTriStateBOOL.m in Sources */, + BC5CDDB19E832B26D9BB0C2384AF4F89 /* FBSDKTypeUtility.m in Sources */, + 19A9565C4733665BB011CED89425B645 /* FBSDKURL.m in Sources */, + EB2FA7A93337F35226BEAF61500CE42B /* FBSDKURLSession.m in Sources */, + 6D58C3431AA9E9984CD4987951D60C2F /* FBSDKURLSessionTask.m in Sources */, + 9ABB7E62F358F48B6A6AD16DF8BF210C /* FBSDKUserDataStore.m in Sources */, + 685EA20FC3B7172E9476EA957AFB6808 /* FBSDKUtility.m in Sources */, + 8D7A43A9B2B9130D653B8A7B72EAE521 /* FBSDKViewHierarchy.m in Sources */, + 3E952267810C78F609500D6288835ED7 /* FBSDKViewImpressionTracker.m in Sources */, + E5F626539772EC85D0AC0FECAAE88489 /* FBSDKWebDialog.m in Sources */, + 408251E64517FA8646D27B1B6C956DD8 /* FBSDKWebDialogView.m in Sources */, + EFA8A5F8C249305A5846C01945A7CD94 /* FBSDKWebViewAppLinkResolver.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4BBA1B4CD7FDD105B05CBEF8DF11FDFA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1901,14 +3939,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4DE97F898785C4C80B4EA92C339B23DA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 39CFEA55B49B65C9DB6A9B46283B37C0 /* Pods-MAPS.ME-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 63B827B5D6352DE3B189D6B1186D1BDE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1926,26 +3956,206 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8E6D7DD5E767C7E7B61A9BF2D053931B /* Sources */ = { + 81CBFACA0E443700F09640C00300F3BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D5963D53AE06B777B1EF1097A73F3C7F /* BFAppLink.m in Sources */, - 9A7D373ABEF60EEF0C81EFD1CA7A0930 /* BFAppLinkNavigation.m in Sources */, - 19EA21EE461AD7DDC5E3D4393F576536 /* BFAppLinkReturnToRefererController.m in Sources */, - E2FFC98DD455380139D3CFCD79F5EDBE /* BFAppLinkReturnToRefererView.m in Sources */, - 1345FEB42037DE616FA4B25E24F7FBC3 /* BFAppLinkTarget.m in Sources */, - EA607198F03AB0FB585B195B884E0F88 /* BFCancellationToken.m in Sources */, - 0D521EBB8D62491CCBD920D65991E412 /* BFCancellationTokenRegistration.m in Sources */, - CBAC9FDA2312FC1FEA9008C86B10150B /* BFCancellationTokenSource.m in Sources */, - AD71FD5D10D93A7C7C699138D1761828 /* BFExecutor.m in Sources */, - E2C0E30B2A80D87945A34233065E8EBC /* BFMeasurementEvent.m in Sources */, - AFA095E91DF80E201A836503F6CD53D8 /* BFTask.m in Sources */, - 06541E1EB2B44BC449E5BED2B38D2EE2 /* BFTaskCompletionSource.m in Sources */, - A3F568CDD9E9F47089D312D2BC050E2A /* BFURL.m in Sources */, - 4B99098B9C1CCD7E424C332EA98DCFE0 /* BFWebViewAppLinkResolver.m in Sources */, - 6545E55F39249E2DCF535D15BA513548 /* Bolts-dummy.m in Sources */, - 482979C2C401430E2A2D797938080DD2 /* Bolts.m in Sources */, + 007CCB849A6D2684A1475A3FF59ACFDF /* MoPub+Utility.m in Sources */, + A58838AFCF70C74948457AB635A8F5EE /* mopub-ios-sdk-dummy.m in Sources */, + 6A29AA6B2FD03601D4680FEF5F5EFA2B /* MoPub.m in Sources */, + 15D68923841A739E95076DC623A44DDC /* MOPUBActivityIndicatorView.m in Sources */, + 0EFEF5122A9C5D5086E34768C259119B /* MOPUBAVPlayer.m in Sources */, + DB6A27CF25EA8027345E71BB62EB817D /* MOPUBAVPlayerView.m in Sources */, + 5B1F753CC681BAFD9BE8B0EC6F976308 /* MOPUBExperimentProvider.m in Sources */, + ABBFC1A930D22F5F17F10D1636E6C1AC /* MOPUBFullscreenPlayerViewController.m in Sources */, + 1950A79D1385807BA42F932DABF52E55 /* MOPUBNativeVideoAdAdapter.m in Sources */, + E6C5627DF1F42C53EFBD8F09B386A7D5 /* MOPUBNativeVideoAdConfigValues.m in Sources */, + CA5F17A9BFD77BE441B4E178F42D29E8 /* MOPUBNativeVideoAdRenderer.m in Sources */, + 8DFC7686165EF5FE682F714AA4F70712 /* MOPUBNativeVideoAdRendererSettings.m in Sources */, + CFE5FC7993FA7997CB86EB3015639597 /* MOPUBNativeVideoCustomEvent.m in Sources */, + 7A05F477B97C73CC78B472F515A52B1B /* MOPUBPlayerManager.m in Sources */, + D0B835E099953E4BC60D54D0C776623F /* MOPUBPlayerView.m in Sources */, + C6A820DABDB27A823C8928B27AEBCFFA /* MOPUBPlayerViewController.m in Sources */, + A1476CDB911EC2BDAC4A4F5A85375A90 /* MOPUBReplayView.m in Sources */, + 695387329EA4806C4416D89E8E48417E /* MPActivityViewControllerHelper+TweetShare.m in Sources */, + C7C74FCC4A33AC994AAE336F7B9DBDE4 /* MPActivityViewControllerHelper.m in Sources */, + 08B610ED7F74EAE851ED79FADA5C6F65 /* MPAdAlertGestureRecognizer.m in Sources */, + 5A1D4A73703CAC56F8AE8D543CD04E68 /* MPAdAlertManager.m in Sources */, + 3DC4B1858FDA7D55DE4CABA33AE71389 /* MPAdConfiguration.m in Sources */, + 9CBE20164098E0D4DE97DBA4DC0FB9C0 /* MPAdConversionTracker.m in Sources */, + 65EFEC007600E6B5D2AC3617241A8D02 /* MPAdDestinationDisplayAgent.m in Sources */, + 330EEEE2AC287EB9ED4904B1E13C5127 /* MPAdImpressionTimer.m in Sources */, + C6280F50A58827241E49DD7367A24BF2 /* MPAdPlacerInvocation.m in Sources */, + BF1EAA66E73F33914957FD8A152DAB64 /* MPAdPositioning.m in Sources */, + F994C11A6B4D3C22EE4285C41F13C217 /* MPAdServerCommunicator.m in Sources */, + 5F318ABBC58720E606FF50FCF62770A1 /* MPAdServerKeys.m in Sources */, + 9CD1BBBB6E89BF8600105859667911BD /* MPAdServerURLBuilder.m in Sources */, + 83F82F9E24C4D8DF24FDA4A702136488 /* MPAdTargeting.m in Sources */, + 4560C11D73482D4FEF27223B0D76A2AB /* MPAdView.m in Sources */, + 2E929EC43A795475BFCE292A95ADF962 /* MPAdWebViewAgent.m in Sources */, + 8813D5F3084F274EF427579491A137C8 /* MPAnalyticsTracker.m in Sources */, + C8ADF29930531B3202DB633F63669820 /* MPAPIEndpoints.m in Sources */, + 5E95C37116D083974CDCF6D109A19753 /* MPBannerAdManager.m in Sources */, + 74630B58C9452458F2A473C0E329A91E /* MPBannerCustomEvent+Internal.m in Sources */, + 98407617BFAAEBED0A6C833724A0BE87 /* MPBannerCustomEvent.m in Sources */, + EA7499CD2438E38933BB8B890F8612E3 /* MPBannerCustomEventAdapter.m in Sources */, + 6E7CF151057F96CD1D8C0276E9332726 /* MPBaseAdapterConfiguration.m in Sources */, + 12F57499FCD8F1F56244CCB1A7ABE2C9 /* MPBaseBannerAdapter.m in Sources */, + DDF1FFF371F4DFD77483D5FBED95B460 /* MPBaseInterstitialAdapter.m in Sources */, + 61E758D85234B14DC73893B1021973FF /* MPClientAdPositioning.m in Sources */, + 05205A059452CA8CF8FB9E65DCDC8A1D /* MPClosableView.m in Sources */, + 48A567A855A9A1424EA16C5DA8F89E33 /* MPCollectionViewAdPlacer.m in Sources */, + 41A89C2BC57F7B277B2523F9EBD70DE2 /* MPCollectionViewAdPlacerCell.m in Sources */, + ABE209F90E2AC6AD4076E738A272232F /* MPConsentChangedNotification.m in Sources */, + 949A8369F2434A250DAD664A212D14CA /* MPConsentChangedReason.m in Sources */, + 028C4B11D216075A9E6EED4EE54E2450 /* MPConsentDialogViewController.m in Sources */, + 58F7FB88681323B9F7B41FF6DEC00536 /* MPConsentManager.m in Sources */, + 73E1A4B6D6A6876560B4026D8E19F6FB /* MPConsoleLogger.m in Sources */, + 1B76875B20D09527F1F5FFF4AFA64C35 /* MPConstants.m in Sources */, + 6506C56D737442CDB18F2682B78A0F3E /* MPContentBlocker.m in Sources */, + 9D46CE25D319B6DECD64B62C6AF66B70 /* MPCoreInstanceProvider+MRAID.m in Sources */, + A1692F3790586764CE8EF77063F8C51C /* MPCoreInstanceProvider.m in Sources */, + A39BDB2A0D91CC6715B22561966A0A7C /* MPCountdownTimerView.m in Sources */, + 3D12F1C085A4B1955E2402B81CA1F8A0 /* MPDiskLRUCache.m in Sources */, + A6C44ABECA761EF1CB3109B28AAE8959 /* MPEngineInfo.m in Sources */, + B454D63C49ACE260B234B6DC57036FF3 /* MPEnhancedDeeplinkRequest.m in Sources */, + 2E5008AE4F894680AB955CC7ED490E1A /* MPError.m in Sources */, + 12D05BFD81323934F20BFE6F51B84204 /* MPExtendedHitBoxButton.m in Sources */, + 9ABBE2C39CEE6C9E41DAC57B6055228C /* MPGeolocationProvider.m in Sources */, + FF974645D11EAA9A6183A0632A081D10 /* MPGlobal.m in Sources */, + F6FBE427650698EA3FA6E82933E5710D /* MPHTMLBannerCustomEvent.m in Sources */, + F920EB30554D16BFF1BF7B71726D9151 /* MPHTMLInterstitialCustomEvent.m in Sources */, + 5839B9FCBE2E3267C6B7732645B11040 /* MPHTMLInterstitialViewController.m in Sources */, + 01B0121F6A843D327C7DD19A8550B598 /* MPHTTPNetworkSession.m in Sources */, + 85A28D5F7B3F5006696C629047C9AB88 /* MPHTTPNetworkTaskData.m in Sources */, + 95C423F3B5A89F1F63C55C222E5B1554 /* MPIdentityProvider.m in Sources */, + AB059296191108CBD784A40C30AA1C3B /* MPImageDownloadQueue.m in Sources */, + 79FB8A111C842F3F6EF6117A65F2E99D /* MPImpressionData.m in Sources */, + BFF8738B164BDD533AE8EE677BFC69FB /* MPImpressionTrackedNotification.m in Sources */, + 135D1B9921EB8B067249A09A01236335 /* MPInterstitialAdController.m in Sources */, + 6AC0061C76FB25E31443DFD585F5A650 /* MPInterstitialAdManager.m in Sources */, + 967FA55DAFAFF5EF8775E012E0F6F29D /* MPInterstitialCustomEvent.m in Sources */, + 61F0AE40C57E56278714CEB0F8BC1284 /* MPInterstitialCustomEventAdapter.m in Sources */, + 8349EBD3335BD66A66C2ED4C0E12BC7D /* MPInterstitialViewController.m in Sources */, + 94CD717F0AEF4E8A2BF0153B6B62E9A9 /* MPLastResortDelegate.m in Sources */, + 1FF436F3D6FA7E62E49A0FFBC60E872C /* MPLogEvent.m in Sources */, + F1B3C54D3963AC092B7007E8D17B9ED8 /* MPLogging.m in Sources */, + 8CE89C00B5B29B8C31C8301894C5FA9F /* MPLogManager.m in Sources */, + 677CD7F633E49803C7369B6BDDCE6209 /* MPMediationManager.m in Sources */, + 183E15C37FECB00B5A9B58E3B699F10C /* MPMemoryCache.m in Sources */, + 8737077302181C5CD1954DD9E021C4E4 /* MPMoPubConfiguration.m in Sources */, + 07BFD497B7C2D4399F075A407D248ED9 /* MPMoPubNativeAdAdapter.m in Sources */, + 161F11201326321F09DC083A6124B845 /* MPMoPubNativeCustomEvent.m in Sources */, + 2D92A66C1CF6A2AF43C5B3932E6B5325 /* MPMoPubRewardedPlayableCustomEvent.m in Sources */, + 31F0CCA4D3118293F864E8F858D21EB1 /* MPMoPubRewardedVideoCustomEvent.m in Sources */, + 27D5C1D7879E4175810D87CF6F6B9D1F /* MPMRAIDBannerCustomEvent.m in Sources */, + 2422514B402E7088A03D0F16F8768110 /* MPMRAIDInterstitialCustomEvent.m in Sources */, + A78921E1383B7EC5BDCBBFAB0A8C09ED /* MPMRAIDInterstitialViewController.m in Sources */, + 4B63C7AFE5122C1759280DD1F8FB6003 /* MPNativeAd+Internal.m in Sources */, + A4570302110B5FEF5C0E3A30DD218910 /* MPNativeAd.m in Sources */, + 0982C4FA8482BE107C2AD3D9BBE7B5DA /* MPNativeAdConfigValues+Internal.m in Sources */, + 38799E225FCB12E3F0F0E3A1E01494AE /* MPNativeAdConfigValues.m in Sources */, + 6813E46F26F41940A6F210041BA05C65 /* MPNativeAdConstants.m in Sources */, + 56DD7A6EFFE88ABA64D195261D2EF1F0 /* MPNativeAdData.m in Sources */, + F35CC464259D98986B73DCC113EC5789 /* MPNativeAdError+VAST.m in Sources */, + 8006C1D3E2C81F3D262556E41B5619C6 /* MPNativeAdError.m in Sources */, + 3B76D08E8F5B9EA9F6959BD991E2D256 /* MPNativeAdRendererConfiguration.m in Sources */, + 933D8B3D494AA2ABBF079AF5B64737B8 /* MPNativeAdRendererImageHandler.m in Sources */, + 4CCBFB4901A4CCBEC97AB859CD79A310 /* MPNativeAdRenderingImageLoader.m in Sources */, + ECE3F8E4E9F5F9D353E18C6630D22F6B /* MPNativeAdRequest.m in Sources */, + 33A2BFDC83BCFABECFC68FCC84C1AE98 /* MPNativeAdRequestTargeting.m in Sources */, + 6DC16B6B39101A586900E6E5E279639F /* MPNativeAdSource.m in Sources */, + 537155B92289BA1AD1DB8967640F4742 /* MPNativeAdSourceQueue.m in Sources */, + A65E7FDCCCECA91A201156DD09CCF137 /* MPNativeAdUtils.m in Sources */, + 898E3DBFB33192D735C9C26C0A24B3C0 /* MPNativeCache.m in Sources */, + 2E1E2667B3BD1B14B0B761B4324A469A /* MPNativeCustomEvent.m in Sources */, + 0BC6370DEE3FB1B8928653BBB0523B81 /* MPNativePositionResponseDeserializer.m in Sources */, + 2A4BEE3059001C91F535E10FB657456F /* MPNativePositionSource.m in Sources */, + 25AF1C031C277432A48DC57DCB227A21 /* MPNativeView.m in Sources */, + 4A121DB1A205F4DCFA18510E13BE8FAF /* MPProgressOverlayView.m in Sources */, + 2C50BB5390B0E4EC84C12FA749A7C2FA /* MPRateLimitConfiguration.m in Sources */, + A53A618100745FF5C40CD5CCBA28138D /* MPRateLimitManager.m in Sources */, + 9029916FDD5DCCB4D78C6012D41590DF /* MPReachability.m in Sources */, + CC7B4C736FFB0639C2757B7264151177 /* MPReachabilityManager.m in Sources */, + A2D462DCDA3A70993D0CD983239D8356 /* MPRealTimeTimer.m in Sources */, + D954C8A06A784E56F0C6E38407F9DD2E /* MPRewardedVideo.m in Sources */, + 3A0C2DFBD90B37FF21424A76823C724E /* MPRewardedVideoAdapter.m in Sources */, + 15B102778D89BA365100413827E7FE84 /* MPRewardedVideoAdManager.m in Sources */, + 0039E09ADEE2326361537DC7FA3D8055 /* MPRewardedVideoConnection.m in Sources */, + F6AC5495FB298D0D438576B99AEED3E3 /* MPRewardedVideoCustomEvent.m in Sources */, + 2DF125A64238443C68EC466266A72B7E /* MPRewardedVideoError.m in Sources */, + A76CC1B8C876B1BE075BE517641ED4BB /* MPRewardedVideoReward.m in Sources */, + 5F8C8B05E073AB128D6CE8633F62C984 /* MPServerAdPositioning.m in Sources */, + 55D6ED3B4434587A4FEC18D7563ED3BD /* MPSessionTracker.m in Sources */, + 7DD7A8920ACEE56024676881B5539562 /* MPStaticNativeAdRenderer.m in Sources */, + 4C48ED90D821B0F8EF3661B05E135974 /* MPStaticNativeAdRendererSettings.m in Sources */, + 0281F807A152904DD8C509EEDE5F42F5 /* MPStopwatch.m in Sources */, + FD9268BB64BC18D7DD7CD3C469B85200 /* MPStreamAdPlacementData.m in Sources */, + 97E49FF7D423C8596409D2773EE384CA /* MPStreamAdPlacer.m in Sources */, + ED859F789A33FB57F91E9AA3626F7FC0 /* MPTableViewAdPlacer.m in Sources */, + E89C57E5F0DEC1E546397F7B0C8B14E6 /* MPTableViewAdPlacerCell.m in Sources */, + 136233974C5D4E8F2012524DA316F643 /* MPTimer.m in Sources */, + DDA01AF0AFAF010BB99126FB9A1C11A8 /* MPURL.m in Sources */, + 411DF6A13103F8566C1313345C595EE7 /* MPURLActionInfo.m in Sources */, + 3029F82A16E26561880C34D209638AD1 /* MPURLRequest.m in Sources */, + 490A57BA94B511F0AC061A23C71BF5E2 /* MPURLResolver.m in Sources */, + 8E2A08282A2070904B1E08640D9F87BE /* MPUserInteractionGestureRecognizer.m in Sources */, + 634954BB2C33275F65B286162E374781 /* MPVASTAd.m in Sources */, + 4AA0CFECD6FF41737618CE4526E1FE9F /* MPVASTCompanionAd.m in Sources */, + 7C57ADBE382EC7D9FB9C82A0ABD222CF /* MPVASTCreative.m in Sources */, + 1344FE3054FC3C851574D977345311DA /* MPVASTDurationOffset.m in Sources */, + 86FEB4F55F75A813B4282B7FEC0AEAB7 /* MPVASTIndustryIcon.m in Sources */, + CA010AE74015E5834387240152856803 /* MPVASTInline.m in Sources */, + 0D6E15E0DB6231B6CB8394ABED1CA848 /* MPVASTLinearAd.m in Sources */, + 3C99AAC369A9DD48ADEC89759DD5D174 /* MPVASTMacroProcessor.m in Sources */, + 609266EBDDFFBC6CE6E544D3CC068E57 /* MPVASTManager.m in Sources */, + 8DA11A26C3945AF76105A9CCDBBDABB6 /* MPVASTMediaFile.m in Sources */, + 13364A17E7B7C323109E627B73322A24 /* MPVASTModel.m in Sources */, + 6FC30E7D5FE7048D1BE0AA0FCB650F8C /* MPVASTResource.m in Sources */, + 1C8A518DC5E5E7EA58AEBB4141E7118C /* MPVASTResponse.m in Sources */, + EE2655E9459619A2700C5C97A975260B /* MPVASTStringUtilities.m in Sources */, + 53BEA651DCF7EA96DE252D2AAEFB2FDC /* MPVASTTracking.m in Sources */, + E069A2F673FB814ED08DA47B804B5551 /* MPVASTTrackingEvent.m in Sources */, + 0C49F67A52B917B739AA72462B9D7C59 /* MPVASTWrapper.m in Sources */, + 3D49F1FF583D3211934286DD881335B0 /* MPVideoConfig.m in Sources */, + CEEA193D67D9393D8A7A5440CD8D5AD3 /* MPViewabilityAdapterAvid.m in Sources */, + E31DA80F64F401E9F99818549AE9A9AF /* MPViewabilityAdapterMoat.m in Sources */, + 48920E060BD6BC668DCC8818FD6D162B /* MPViewabilityTracker.m in Sources */, + C7902134DB993D0164C93F9F42305573 /* MPWebBrowserUserAgentInfo.m in Sources */, + DB79CEA087D1AE39CD621D8C0F7EE0FC /* MPWebView+Viewability.m in Sources */, + 514BA332CD0B3A325972E795A8D01004 /* MPWebView.m in Sources */, + 74C6FD9A74D5F484569D232DBB9928B1 /* MPXMLParser.m in Sources */, + 73EC7867EAAA71D94DCAFD25E16EACB8 /* MRBridge.m in Sources */, + 0E67AB248831B8C1F61E714725669B86 /* MRBundleManager.m in Sources */, + F9256E936E6CC61E8B3CCFCD78D0E307 /* MRCommand.m in Sources */, + 0649C16976B8D4918A7936821DA76117 /* MRConstants.m in Sources */, + 6EAF2AF0CE0F9D405FCF151BC4006BCF /* MRController.m in Sources */, + BA63CAC6FB5ADE91742AE7885B61E110 /* MRError.m in Sources */, + 3D11FFADAC36B817E21342E6E8B928B5 /* MRExpandModalViewController.m in Sources */, + CA416E229DE634A723480C13C420662E /* MRNativeCommandHandler.m in Sources */, + E73B3B5284816B48E901BB873AF2E5DD /* MRProperty.m in Sources */, + 02D6BE88EA1FF9B5DBB7A95CC4314A16 /* MRVideoPlayerManager.m in Sources */, + A55E5603D2C6F3C70C6BEE3F891413C8 /* NSBundle+MPAdditions.m in Sources */, + D8E35E15A594B14172003C6487FE35CC /* NSDate+MPAdditions.m in Sources */, + 62235B80AE73CD6E6FC5277D08619527 /* NSDictionary+MPAdditions.m in Sources */, + 886D8BF5EE3FDCC2B1E34D66E0E343D9 /* NSError+MPAdditions.m in Sources */, + DBD7351F44ACDFC58A6D44D179E1541B /* NSHTTPURLResponse+MPAdditions.m in Sources */, + A863AC82EEB2F9FAFC5D8E4105A43DA4 /* NSJSONSerialization+MPAdditions.m in Sources */, + 3065431D7CF0A35D063E52853FBED7C2 /* NSMutableArray+MPAdditions.m in Sources */, + 57E696B3F4B91EEA76ADA84AD20944DA /* NSString+MPAdditions.m in Sources */, + B1C28C8AE1C5879EFF73EB75307332B9 /* NSString+MPConsentStatus.m in Sources */, + 55A63CEC412649CB875F2ED2E4F8124C /* NSURL+MPAdditions.m in Sources */, + 2190D953F71AC070FD4DFED8C58DCAED /* SKStoreProductViewController+MPAdditions.m in Sources */, + 421906B2E2D12EFC17AD5DAAE1D3093B /* UIColor+MPAdditions.m in Sources */, + C8DCCD2022E5DAD88FBB81BC5C8FEB9E /* UIView+MPAdditions.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A404A9869C03D458EC24DD30F7835B7C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 03FBA65275AD20310821AD847098FFC3 /* Pods-MAPS.ME-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1958,118 +4168,35 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DAEFE07E9F77566DD862274F159F13D8 /* Sources */ = { + C4DFBFB01C4D8091EAF1B59290668945 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FAF34B394AB181F19CA25F46E68E8AFC /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */, - 2768FB4497A05D65AE2816FD87ED5806 /* FBSDKAccessToken.m in Sources */, - D2F86D32FB0ABD88768DC859427BE8DF /* FBSDKAccessTokenCache.m in Sources */, - 7FCB29E11AAA4B05E4E7BC6261BF7F69 /* FBSDKAccessTokenCacheV3.m in Sources */, - 255F3079C9B5E8650369EFC1A7DEAB48 /* FBSDKAccessTokenCacheV3_17.m in Sources */, - 5DCE6D1CA3EC21CEC13B9E29242CFD3E /* FBSDKAccessTokenCacheV3_21.m in Sources */, - 7D8DB802FA469FE2CEC231526F4CC233 /* FBSDKAccessTokenCacheV4.m in Sources */, - 758E4738CA636A618E4EC8464C4DEE58 /* FBSDKAccessTokenExpirer.m in Sources */, - 43012E88CEA507F629D310854A1CF5E9 /* FBSDKAppEvents.m in Sources */, - 5DE2A5268271C7C424DFBD1B483D4633 /* FBSDKAppEventsDeviceInfo.m in Sources */, - 84173C1E7C34F7F63E66F05366DDA3A1 /* FBSDKAppEventsState.m in Sources */, - FE7D1DE9256CBBCF957D595EB7289163 /* FBSDKAppEventsStateManager.m in Sources */, - A66A118899103E779CAF09A4A8DF6E71 /* FBSDKAppEventsUtility.m in Sources */, - 099851CA679300F154A44562D2EDF456 /* FBSDKApplicationDelegate.m in Sources */, - CF534186ACDEB6EA26B014F3CA0D0E12 /* FBSDKAppLink.m in Sources */, - 4EA7DA2CB8034EA09F7214C793FBE5E6 /* FBSDKAppLinkNavigation.m in Sources */, - 6A54B01A6C119A7962853D942D609B5D /* FBSDKAppLinkResolver.m in Sources */, - F5D66502512DA9FCCD18CD6B5C5B000D /* FBSDKAppLinkReturnToRefererController.m in Sources */, - 95B0B3BB6B107648383F19B4E87B6440 /* FBSDKAppLinkReturnToRefererView.m in Sources */, - E9860A6E2AB66B82E50086491B0448AF /* FBSDKAppLinkTarget.m in Sources */, - 8586CE5B56BFD04F1BD0719B3870F376 /* FBSDKAppLinkUtility.m in Sources */, - C2484B47CB997E307D840CE1FA9EC351 /* FBSDKAudioResourceLoader.m in Sources */, - 34F98AF7B8F2663EE809B61A6AE85FDF /* FBSDKBase64.m in Sources */, - 466F87A9F01EB6DA61F13B7BED9D16E0 /* FBSDKBoltsMeasurementEventListener.m in Sources */, - 208AC769BC1901EA9A1EB230F7ED1245 /* FBSDKBridgeAPI.m in Sources */, - 455831D7F3EEE34DDBA5371E3E6DF3B4 /* FBSDKBridgeAPICrypto.m in Sources */, - AA9390D11C08B2ACE888D0F5199FF3BF /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */, - 3EFAC68BC9F02CB46120ABA3E6383F4F /* FBSDKBridgeAPIProtocolWebV1.m in Sources */, - ECD7C1DAE15215DE2889F4C2F5C15FBD /* FBSDKBridgeAPIProtocolWebV2.m in Sources */, - 8C76C8C8CC5ABC525822545A99EF4868 /* FBSDKBridgeAPIRequest.m in Sources */, - 073DB109C72BA063B5ABAC1AA4E7F85D /* FBSDKBridgeAPIResponse.m in Sources */, - E807CA8FB670BC70E557C3E741AA285F /* FBSDKButton.m in Sources */, - 6A2DF74C262D6525041EDBFB85909698 /* FBSDKCloseIcon.m in Sources */, - 522AC1434BFC98616B9FC258ED46A18D /* FBSDKCodelessIndexer.m in Sources */, - 1A4B8FD0132E39F309B7D06CC5A3C0A0 /* FBSDKCodelessParameterComponent.m in Sources */, - 032BC936BF57A5C6E4825D6E1F3C837A /* FBSDKCodelessPathComponent.m in Sources */, - C907C0676DE8398C4E84D1328C286B99 /* FBSDKColor.m in Sources */, - 284AED2A52E8F8CD834F43F8A99423F3 /* FBSDKConstants.m in Sources */, - 4D882355D675C0A0B2EEAFA75897D69D /* FBSDKContainerViewController.m in Sources */, - F3577C339FFEE45C7A7B5FB6AE1907FB /* FBSDKCoreKit-dummy.m in Sources */, - D9B324781984F2FCEE3D452A3C5EBA26 /* FBSDKCrypto.m in Sources */, - 94A456877C10BECF3881099BF8EACE8F /* FBSDKDeviceRequestsHelper.m in Sources */, - E6FAE396BDF482CD3B90AE8C030D1801 /* FBSDKDialogConfiguration.m in Sources */, - BCEB3F3AC001CF204BC21BAD79AA73F6 /* FBSDKDynamicFrameworkLoader.m in Sources */, - EE11B00CF235207D3FC3B89690FA92D4 /* FBSDKError.m in Sources */, - A3EF9F598D5CEF282D11BDF2BA216452 /* FBSDKErrorConfiguration.m in Sources */, - EB982333B03E1C95FB20EF642A6A849D /* FBSDKErrorRecoveryAttempter.m in Sources */, - D0C57751555538B8F7926B49ABA4AAF8 /* FBSDKErrorRecoveryConfiguration.m in Sources */, - D4DE697761EAB1BFB758488E0ED62C66 /* FBSDKEventBinding.m in Sources */, - 663C27BCD0780D92A5EE9B480DFE645D /* FBSDKEventBindingManager.m in Sources */, - 58B5299D71E7EA6C2FF4117C275D6199 /* FBSDKGateKeeperManager.m in Sources */, - 9347336BE95F960A745C9939D8D90D7D /* FBSDKGraphErrorRecoveryProcessor.m in Sources */, - 4D3FDB69E94D5011F42E5F071F006487 /* FBSDKGraphRequest.m in Sources */, - EE34160F1197D498BE9657C9F9A06378 /* FBSDKGraphRequestBody.m in Sources */, - 7403D43793F6E29257A97F9A57FA98A0 /* FBSDKGraphRequestConnection.m in Sources */, - 573AB14F5C5B50B13416243F6ED6C606 /* FBSDKGraphRequestDataAttachment.m in Sources */, - EDA967303B255FDA6039C94314D0011C /* FBSDKGraphRequestMetadata.m in Sources */, - 64AF703CA7E8935EDB20759B009E884E /* FBSDKGraphRequestPiggybackManager.m in Sources */, - F7C9204B77F3570D19F2088CB855E1C3 /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */, - 6E7C0EFAFBFEB3F10AC3281C9A292C74 /* FBSDKIcon.m in Sources */, - 33995A04546E4E4DBDA3F25443A467E3 /* FBSDKImageDownloader.m in Sources */, - E8C754209461D202CDE0BB3CA1703CDE /* FBSDKInternalUtility.m in Sources */, - E0FCA8D7B91B178D0FCD49E5BA7C39C4 /* FBSDKKeychainStore.m in Sources */, - 8C29E2389E6F5DB4469B7752EF3AB258 /* FBSDKKeychainStoreViaBundleID.m in Sources */, - A302B5CF5A25C057ED052CCF8FD46B2A /* FBSDKLogger.m in Sources */, - 31B2402A6E6673B68CF39EABFD7F8AA4 /* FBSDKLogo.m in Sources */, - 81F512A1722266D78628CC65471814FE /* FBSDKMaleSilhouetteIcon.m in Sources */, - 671F170B1E8178A0485778D0EF8AF89A /* FBSDKMath.m in Sources */, - 188FF3365630325CFC56C261814FEF76 /* FBSDKMeasurementEvent.m in Sources */, - 4814A7C2FC9D3F936DC8B53020BB12F5 /* FBSDKMonotonicTime.m in Sources */, - 9ED70144DC93B73FD92F5B900DA44432 /* FBSDKPaymentObserver.m in Sources */, - 367686DE0B631D3132ECCE2C7E37A939 /* FBSDKProfile.m in Sources */, - B92631A34B393D85909D1850855F91BC /* FBSDKProfilePictureView.m in Sources */, - 90EB0937F084F8BB9F39C972567DDD93 /* FBSDKServerConfiguration.m in Sources */, - B705A3CC640DF32FAB087E560A539F43 /* FBSDKServerConfigurationManager.m in Sources */, - 957371142A9FD91EC2F75BD37FA17881 /* FBSDKSettings.m in Sources */, - 7C2D1797CF66295D7F7E2DD11C4B06B6 /* FBSDKSwizzler.m in Sources */, - 841CD99119298EC7473C65E86DAF57AF /* FBSDKSystemAccountStoreAdapter.m in Sources */, - AE65793AB6092B294BD98A289765D700 /* FBSDKTestUsersManager.m in Sources */, - 75479C9F78FC2D5703F6F955AAC142B4 /* FBSDKTimeSpentData.m in Sources */, - 9E77303F503B86EAEB5E4776B3B43FD5 /* FBSDKTriStateBOOL.m in Sources */, - 9D535A048A97D75464B6F45C011B0898 /* FBSDKTypeUtility.m in Sources */, - 071E39D5F073D41F640CB5103F7776D3 /* FBSDKURL.m in Sources */, - D535375D3EE13CBFB65842A4269EBBC6 /* FBSDKURLSessionTask.m in Sources */, - E3569988B4E499DB02876C9B45936D1C /* FBSDKUserDataStore.m in Sources */, - A2EC19BFE6EA84EC71246266D422F722 /* FBSDKUtility.m in Sources */, - 2ECA6CF938DB9D01E67CB9117A22F021 /* FBSDKViewHierarchy.m in Sources */, - 1E609B6738B2CA3D31FC58B46609BD03 /* FBSDKViewImpressionTracker.m in Sources */, - 310BBF6EB4511AE43524CC6DBE5A5CF6 /* FBSDKWebDialog.m in Sources */, - AA6C453F379126F19C0A6D784CEC77D6 /* FBSDKWebDialogView.m in Sources */, - 2720D94D657CD727CD81AFC4CDCB4B98 /* FBSDKWebViewAppLinkResolver.m in Sources */, + 10EA173E8FFB7EBB2266DE91BB1C8E40 /* FacebookAdapterConfiguration.m in Sources */, + 1EA14D7A59720E026D4B43A659B2C70E /* FacebookBannerCustomEvent.m in Sources */, + 3559B2C86EF94932057DEC8EB1E0BA53 /* FacebookInterstitialCustomEvent.m in Sources */, + B37F4F53B8FA9A477E9F9D8CE100345E /* FacebookNativeAdAdapter.m in Sources */, + 95E36714E71DF039CA75C2ABAD950485 /* FacebookNativeAdRenderer.m in Sources */, + 2BB755F544C6BD4C9D60CD1549B61807 /* FacebookNativeCustomEvent.m in Sources */, + C290179051C71789BA76B2D42532D16D /* FacebookRewardedVideoCustomEvent.m in Sources */, + A918586B76F072B14781AA3CF161D62E /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 1F122504ABCC62CA60595B18B2167225 /* PBXTargetDependency */ = { + 029194B2F4EA41FAC2D9AC5BE7C7CE4D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FBSDKLoginKit; - target = 10C5885FCB0908EF785774EE52473DAB /* FBSDKLoginKit */; - targetProxy = 4C19BE671C2AE9E8BF1BA9528D43349A /* PBXContainerItemProxy */; + name = FBSDKCoreKit; + target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; + targetProxy = DE96F701FE363BC812998A9BF9209AC5 /* PBXContainerItemProxy */; }; - 1F722C9C1A690091CB2C635E7E9892B4 /* PBXTargetDependency */ = { + 07D5D7EBC38677002D76239AE8E12419 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "ActionSheetPicker-3.0"; - target = A43B25DDF20FCB9228471F8F5135C866 /* ActionSheetPicker-3.0 */; - targetProxy = F2B541E4559F53AB877390EBC6B6C40E /* PBXContainerItemProxy */; + name = "Flurry-iOS-SDK"; + target = 23EE62D8F7B4475F49FFAC72AEF81FAF /* Flurry-iOS-SDK */; + targetProxy = 0076E0CF467BC808599073DACF7E2CB6 /* PBXContainerItemProxy */; }; 20C0675A95BD078E5A040E582EE58931 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -2077,48 +4204,138 @@ target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; targetProxy = 8E15B91A21E9980620C05C3BC02D95F1 /* PBXContainerItemProxy */; }; - 6D03F9CD8C687C553623027C11036F15 /* PBXTargetDependency */ = { + 4DFE57D29D0E575ABE21D3959C7464D8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Flurry-iOS-SDK"; - target = 23EE62D8F7B4475F49FFAC72AEF81FAF /* Flurry-iOS-SDK */; - targetProxy = 1298995ED8C5370B0EEAF24274EEE4EE /* PBXContainerItemProxy */; + name = FBAudienceNetwork; + target = D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */; + targetProxy = E7DBA4F4D1EC6E603C837F345EDCBBC9 /* PBXContainerItemProxy */; }; - 77BFF3B016D0AD813ACC16DDB382BDFF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = 2C886C935EA94AAAD54177F693B49FAA /* PBXContainerItemProxy */; - }; - A8FDC8E05F89A678CCA653E20515FA16 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKCoreKit; - target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; - targetProxy = 5C2EF5C0413FDBF6D72019068760AB1E /* PBXContainerItemProxy */; - }; - AD37BB7C6F54577458810AC01FF4B4C7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = E18CFECDB1F2548FA93A0EA7EF2BFE87 /* PBXContainerItemProxy */; - }; - B216B9AC3D17741524C91C963DD8E1E1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AppsFlyerFramework; - target = B0B23938B1EBCBAD2419AB6E9D222A0B /* AppsFlyerFramework */; - targetProxy = 916176E0F6A618C854D24514A4D58065 /* PBXContainerItemProxy */; - }; - B2D5DB037E68143BD8E29D119734C1E6 /* PBXTargetDependency */ = { + 53254A43C6BCE60BBF641B1D6D8CB443 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Pushwoosh; target = 803EF1AFD27445A470912B1033353BFC /* Pushwoosh */; - targetProxy = 952EB30A7B22DB2CABE5894AD7A0231B /* PBXContainerItemProxy */; + targetProxy = C4C992E2E2F9F193DBD5A84941DD61AB /* PBXContainerItemProxy */; + }; + 6169C11455551BE58B6C1148583238D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "mopub-ios-sdk"; + target = BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */; + targetProxy = 8B5378197C941F8E8BD9120AE852F274 /* PBXContainerItemProxy */; + }; + 6529C86874FD4DEA62BBF9E6FB34430C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ActionSheetPicker-3.0"; + target = A43B25DDF20FCB9228471F8F5135C866 /* ActionSheetPicker-3.0 */; + targetProxy = 0EE0708CAE76929DFBEAEC5C4A860EED /* PBXContainerItemProxy */; + }; + 6E24786D3AFE0ED68A54F67AC02B1A01 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "mopub-ios-sdk"; + target = BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */; + targetProxy = A26E8F1274D07F47A98956ED66D2165F /* PBXContainerItemProxy */; + }; + 86050E10750E9F4494B9A0EEFFC02AB5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MoPub-FacebookAudienceNetwork-Adapters"; + target = 8D115411ACEA387C9D854E11FDDD914F /* MoPub-FacebookAudienceNetwork-Adapters */; + targetProxy = CB560DCDD2B3BAE1EFA6C5DFF3FFCCCB /* PBXContainerItemProxy */; + }; + 931880C5EA889B2F01E4CCBF8A7ECF11 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AppsFlyerFramework; + target = B0B23938B1EBCBAD2419AB6E9D222A0B /* AppsFlyerFramework */; + targetProxy = 36579B93B222F391ED53F76520CAEB85 /* PBXContainerItemProxy */; + }; + 93B92E043BC681B4EF093AFCD02C2017 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBSDKLoginKit; + target = 10C5885FCB0908EF785774EE52473DAB /* FBSDKLoginKit */; + targetProxy = 286856CC144705C25B780A911762E7D9 /* PBXContainerItemProxy */; + }; + 9E864548E31ECADEF3CD9BFD26A4B94F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBAudienceNetwork; + target = D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */; + targetProxy = 96509DFF23AC60FAA63EBE674C7B9D91 /* PBXContainerItemProxy */; + }; + D44974382097D0DA5C7FA27F4BA262C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBSDKCoreKit; + target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; + targetProxy = A3DE0204A3DFB60D6CC559EB69F993D4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 0111203CB3DB4A3B2BFF3DDF9C007BB1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D675BBB0EF7CD368D652F17E752443A /* mopub-ios-sdk.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; + }; + 05627B3FF0AB79C98C0FB02943BBE052 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 77A8043BA8B05BE74858231DA2787C3C /* MoPub-FacebookAudienceNetwork-Adapters.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; + }; 20E7AD6AB321EC47531C415CF3C0D692 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70F1B2F7FEC4B1449B3FD4D7BCB8FF8E /* Flurry-iOS-SDK.xcconfig */; + baseConfigurationReference = ABB9CB11418E9C7719F6F86CB8FF0718 /* Flurry-iOS-SDK.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2211,7 +4428,7 @@ }; 3249F97156A892A2319D41E60A538A5B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F62DF9856EA18D8F0E5399282F0251F0 /* Pushwoosh.xcconfig */; + baseConfigurationReference = 4B2D7F39EE114D3E593BF786AE4E7D30 /* Pushwoosh.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -2225,7 +4442,7 @@ }; 3547287431E499FA8D2D1179D7302C35 /* Production Full */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70F1B2F7FEC4B1449B3FD4D7BCB8FF8E /* Flurry-iOS-SDK.xcconfig */; + baseConfigurationReference = ABB9CB11418E9C7719F6F86CB8FF0718 /* Flurry-iOS-SDK.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2258,7 +4475,7 @@ }; 3B8E3D84E79DD1B05168C97FFDD34CA5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F35ECF36146A2B85D414417FCEF7C7A3 /* AppsFlyerFramework.xcconfig */; + baseConfigurationReference = DD7EC0A94762437B8C70E7D42301789D /* AppsFlyerFramework.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -2271,41 +4488,9 @@ }; name = Release; }; - 42BCF11407975131296E499818D8D017 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB46E6F15A079EB2C04E48726BFB3C25 /* Bolts.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/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - PRODUCT_MODULE_NAME = Bolts; - PRODUCT_NAME = Bolts; - 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; - }; 4600D4188F623CE0DEF1E0CC0208A8C2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 97FE66A315C3385D6124402FADDC8456 /* ActionSheetPicker-3.0.xcconfig */; + baseConfigurationReference = 71B3AA573C58B683A42288B2CFBF3435 /* ActionSheetPicker-3.0.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2338,7 +4523,7 @@ }; 4691620E411D55E63CE6CF22E921044C /* Production Full */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF1751A0AA8634AAFAD4200329826C25 /* FBSDKLoginKit.xcconfig */; + baseConfigurationReference = 7D808C5A6CE4C37BD741817479541F4F /* FBSDKLoginKit.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2369,9 +4554,90 @@ }; name = "Production Full"; }; + 475E7FE2F03B100D37DDA8566EEBDB2E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBA2B5936513D291ADEC6879F9B5F6F1 /* FBAudienceNetwork.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; + }; + 4C90ECA5A1D4B5A2713ED9FC82C146C1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D675BBB0EF7CD368D652F17E752443A /* mopub-ios-sdk.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; + }; + 51541B4300D803AC8759DBF05CE1A6B6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A8A80C4FB218C8B86BA0230B1CC613BC /* FBSDKCoreKit.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 = 8.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; + }; 55DA37B44ED05891E457CBF49F526014 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F62DF9856EA18D8F0E5399282F0251F0 /* Pushwoosh.xcconfig */; + baseConfigurationReference = 4B2D7F39EE114D3E593BF786AE4E7D30 /* Pushwoosh.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -2384,7 +4650,7 @@ }; name = Release; }; - 5A967A292C79452A258A771BB313C366 /* Production Full */ = { + 61F1BFB4C0A9C2B215AD34E9D0E7C66F /* Production Full */ = { isa = XCBuildConfiguration; baseConfigurationReference = 498A16D85D9C972689BF42A44AABE26F /* Pods-MAPS.ME.production full.xcconfig */; buildSettings = { @@ -2422,7 +4688,7 @@ }; 6AAC2BE240EFCA832910DB6AA991C401 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70F1B2F7FEC4B1449B3FD4D7BCB8FF8E /* Flurry-iOS-SDK.xcconfig */; + baseConfigurationReference = ABB9CB11418E9C7719F6F86CB8FF0718 /* Flurry-iOS-SDK.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2452,9 +4718,9 @@ }; name = Debug; }; - 6ACCF149313D48B20F1A4201684FB963 /* Release */ = { + 736556FEA4AD56D4654DBD7646464788 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB46E6F15A079EB2C04E48726BFB3C25 /* Bolts.xcconfig */; + baseConfigurationReference = A8A80C4FB218C8B86BA0230B1CC613BC /* FBSDKCoreKit.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2466,28 +4732,42 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; + 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 = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - PRODUCT_MODULE_NAME = Bolts; - PRODUCT_NAME = Bolts; + 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; + name = Debug; + }; + 77C6904364690F30055789CD8FB772E1 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBA2B5936513D291ADEC6879F9B5F6F1 /* FBAudienceNetwork.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"; }; 78609647C41546587C3C844549D492D9 /* Production Full */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F35ECF36146A2B85D414417FCEF7C7A3 /* AppsFlyerFramework.xcconfig */; + baseConfigurationReference = DD7EC0A94762437B8C70E7D42301789D /* AppsFlyerFramework.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -2502,7 +4782,7 @@ }; 85BD50DC0F9548E503DEB9ACF8A44CF0 /* Production Full */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 97FE66A315C3385D6124402FADDC8456 /* ActionSheetPicker-3.0.xcconfig */; + baseConfigurationReference = 71B3AA573C58B683A42288B2CFBF3435 /* ActionSheetPicker-3.0.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2533,9 +4813,9 @@ }; name = "Production Full"; }; - 9FB540AC0EBA56EACC9A510ACC60A053 /* Debug */ = { + 8AAC18B695A7C67663C0A402747CA5E7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF1751A0AA8634AAFAD4200329826C25 /* FBSDKLoginKit.xcconfig */; + baseConfigurationReference = 77A8043BA8B05BE74858231DA2787C3C /* MoPub-FacebookAudienceNetwork-Adapters.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2547,14 +4827,15 @@ 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"; + 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 = 8.0; + 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; + 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) "; @@ -2565,73 +4846,7 @@ }; name = Debug; }; - A55313B1AED2A92E2817CACA450E3B6E /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB46E6F15A079EB2C04E48726BFB3C25 /* Bolts.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/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - PRODUCT_MODULE_NAME = Bolts; - PRODUCT_NAME = Bolts; - 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"; - }; - AFAB6B7CE4D371CE60DC8D6CA66557CB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EF1751A0AA8634AAFAD4200329826C25 /* FBSDKLoginKit.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 = 8.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; - }; - B062D7EE0154D0DAE78ED1BB63C24375 /* Debug */ = { + 97306A87C0ECBE4B855A6E56889CCD57 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = D7C4B4719E036C1B09595417C7D8ACA6 /* Pods-MAPS.ME.debug.xcconfig */; buildSettings = { @@ -2666,9 +4881,121 @@ }; name = Debug; }; + 9EC1A29B31CB2016ED7563E458D8963E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBA2B5936513D291ADEC6879F9B5F6F1 /* FBAudienceNetwork.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; + }; + 9FB540AC0EBA56EACC9A510ACC60A053 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7D808C5A6CE4C37BD741817479541F4F /* FBSDKLoginKit.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 = 8.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; + }; + 9FD4ACC1F394EAFF6204277E804C76B0 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A8A80C4FB218C8B86BA0230B1CC613BC /* FBSDKCoreKit.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 = 8.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"; + }; + AFAB6B7CE4D371CE60DC8D6CA66557CB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7D808C5A6CE4C37BD741817479541F4F /* FBSDKLoginKit.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 = 8.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; + }; B28F526B6830DBBC305E8E6E66EDC9B5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 97FE66A315C3385D6124402FADDC8456 /* ActionSheetPicker-3.0.xcconfig */; + baseConfigurationReference = 71B3AA573C58B683A42288B2CFBF3435 /* ActionSheetPicker-3.0.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2700,7 +5027,7 @@ }; B4D186E0BFEBB3F0B534DF2E68D13BD6 /* Production Full */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F62DF9856EA18D8F0E5399282F0251F0 /* Pushwoosh.xcconfig */; + baseConfigurationReference = 4B2D7F39EE114D3E593BF786AE4E7D30 /* Pushwoosh.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -2713,9 +5040,9 @@ }; name = "Production Full"; }; - C640B9BCE975B03379C3222EA987517F /* Debug */ = { + BF5AFBF14010B3BA893B98232D702C51 /* Production Full */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EE15204756DE856378A2436E7AA3EC7A /* FBSDKCoreKit.xcconfig */; + baseConfigurationReference = 77A8043BA8B05BE74858231DA2787C3C /* MoPub-FacebookAudienceNetwork-Adapters.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; @@ -2727,46 +5054,15 @@ 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"; + 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 = 8.0; + 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; - }; - D5098D8A1C911523E8F7845ABE55389F /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EE15204756DE856378A2436E7AA3EC7A /* FBSDKCoreKit.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 = 8.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; + 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) "; @@ -2778,6 +5074,75 @@ }; name = "Production Full"; }; + C573FEDF5C05ABCB28559C0CF2D6D7C0 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D675BBB0EF7CD368D652F17E752443A /* mopub-ios-sdk.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"; + }; + C9533628ED053078831ACD3856C39AE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9085B8A32AFF10675A22486994BEAC12 /* Pods-MAPS.ME.release.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; + }; D6D5F1759D9469CD5C77DD43119F4ADC /* Production Full */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2902,78 +5267,9 @@ }; name = Debug; }; - E98190D44F6888EC1D0313469B6590BC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9085B8A32AFF10675A22486994BEAC12 /* Pods-MAPS.ME.release.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; - }; - F8F348CAA2F77FC027DB781ED561DB89 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EE15204756DE856378A2436E7AA3EC7A /* FBSDKCoreKit.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 = 8.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; - }; FE3F4FF80A343A437C7E2B7A59BF8CF1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F35ECF36146A2B85D414417FCEF7C7A3 /* AppsFlyerFramework.xcconfig */; + baseConfigurationReference = DD7EC0A94762437B8C70E7D42301789D /* AppsFlyerFramework.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -2988,12 +5284,12 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0C8C0D3C55FF12F1DB88732D62C94BAD /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */ = { + 13D407A95703625CC523D178B16CAA5B /* Build configuration list for PBXAggregateTarget "FBAudienceNetwork" */ = { isa = XCConfigurationList; buildConfigurations = ( - C640B9BCE975B03379C3222EA987517F /* Debug */, - D5098D8A1C911523E8F7845ABE55389F /* Production Full */, - F8F348CAA2F77FC027DB781ED561DB89 /* Release */, + 9EC1A29B31CB2016ED7563E458D8963E /* Debug */, + 77C6904364690F30055789CD8FB772E1 /* Production Full */, + 475E7FE2F03B100D37DDA8566EEBDB2E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3018,6 +5314,16 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 47259152A956C00811D7147734A8451D /* Build configuration list for PBXNativeTarget "MoPub-FacebookAudienceNetwork-Adapters" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8AAC18B695A7C67663C0A402747CA5E7 /* Debug */, + BF5AFBF14010B3BA893B98232D702C51 /* Production Full */, + 05627B3FF0AB79C98C0FB02943BBE052 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3028,16 +5334,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4EFC6F48627135CE71DEAF73738FFDA8 /* Build configuration list for PBXNativeTarget "Bolts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 42BCF11407975131296E499818D8D017 /* Debug */, - A55313B1AED2A92E2817CACA450E3B6E /* Production Full */, - 6ACCF149313D48B20F1A4201684FB963 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 5418348C4E12C2FA948C40C515696052 /* Build configuration list for PBXAggregateTarget "AppsFlyerFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3048,6 +5344,26 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 6377DB413E1980A77072E63A49F61298 /* Build configuration list for PBXNativeTarget "mopub-ios-sdk" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0111203CB3DB4A3B2BFF3DDF9C007BB1 /* Debug */, + C573FEDF5C05ABCB28559C0CF2D6D7C0 /* Production Full */, + 4C90ECA5A1D4B5A2713ED9FC82C146C1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 76ED545758C9056F2236E0F1AA9D714E /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 736556FEA4AD56D4654DBD7646464788 /* Debug */, + 9FD4ACC1F394EAFF6204277E804C76B0 /* Production Full */, + 51541B4300D803AC8759DBF05CE1A6B6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 7C02779DD1DAE293FF03C671E0064247 /* Build configuration list for PBXNativeTarget "FBSDKLoginKit" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3068,12 +5384,12 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CD0E7B75DDDCA9971C59A75F5F735AF9 /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */ = { + 9DBE88E9E76D4E0512EB057E5F9AB74D /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */ = { isa = XCConfigurationList; buildConfigurations = ( - B062D7EE0154D0DAE78ED1BB63C24375 /* Debug */, - 5A967A292C79452A258A771BB313C366 /* Production Full */, - E98190D44F6888EC1D0313469B6590BC /* Release */, + 97306A87C0ECBE4B855A6E56889CCD57 /* Debug */, + 61F1BFB4C0A9C2B215AD34E9D0E7C66F /* Production Full */, + C9533628ED053078831ACD3856C39AE5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m deleted file mode 100644 index aeabf61a7c..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts : NSObject -@end -@implementation PodsDummy_Bolts -@end diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-umbrella.h b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-umbrella.h deleted file mode 100644 index 8a92beb888..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-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 "BFAppLink.h" -#import "BFAppLinkNavigation.h" -#import "BFAppLinkResolving.h" -#import "BFAppLinkReturnToRefererController.h" -#import "BFAppLinkReturnToRefererView.h" -#import "BFAppLinkTarget.h" -#import "BFMeasurementEvent.h" -#import "BFURL.h" -#import "BFWebViewAppLinkResolver.h" -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFGeneric.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap deleted file mode 100644 index 712e2c8de7..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig b/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig deleted file mode 100644 index b3060f0413..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts -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}/Bolts -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 new file mode 100644 index 0000000000..a009e2abcc --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.xcconfig @@ -0,0 +1,11 @@ +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 index 7ba8bd35fc..fc69492f09 100644 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.42.0 + 5.15.0 CFBundleSignature ???? CFBundleVersion diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h index d8cdcdbc3b..62f79aac99 100644 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h @@ -16,11 +16,6 @@ #import "FBSDKConstants.h" #import "FBSDKCopying.h" #import "FBSDKCoreKit.h" -#import "FBSDKGraphErrorRecoveryProcessor.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKGraphRequestDataAttachment.h" -#import "FBSDKMacros.h" #import "FBSDKMeasurementEvent.h" #import "FBSDKMutableCopying.h" #import "FBSDKProfile.h" @@ -39,6 +34,10 @@ #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.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig index 5661b6dcde..c9cd4b67a5 100644 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig +++ b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig @@ -1,7 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -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" +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} diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist index 7ba8bd35fc..fc69492f09 100644 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.42.0 + 5.15.0 CFBundleSignature ???? CFBundleVersion diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch index beb2a24418..ea160349b1 100644 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch @@ -10,3 +10,4 @@ #endif #endif +#define FBSDKCOCOAPODS diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig index 1ab03fc5c0..ce081a80d6 100644 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig +++ b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig @@ -1,8 +1,7 @@ -CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -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" +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} diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist similarity index 96% rename from iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist rename to iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist index 62cf7b2f99..5d3ab08f2c 100644 --- a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-Info.plist +++ b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.9.0 + 5.6.0 CFBundleSignature ???? CFBundleVersion 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 new file mode 100644 index 0000000000..e993e8853e --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MoPub_FacebookAudienceNetwork_Adapters : NSObject +@end +@implementation PodsDummy_MoPub_FacebookAudienceNetwork_Adapters +@end diff --git a/iphone/Maps/Pods/Target Support Files/Bolts/Bolts-prefix.pch b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch similarity index 100% rename from iphone/Maps/Pods/Target Support Files/Bolts/Bolts-prefix.pch rename to iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch 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 new file mode 100644 index 0000000000..3580bf0160 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-umbrella.h @@ -0,0 +1,23 @@ +#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.modulemap b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap new file mode 100644 index 0000000000..510bc74f31 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap @@ -0,0 +1,6 @@ +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.xcconfig b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.xcconfig new file mode 100644 index 0000000000..52bd147104 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.xcconfig @@ -0,0 +1,10 @@ +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 87674f4adb..15e9b561ac 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 @@ -33,38 +33,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright 2018 AppsFlyer Ltd. All rights reserved. -## Bolts +## FBAudienceNetwork -BSD License +Copyright 2004-present Facebook. All Rights Reserved. -For Bolts software +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Facebook. -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. This copyright notice shall be +included in all copies or substantial portions of the software. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ## FBSDKCoreKit @@ -113,6 +101,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 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. +## MoPub-FacebookAudienceNetwork-Adapters + + The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ + + + + ## Pushwoosh Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.com) @@ -137,4 +132,8 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/ 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 e1f35caa6f..fa79221a71 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 @@ -58,40 +58,28 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FooterText - BSD License + Copyright 2004-present Facebook. All Rights Reserved. -For Bolts software +You are hereby granted a non-exclusive, worldwide, royalty-free license to use, +copy, modify, and distribute this software in source code or binary form for use +in connection with the web services and APIs provided by Facebook. -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +As with any software that integrates with the Facebook platform, your use of +this software is subject to the Facebook Developer Principles and Policies +[http://developers.facebook.com/policy/]. This copyright notice shall be +included in all copies or substantial portions of the software. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION 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 - BSD + Copyright Title - Bolts + FBAudienceNetwork Type PSGroupSpecifier @@ -160,6 +148,19 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 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 Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.com) @@ -191,6 +192,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 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 Generated by CocoaPods - https://cocoapods.org diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh index 1cb32e08a0..fa26bbd696 100755 --- a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-frameworks.sh @@ -162,24 +162,24 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" install_framework "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework" + install_framework "${BUILT_PRODUCTS_DIR}/mopub-ios-sdk/MoPub.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" install_framework "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework" + install_framework "${BUILT_PRODUCTS_DIR}/mopub-ios-sdk/MoPub.framework" fi if [[ "$CONFIGURATION" == "Production Full" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" install_framework "${BUILT_PRODUCTS_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework" install_framework "${BUILT_PRODUCTS_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework" + install_framework "${BUILT_PRODUCTS_DIR}/mopub-ios-sdk/MoPub.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait 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 62a7a7f315..7f29c7fe66 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,9 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/Pushwoosh/Framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/Pushwoosh/Framework" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters/MoPub_FacebookAudienceNetwork_Adapters.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk/MoPub.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "Bolts" -framework "CoreTelephony" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "Pushwoosh" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -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" +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"stdc++" -l"xml2" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "FBAudienceNetwork" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "MediaPlayer" -framework "MoPub" -framework "MoPub_FacebookAudienceNetwork_Adapters" -framework "Pushwoosh" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -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" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig index 62a7a7f315..7f29c7fe66 100644 --- a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.production full.xcconfig @@ -1,9 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/Pushwoosh/Framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/Pushwoosh/Framework" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters/MoPub_FacebookAudienceNetwork_Adapters.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk/MoPub.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "Bolts" -framework "CoreTelephony" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "Pushwoosh" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -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" +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"stdc++" -l"xml2" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "FBAudienceNetwork" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "MediaPlayer" -framework "MoPub" -framework "MoPub_FacebookAudienceNetwork_Adapters" -framework "Pushwoosh" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -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" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 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 62a7a7f315..7f29c7fe66 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,9 +1,9 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/Pushwoosh/Framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/Pushwoosh/Framework" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ActionSheetPicker-3.0/ActionSheetPicker_3_0.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters/MoPub_FacebookAudienceNetwork_Adapters.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk/MoPub.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "Bolts" -framework "CoreTelephony" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "Pushwoosh" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -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" +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"stdc++" -l"xml2" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "ActionSheetPicker_3_0" -framework "AdSupport" -framework "AppsFlyerLib" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "FBAudienceNetwork" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "MediaPlayer" -framework "MoPub" -framework "MoPub_FacebookAudienceNetwork_Adapters" -framework "Pushwoosh" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -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" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 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 new file mode 100644 index 0000000000..96cd22c189 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 5.10.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 new file mode 100644 index 0000000000..8cd65a3e95 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m @@ -0,0 +1,5 @@ +#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 new file mode 100644 index 0000000000..beb2a24418 --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch @@ -0,0 +1,12 @@ +#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 new file mode 100644 index 0000000000..b771e69dab --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-umbrella.h @@ -0,0 +1,251 @@ +#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 "MPAdAlertGestureRecognizer.h" +#import "MPAdAlertManager.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 "MPConsentDialogViewController.h" +#import "MPConsentManager.h" +#import "MPCoreInstanceProvider+MRAID.h" +#import "MPCoreInstanceProvider.h" +#import "MPExtendedHitBoxButton.h" +#import "MPHTTPNetworkSession.h" +#import "MPHTTPNetworkTaskData.h" +#import "MPMediationManager.h" +#import "MPMemoryCache.h" +#import "MPRateLimitConfiguration.h" +#import "MPRateLimitManager.h" +#import "MPReachabilityManager.h" +#import "MPURL.h" +#import "MPURLRequest.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 "MPNativeAdError+VAST.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 "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 "MPReachability.h" +#import "MPSessionTracker.h" +#import "MPStopwatch.h" +#import "MPTimer.h" +#import "MPUserInteractionGestureRecognizer.h" +#import "MPMediaFileCache.h" +#import "MPVASTAd.h" +#import "MPVASTCompanionAd.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 "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 "MPNativeAdRequest+MPNativeAdSource.h" +#import "MPAdPlacerInvocation.h" +#import "MPCollectionViewAdPlacerCell.h" +#import "MPDiskLRUCache.h" +#import "MPImageDownloadQueue.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 "MPNativeCache.h" +#import "MPNativePositionResponseDeserializer.h" +#import "MPNativePositionSource.h" +#import "MPNativeView.h" +#import "MPStreamAdPlacerDelegate.h" +#import "MPTableViewAdPlacerCell.h" +#import "MPAdPositioning.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 "MPNativeAdError.h" +#import "MPNativeAdRenderer.h" +#import "MPNativeAdRendererConfiguration.h" +#import "MPNativeAdRendererSettings.h" +#import "MPNativeAdRendering.h" +#import "MPNativeAdRenderingImageLoader.h" +#import "MPNativeAdRequest.h" +#import "MPNativeAdRequestTargeting.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" +#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" + +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.modulemap b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap new file mode 100644 index 0000000000..be0aa9779e --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap @@ -0,0 +1,6 @@ +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.xcconfig b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig new file mode 100644 index 0000000000..cc8b98d3ec --- /dev/null +++ b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig @@ -0,0 +1,12 @@ +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/mopub-ios-sdk/LICENSE b/iphone/Maps/Pods/mopub-ios-sdk/LICENSE new file mode 100644 index 0000000000..dbbea5c1fa --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/LICENSE @@ -0,0 +1 @@ +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/3party/MoPubSDK/Internal/Banners/MPBannerAdManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h similarity index 68% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManager.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h index 40dbdcc579..400fd7d9f5 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManager.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h @@ -1,23 +1,27 @@ // // MPBannerAdManager.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 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)loadAd; +- (void)loadAdWithTargeting:(MPAdTargeting *)targeting; - (void)forceRefreshAd; - (void)stopAutomaticallyRefreshingContents; - (void)startAutomaticallyRefreshingContents; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m similarity index 53% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManager.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m index 1b39ca2222..ab6c62dc60 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManager.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m @@ -1,20 +1,25 @@ // // MPBannerAdManager.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBannerAdManager.h" #import "MPAdServerURLBuilder.h" -#import "MPInstanceProvider.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 () @@ -23,11 +28,15 @@ @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; @@ -38,14 +47,6 @@ @implementation MPBannerAdManager -@synthesize delegate = _delegate; -@synthesize communicator = _communicator; -@synthesize onscreenAdapter = _onscreenAdapter; -@synthesize requestingAdapter = _requestingAdapter; -@synthesize refreshTimer = _refreshTimer; -@synthesize adActionInProgress = _adActionInProgress; -@synthesize currentOrientation = _currentOrientation; - - (id)initWithDelegate:(id)delegate { self = [super init]; @@ -66,6 +67,8 @@ self.automaticallyRefreshesContents = YES; self.currentOrientation = MPInterfaceOrientation(); + + _loadStopwatch = MPStopwatch.new; } return self; } @@ -90,17 +93,20 @@ return self.communicator.loading || self.requestingAdapter; } -- (void)loadAd +- (void)loadAdWithTargeting:(MPAdTargeting *)targeting { + MPLogAdEvent(MPLogEvent.adLoadAttempt, self.delegate.adUnitId); + if (!self.hasRequestedAtLeastOneAd) { self.hasRequestedAtLeastOneAd = YES; } if (self.loading) { - MPLogWarn(@"Banner view (%@) is already loading an ad. Wait for previous load to finish.", [self.delegate adUnitId]); + MPLogEvent([MPLogEvent error:NSError.adAlreadyLoading message:nil]); return; } + self.targeting = targeting; [self loadAdWithURL:nil]; } @@ -128,6 +134,13 @@ } } +- (void)resumeRefreshTimer +{ + if ([self.refreshTimer isValid]) { + [self.refreshTimer resume]; + } +} + - (void)stopAutomaticallyRefreshingContents { self.automaticallyRefreshesContents = NO; @@ -157,12 +170,9 @@ [self.communicator cancel]; - URL = (URL) ? URL : [MPAdServerURLBuilder URLWithAdUnitID:[self.delegate adUnitId] - keywords:[self.delegate keywords] - userDataKeywords:[self.delegate userDataKeywords] - location:[self.delegate location]]; + URL = (URL) ? URL : [MPAdServerURLBuilder URLWithAdUnitID:[self.delegate adUnitId] targeting:self.targeting]; - MPLogInfo(@"Banner view (%@) loading ad with MoPub server URL: %@", [self.delegate adUnitId], URL); + self.mostRecentlyLoadedURL = URL; [self.communicator loadURL:URL]; } @@ -174,6 +184,11 @@ [self.onscreenAdapter rotateToOrientation:orientation]; } +- (BOOL)isMraidAd +{ + return self.requestingConfiguration.isMraidAd; +} + #pragma mark - Internal - (void)scheduleRefreshTimer @@ -181,11 +196,11 @@ [self.refreshTimer invalidate]; NSTimeInterval timeInterval = self.requestingConfiguration ? self.requestingConfiguration.refreshInterval : DEFAULT_BANNER_REFRESH_INTERVAL; - if (timeInterval > 0) { - self.refreshTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(refreshTimerDidFire) - repeats:NO]; + 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); } @@ -193,50 +208,65 @@ - (void)refreshTimerDidFire { - if (!self.loading && self.automaticallyRefreshesContents) { - [self loadAd]; + 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]; } } +- (BOOL)shouldScheduleTimerOnImpressionDisplay { + // If `visibleImpressionTrackingEnabled` is set to `YES`, we + // should schedule the timer only after the impression has fired. + return self.requestingConfiguration.visibleImpressionTrackingEnabled; +} + +- (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.requestingConfiguration = configurations.firstObject; + self.remainingConfigurations = [configurations mutableCopy]; + self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - MPLogInfo(@"Banner ad view is fetching ad network type: %@", self.requestingConfiguration.networkType); - - if (self.requestingConfiguration.adType == MPAdTypeUnknown) { - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorServerError]]; - return; - } - - if (self.requestingConfiguration.adType == MPAdTypeInterstitial) { - MPLogWarn(@"Could not load ad: banner object received an interstitial ad unit ID."); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorAdapterInvalid]]; - return; - } - - if (self.requestingConfiguration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorAdUnitWarmingUp]]; - return; - } - - if ([self.requestingConfiguration.networkType isEqualToString:kAdTypeClear]) { + // 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:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; + [self didFailToLoadAdapterWithError:[NSError errorWithCode:MOPUBErrorNoInventory]]; return; } - self.requestingAdapter = [[MPBannerCustomEventAdapter alloc] initWithConfiguration:self.requestingConfiguration - delegate:self]; - if (!self.requestingAdapter) { - [self loadAdWithURL:self.requestingConfiguration.failoverURL]; - return; - } - - [self.requestingAdapter _getAdWithConfiguration:self.requestingConfiguration containerSize:self.delegate.containerSize]; + [self fetchAdWithConfiguration:self.requestingConfiguration]; } - (void)communicatorDidFailWithError:(NSError *)error @@ -246,10 +276,16 @@ - (void)didFailToLoadAdapterWithError:(NSError *)error { - [self.delegate managerDidFailToLoadAd]; + [self.delegate managerDidFailToLoadAdWithError:error]; [self scheduleRefreshTimer]; +} - MPLogError(@"Banner view (%@) failed. Error: %@", [self.delegate adUnitId], error); +- (BOOL)isFullscreenAd { + return NO; +} + +- (NSString *)adUnitId { + return [self.delegate adUnitId]; } #pragma mark - @@ -276,7 +312,7 @@ - (CLLocation *)location { - return [self.delegate location]; + return self.targeting.location; } - (BOOL)requestingAdapterIsReadyToBePresented @@ -296,30 +332,59 @@ [self.onscreenAdapter didDisplayAd]; self.requestingAdapterAdContentView = nil; - [self scheduleRefreshTimer]; + + if (![self shouldScheduleTimerOnImpressionDisplay]) { + [self scheduleRefreshTimer]; + } } } - (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) { - [self loadAdWithURL:self.requestingConfiguration.failoverURL]; + // 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) { + if (self.onscreenAdapter == adapter && adapter != nil) { // the onscreen adapter has failed. we need to: // 1) remove it - // 2) tell the delegate - // 3) and note that there can't possibly be a modal on display any more - [self.delegate managerDidFailToLoadAd]; + // 2) and note that there can't possibly be a modal on display any more [self.delegate invalidateContentView]; [self.onscreenAdapter unregisterDelegate]; self.onscreenAdapter = nil; @@ -330,15 +395,26 @@ if (self.requestingAdapterIsReadyToBePresented) { [self presentRequestingAdapter]; } else { - [self loadAd]; + [self loadAdWithTargeting:self.targeting]; } } } +- (void)adapterDidTrackImpressionForAd:(MPBaseBannerAdapter *)adapter { + if (self.onscreenAdapter == adapter && [self shouldScheduleTimerOnImpressionDisplay]) { + [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]; } } @@ -346,7 +422,9 @@ - (void)userActionDidFinishForAdapter:(MPBaseBannerAdapter *)adapter { if (self.onscreenAdapter == adapter) { + MPLogAdEvent(MPLogEvent.adDidDismissModal, self.delegate.banner.adUnitId); [self.delegate userActionDidFinish]; + self.adActionInProgress = NO; [self presentRequestingAdapter]; } @@ -355,10 +433,26 @@ - (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/3party/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h similarity index 57% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h index b8a031ddf3..19a1ad8fc6 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h @@ -1,13 +1,16 @@ // // MPBannerAdManagerDelegate.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 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 @@ -17,17 +20,20 @@ - (MPAdView *)banner; - (id)bannerDelegate; - (CGSize)containerSize; -- (NSString *)keywords; -- (NSString *)userDataKeywords; -- (CLLocation *)location; - (UIViewController *)viewControllerForPresentingModalView; +/** + * The latest ad targeting information for ad refresh and other scenarios. + */ +- (MPAdTargeting *)adTargeting; + - (void)invalidateContentView; - (void)managerDidLoadAd:(UIView *)ad; -- (void)managerDidFailToLoadAd; +- (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 new file mode 100644 index 0000000000..bfa65ad727 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h @@ -0,0 +1,27 @@ +// +// MPBannerCustomEvent+Internal.h +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m similarity index 53% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m index 2b88412dc5..fa7e2ac9fd 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m @@ -1,15 +1,16 @@ // // MPBannerCustomEvent+Internal.m -// MoPubSampleApp // -// Copyright © 2017 MoPub. All rights reserved. +// Copyright 2018-2019 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)trackMPXAndThirdPartyImpressions +- (void)trackImpressionsIncludedInMarkup { // no-op. } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h similarity index 72% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h index fd4fb092fd..eeedfabf0a 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h @@ -1,8 +1,9 @@ // // MPBannerCustomEventAdapter.h -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBaseBannerAdapter.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m similarity index 81% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m index 7f84e8c71b..d94015b851 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m @@ -1,15 +1,18 @@ // // MPBannerCustomEventAdapter.m -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 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 "MPInstanceProvider.h" +#import "MPCoreInstanceProvider.h" +#import "MPError.h" #import "MPLogging.h" #import "MPAdImpressionTimer.h" #import "MPBannerCustomEvent+Internal.h" @@ -54,21 +57,24 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration containerSize:(CGSize)size +- (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]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPBannerCustomEvent ****", NSStringFromClass(configuration.customEventClass)); - [self.delegate adapter:self didFailToLoadAdWithError:nil]; + 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]; } @@ -183,14 +189,31 @@ } } +- (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 { - // Ads server impression + // Track impression for all impression trackers known by the SDK [self trackImpression]; - // MPX and other trackers; - [self.bannerCustomEvent trackMPXAndThirdPartyImpressions]; + // Track impression for all impression trackers included in the markup + [self.bannerCustomEvent trackImpressionsIncludedInMarkup]; // Start viewability tracking [self.bannerCustomEvent startViewabilityTracker]; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h similarity index 77% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h index f8460ea995..bfc0cd1651 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h @@ -1,9 +1,9 @@ // // MPBaseBannerAdapter.h -// MoPub // -// Created by Nafis Jamal on 1/19/11. -// Copyright 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -12,6 +12,7 @@ @protocol MPBannerAdapterDelegate; @class MPAdConfiguration; +@class MPAdTargeting; @interface MPBaseBannerAdapter : NSObject @@ -30,8 +31,8 @@ * -_getAdWithConfiguration creates a strong reference to self before calling * -getAdWithConfiguration to prevent the adapter from being prematurely deallocated. */ -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration containerSize:(CGSize)size; -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration containerSize:(CGSize)size; +- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size; +- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size; - (void)didStopLoading; - (void)didDisplayAd; @@ -77,4 +78,15 @@ */ - (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/3party/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m similarity index 61% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m index 6bb16a7bed..a500a3d24e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m @@ -1,9 +1,9 @@ // // MPBaseBannerAdapter.m -// MoPub // -// Created by Nafis Jamal on 1/19/11. -// Copyright 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBaseBannerAdapter.h" @@ -14,6 +14,7 @@ #import "MPCoreInstanceProvider.h" #import "MPAnalyticsTracker.h" #import "MPTimer.h" +#import "MPError.h" @interface MPBaseBannerAdapter () @@ -49,20 +50,18 @@ #pragma mark - Requesting Ads -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration containerSize:(CGSize)size +- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size { // To be implemented by subclasses. [self doesNotRecognizeSelector:_cmd]; } -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration containerSize:(CGSize)size +- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size { self.configuration = configuration; [self startTimeoutTimer]; - - MPBaseBannerAdapter *strongSelf = self; - [strongSelf getAdWithConfiguration:configuration containerSize:size]; + [self getAdWithConfiguration:configuration targeting:targeting containerSize:size]; } - (void)didStopLoading @@ -81,18 +80,19 @@ self.configuration.adTimeoutInterval : BANNER_TIMEOUT_INTERVAL; if (timeInterval > 0) { - self.timeoutTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - + self.timeoutTimer = [MPTimer timerWithTimeInterval:timeInterval + target:self + selector:@selector(timeout) + repeats:NO]; [self.timeoutTimer scheduleNow]; } } - (void)timeout { - [self.delegate adapter:self didFailToLoadAdWithError:nil]; + NSError * error = [NSError errorWithCode:MOPUBErrorAdRequestTimedOut + localizedDescription:@"Banner ad request timed out"]; + [self.delegate adapter:self didFailToLoadAdWithError:error]; } #pragma mark - Rotation @@ -100,20 +100,18 @@ - (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation { // Do nothing by default. Subclasses can override. - MPLogDebug(@"rotateToOrientation %d called for adapter %@ (%p)", - newOrientation, NSStringFromClass([self class]), self); } #pragma mark - Metrics - (void)trackImpression { - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] trackImpressionForConfiguration:self.configuration]; + [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; } - (void)trackClick { - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] trackClickForConfiguration:self.configuration]; + [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; } @end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h similarity index 69% rename from iphone/Maps/3party/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h index ed97e6ccfe..668ff5a8f1 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h @@ -1,8 +1,9 @@ // // MPPrivateBannerCustomEventDelegate.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h new file mode 100644 index 0000000000..427c644989 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h @@ -0,0 +1,26 @@ +// +// MPAdAlertGestureRecognizer.h +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ +// + +/** + To trigger this gesture recognizer, the user needs to swipe from left to right, and then right to + left at least four times in the target view, while keeping the finger in a straight horizontal line. + See documentation here: + https://developers.mopub.com/publishers/tools/creative-flagging-tool/#report-a-creative + */ + +#import + +@interface MPAdAlertGestureRecognizer : UIGestureRecognizer + +/** + After adding this gesture recognizer to a new view, set minimum tracking distance base on the view size. + Default is 100. +*/ +@property (nonatomic, assign) CGFloat minTrackedDistanceForZigZag; + +@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m similarity index 94% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m index 30ab00002f..c642e937d5 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m @@ -1,8 +1,9 @@ // // MPAdAlertGestureRecognizer.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPAdAlertGestureRecognizer.h" @@ -13,6 +14,12 @@ #define kDefaultMinTrackedDistance 100 #define kDefaultNumZigZagsForRecognition 4 +typedef NS_ENUM(NSUInteger, MPAdAlertGestureRecognizerState) { + MPAdAlertGestureRecognizerState_ZigRight1, + MPAdAlertGestureRecognizerState_ZagLeft2, + MPAdAlertGestureRecognizerState_Recognized +}; + NSInteger const kMPAdAlertGestureMaxAllowedYAxisMovement = 50; @interface MPAdAlertGestureRecognizer () @@ -22,18 +29,12 @@ NSInteger const kMPAdAlertGestureMaxAllowedYAxisMovement = 50; @property (nonatomic, assign) CGPoint startingPoint; @property (nonatomic, assign) BOOL thresholdReached; @property (nonatomic, assign) NSInteger curNumZigZags; +@property (nonatomic, assign) NSInteger numZigZagsForRecognition; // default is 4 @end @implementation MPAdAlertGestureRecognizer -@synthesize currentAlertGestureState = _currentAlertGestureState; -@synthesize inflectionPoint = _inflectionPoint; -@synthesize thresholdReached = _thresholdReached; -@synthesize curNumZigZags = _curNumZigZags; -@synthesize numZigZagsForRecognition = _numZigZagsForRecognition; -@synthesize minTrackedDistanceForZigZag = _minTrackedDistanceForZigZag; - - (id)init { self = [super init]; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h similarity index 78% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h index 0caa34cca3..a0373ea343 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h @@ -1,8 +1,9 @@ // // MPAdAlertManager.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -27,4 +28,4 @@ @optional - (void)adAlertManagerDidProcessAlert:(MPAdAlertManager *)manager; -@end \ No newline at end of file +@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m similarity index 94% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m index 7342fde46a..4244639d13 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m @@ -1,17 +1,19 @@ // // MPAdAlertManager.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPAdAlertManager.h" #import "MPAdConfiguration.h" #import "MPAdAlertGestureRecognizer.h" -#import "MPLogging.h" -#import "MPIdentityProvider.h" +#import "MPConstants.h" #import "MPCoreInstanceProvider.h" +#import "MPIdentityProvider.h" #import "MPLastResortDelegate.h" +#import "MPLogging.h" #import #import @@ -29,14 +31,12 @@ @implementation MPAdAlertManager +// synthesize for `MPAdAlertManagerProtocol` protocol @synthesize delegate = _delegate; @synthesize adConfiguration = _adConfiguration; -@synthesize processedAlert = _processedAlert; -@synthesize adAlertGestureRecognizer = _adAlertGestureRecognizer; @synthesize adUnitId = _adUnitId; @synthesize targetAdView = _targetAdView; @synthesize location = _location; -@synthesize currentOpenMailVC = _currentOpenMailVC; - (id)init { @@ -91,10 +91,10 @@ [params setValue:[UIDevice currentDevice].systemVersion forKey:@"platform_version"]; [params setValue:[MPIdentityProvider identifier] forKey:@"device_id"]; [params setValue:[UIDevice currentDevice].model forKey:@"device_model"]; - [params setValue:[NSNumber numberWithInteger:self.adConfiguration.adType] forKey:@"ad_type"]; + [params setValue:[NSNumber numberWithBool:self.adConfiguration.isFullscreenAd] forKey:@"is_fullscreen_ad"]; [params setValue:self.adUnitId forKey:@"ad_unit_id"]; [params setValue:self.adConfiguration.dspCreativeId forKey:@"creative_id"]; - [params setValue:self.adConfiguration.networkType forKey:@"network_type"]; + [params setValue:self.adConfiguration.adType forKey:@"ad_type"]; [params setValue:[[NSLocale currentLocale] localeIdentifier] forKey:@"device_locale"]; [params setValue:[self.location description] forKey:@"location"]; [params setValue:MP_SDK_VERSION forKey:@"sdk_version"]; @@ -223,7 +223,7 @@ return YES; // handle the touch } -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAPIEndpoints.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h similarity index 57% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPAPIEndpoints.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h index 083854fbec..f575be5463 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAPIEndpoints.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h @@ -1,14 +1,13 @@ // // MPAPIEndpoints.h -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import -#define MOPUB_BASE_HOSTNAME @"ads.mopub.com" - #define MOPUB_API_PATH_AD_REQUEST @"/m/ad" #define MOPUB_API_PATH_NATIVE_POSITIONING @"/m/pos" #define MOPUB_API_PATH_OPEN @"/m/open" @@ -17,8 +16,10 @@ @interface MPAPIEndpoints : NSObject +@property (nonatomic, copy, class) NSString * baseHostname; +@property (nonatomic, copy, readonly, class) NSString * baseURL; + + (void)setUsesHTTPS:(BOOL)usesHTTPS; -+ (NSString *)baseURL; -+ (NSString *)baseURLStringWithPath:(NSString *)path; ++ (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 new file mode 100644 index 0000000000..6aa7f6e5ab --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m @@ -0,0 +1,66 @@ +// +// MPAPIEndpoints.m +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ +// + +#import "MPAPIEndpoints.h" +#import "MPConstants.h" +#import "MPCoreInstanceProvider.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 ([[MPCoreInstanceProvider sharedProvider] 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/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h similarity index 83% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h index 9d8c7341ad..664a2acce9 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h @@ -1,8 +1,9 @@ // // MPActivityViewControllerHelper+TweetShare.h -// MoPubSDK // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m similarity index 94% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m index dfcfe70c4a..d89b556d25 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m @@ -1,8 +1,9 @@ // // MPActivityViewControllerHelper+TweetShare.m -// MoPubSDK // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPActivityViewControllerHelper+TweetShare.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h similarity index 94% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h index 87d1377482..36dca44fa9 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h @@ -1,8 +1,9 @@ // // MPActivityViewControllerHelper.h -// MoPubSDK // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m similarity index 96% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m index b43084cc90..16ceb2abe0 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m @@ -1,12 +1,12 @@ // // MPActivityViewControllerHelper.m -// MoPubSDK // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPActivityViewControllerHelper.h" -#import "MPInstanceProvider.h" /** * MPActivityItemProviderWithSubject subclasses UIActivityItemProvider 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 new file mode 100644 index 0000000000..f77317530c --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h @@ -0,0 +1,134 @@ +// +// MPAdConfiguration.h +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ +// + +#import +#import "MPGlobal.h" +#import "MPImpressionData.h" + +@class MPRewardedVideoReward; + +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 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 *nativeVideoTrackers; +@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 isVASTClickabilityExperimentEnabled; + +/** + Unified ad unit format in its raw string representation. + */ +@property (nonatomic, copy) NSString *format; + +// viewable impression tracking experiment +@property (nonatomic) NSTimeInterval impressionMinVisibleTimeInSec; +@property (nonatomic) CGFloat impressionMinVisiblePixels; +@property (nonatomic) BOOL visibleImpressionTrackingEnabled; + +- (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 new file mode 100644 index 0000000000..49cd7a7981 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m @@ -0,0 +1,689 @@ +// +// MPAdConfiguration.m +// +// Copyright 2018-2019 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 "MPViewabilityTracker.h" +#import "NSDictionary+MPAdditions.h" +#import "NSJSONSerialization+MPAdditions.h" +#import "NSString+MPAdditions.h" + +#if MP_HAS_NATIVE_PACKAGE +#import "MOPUBNativeVideoCustomEvent.h" +#import "MPMoPubNativeCustomEvent.h" +#import "MPVASTTrackingEvent.h" +#endif + +// MACROS +#define AFTER_LOAD_DURATION_MACRO @"%%LOAD_DURATION_MS%%" +#define AFTER_LOAD_RESULT_MACRO @"%%LOAD_RESULT%%" + +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 kNativeVideoTrackersMetadataKey = @"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"; + +// 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"; + +// native video +NSString * const kNativeVideoTrackerUrlMacro = @"%%VIDEO_EVENT%%"; +NSString * const kNativeVideoTrackerEventsMetadataKey = @"events"; +NSString * const kNativeVideoTrackerUrlsMetadataKey = @"urls"; +NSString * const kNativeVideoTrackerEventDictionaryKey = @"event"; +NSString * const kNativeVideoTrackerTextDictionaryKey = @"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"; + +// clickability experiment +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]; + + self.customEventClass = [self setUpCustomEventClassFromMetadata:metadata]; + + 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]; +#if MP_HAS_NATIVE_PACKAGE + self.nativeVideoTrackers = [self nativeVideoTrackersFromMetadata:metadata key:kNativeVideoTrackersMetadataKey]; +#endif + + self.impressionMinVisibleTimeInSec = [self timeIntervalFromMsmetadata:metadata forKey:kBannerImpressionVisableMsMetadataKey]; + self.impressionMinVisiblePixels = [[self adAmountFromMetadata:metadata key:kBannerImpressionMinPixelMetadataKey] floatValue]; + + self.impressionData = [self impressionDataFromMetadata:metadata]; + self.isVASTClickabilityExperimentEnabled = [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]; +} + +/** + Provided the metadata of an ad, return the class of corresponding custome event. + */ +- (Class)setUpCustomEventClassFromMetadata:(NSDictionary *)metadata +{ + NSDictionary *customEventTable; + if (self.isFullscreenAd) { + customEventTable = @{@"admob_full": @"MPGoogleAdMobInterstitialCustomEvent", // optional class + kAdTypeHtml: NSStringFromClass([MPHTMLInterstitialCustomEvent class]), + kAdTypeMraid: NSStringFromClass([MPMRAIDInterstitialCustomEvent class]), + kAdTypeRewardedVideo: NSStringFromClass([MPMoPubRewardedVideoCustomEvent class]), + kAdTypeRewardedPlayable: NSStringFromClass([MPMoPubRewardedPlayableCustomEvent class])}; + } else { + customEventTable = @{@"admob_native": @"MPGoogleAdMobBannerCustomEvent", // optional class + kAdTypeHtml: NSStringFromClass([MPHTMLBannerCustomEvent class]), + kAdTypeMraid: NSStringFromClass([MPMRAIDBannerCustomEvent class]), + kAdTypeNativeVideo: NSStringFromClass([MOPUBNativeVideoCustomEvent class]), + kAdTypeNative: NSStringFromClass([MPMoPubNativeCustomEvent 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); +} + +- (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]; +} + +#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; + } +} + +#if MP_HAS_NATIVE_PACKAGE +- (NSDictionary *)nativeVideoTrackersFromMetadata:(NSDictionary *)metadata key:(NSString *)key +{ + NSDictionary *dictFromMetadata = [self dictionaryFromMetadata:metadata forKey:key]; + if (!dictFromMetadata) { + return nil; + } + NSMutableDictionary *videoTrackerDict = [NSMutableDictionary new]; + NSArray *events = dictFromMetadata[kNativeVideoTrackerEventsMetadataKey]; + NSArray *urls = dictFromMetadata[kNativeVideoTrackerUrlsMetadataKey]; + NSSet *supportedEvents = [NSSet setWithObjects: + MPVideoEventStart, + MPVideoEventFirstQuartile, + MPVideoEventMidpoint, + MPVideoEventThirdQuartile, + MPVideoEventComplete, + nil]; + for (MPVideoEvent event in events) { + if (![supportedEvents containsObject: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]; + for (NSString *url in urls) { + if ([url rangeOfString:kNativeVideoTrackerUrlMacro].location != NSNotFound) { + NSString *trackerUrl = [url stringByReplacingOccurrencesOfString:kNativeVideoTrackerUrlMacro withString:event]; + NSDictionary *dict = @{kNativeVideoTrackerEventDictionaryKey:event, kNativeVideoTrackerTextDictionaryKey:trackerUrl}; + MPVASTTrackingEvent *tracker = [[MPVASTTrackingEvent alloc] initWithDictionary:dict]; + [trackers addObject:tracker]; + } + } + if (trackers.count > 0) { + videoTrackerDict[event] = trackers; + } +} + +#endif + +- (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; +} + +- (BOOL)visibleImpressionTrackingEnabled +{ + if (self.impressionMinVisibleTimeInSec < 0 || self.impressionMinVisiblePixels <= 0) { + return NO; + } + return YES; +} + +- (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/3party/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h similarity index 74% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h index 18721804a4..25e300993a 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h @@ -1,29 +1,26 @@ // // MPAdDestinationDisplayAgent.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import #import "MPActivityViewControllerHelper+TweetShare.h" #import "MPURLResolver.h" #import "MPProgressOverlayView.h" -#import "MPAdBrowserController.h" -#import "MPStoreKitProvider.h" #import "MOPUBDisplayAgentType.h" @protocol MPAdDestinationDisplayAgentDelegate; @interface MPAdDestinationDisplayAgent : NSObject @property (nonatomic, weak) id delegate; + (MPAdDestinationDisplayAgent *)agentWithDelegate:(id)delegate; -+ (BOOL)shouldUseSafariViewController; ++ (BOOL)shouldDisplayContentInApp; - (void)displayDestinationForURL:(NSURL *)URL; - (void)cancel; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m similarity index 67% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m index 27a0f8204f..f3a22d8af7 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m @@ -1,8 +1,9 @@ // // MPAdDestinationDisplayAgent.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPAdDestinationDisplayAgent.h" @@ -13,13 +14,15 @@ #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 () +@interface MPAdDestinationDisplayAgent () @property (nonatomic, strong) MPURLResolver *resolver; @property (nonatomic, strong) MPURLResolver *enhancedDeeplinkFallbackResolver; @@ -27,35 +30,23 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; @property (nonatomic, assign) BOOL isLoadingDestination; @property (nonatomic) MOPUBDisplayAgentType displayAgentType; @property (nonatomic, strong) SKStoreProductViewController *storeKitController; - -@property (nonatomic, strong) MPAdBrowserController *browserController; @property (nonatomic, strong) SFSafariViewController *safariController; -@property (nonatomic, strong) MPTelephoneConfirmationController *telephoneConfirmationController; @property (nonatomic, strong) MPActivityViewControllerHelper *activityViewControllerHelper; -- (void)presentStoreKitControllerWithItemIdentifier:(NSString *)identifier fallbackURL:(NSURL *)URL; -- (void)hideOverlay; -- (void)hideModalAndNotifyDelegate; -- (void)dismissAllModalContent; - @end //////////////////////////////////////////////////////////////////////////////////////////////////// @implementation MPAdDestinationDisplayAgent -@synthesize delegate = _delegate; -@synthesize resolver = _resolver; -@synthesize isLoadingDestination = _isLoadingDestination; - + (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 displayAgentType]; + agent.displayAgentType = MOPUBExperimentProvider.sharedInstance.displayAgentType; return agent; } @@ -70,9 +61,6 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; // 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]; - - self.browserController.delegate = nil; - } - (void)dismissAllModalContent @@ -80,6 +68,20 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; [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; @@ -163,20 +165,21 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; - (void)handleEnhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request { - BOOL didOpenSuccessfully = [[UIApplication sharedApplication] openURL:request.primaryURL]; - if (didOpenSuccessfully) { - [self hideOverlay]; - [self.delegate displayAgentWillLeaveApplication]; - [self completeDestinationLoading]; - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] sendTrackingRequestForURLs:request.primaryTrackingURLs]; - } else if (request.fallbackURL) { - [self handleEnhancedDeeplinkFallbackForRequest:request]; - } else { - [self openURLInApplication:request.originalURL]; - } + [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; +- (void)handleEnhancedDeeplinkFallbackForRequest:(MPEnhancedDeeplinkRequest *)request { __weak __typeof__(self) weakSelf = self; [self.enhancedDeeplinkFallbackResolver cancel]; @@ -191,7 +194,7 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; // normally with one exception: we don't follow any nested enhanced deeplinks. BOOL success = [strongSelf handleSuggestedURLAction:actionInfo isResolvingEnhancedDeeplink:YES]; if (success) { - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] sendTrackingRequestForURLs:request.fallbackTrackingURLs]; + [[MPAnalyticsTracker sharedTracker] sendTrackingRequestForURLs:request.fallbackTrackingURLs]; } } }]; @@ -201,22 +204,18 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; - (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: - if ([MPAdDestinationDisplayAgent shouldUseSafariViewController]) { - if (@available(iOS 9.0, *)) { - self.safariController = [[SFSafariViewController alloc] initWithURL:URL]; - self.safariController.delegate = self; - } - } else { - if (actionType == MPURLActionTypeOpenInWebView) { - self.browserController = [[MPAdBrowserController alloc] initWithURL:URL - HTMLString:HTMLString - delegate:self]; - } else { - self.browserController = [[MPAdBrowserController alloc] initWithURL:URL - delegate:self]; - } - } +#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: @@ -227,37 +226,31 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; - (void)showAdBrowserController { [self hideOverlay]; - - UIViewController *browserViewController = self.safariController ? self.safariController : self.browserController; - - browserViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - [[self.delegate viewControllerForPresentingModalView] presentViewController:browserViewController + [[self.delegate viewControllerForPresentingModalView] presentViewController:self.safariController animated:MP_ANIMATED completion:nil]; } -- (void)showStoreKitProductWithParameter:(NSString *)parameter fallbackURL:(NSURL *)URL +- (void)showStoreKitProductWithParameters:(NSDictionary *)parameters fallbackURL:(NSURL *)URL { - if ([MPStoreKitProvider deviceHasStoreKit]) { - [self presentStoreKitControllerWithItemIdentifier:parameter fallbackURL:URL]; - } else { + if (!SKStoreProductViewController.canUseStoreProductViewController) { [self openURLInApplication:URL]; + return; } + + [self presentStoreKitControllerWithProductParameters:parameters fallbackURL:URL]; } - (void)openURLInApplication:(NSURL *)URL { [self hideOverlay]; - if ([URL mp_hasTelephoneScheme] || [URL mp_hasTelephonePromptScheme]) { - [self interceptTelephoneURL:URL]; - } else { - BOOL didOpenSuccessfully = [[UIApplication sharedApplication] openURL:URL]; - if (didOpenSuccessfully) { + [MoPub openURL:URL options:@{} completion:^(BOOL didOpenURLSuccessfully) { + if (didOpenURLSuccessfully) { [self.delegate displayAgentWillLeaveApplication]; } [self completeDestinationLoading]; - } + }]; } - (BOOL)openShareURL:(NSURL *)URL @@ -268,28 +261,11 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; case MPMoPubShareHostCommandTweet: return [self.activityViewControllerHelper presentActivityViewControllerWithTweetShareURL:URL]; default: - MPLogWarn(@"MPAdDestinationDisplayAgent - unsupported Share URL: %@", [URL absoluteString]); + MPLogInfo(@"MPAdDestinationDisplayAgent - unsupported Share URL: %@", [URL absoluteString]); return NO; } } -- (void)interceptTelephoneURL:(NSURL *)URL -{ - __weak MPAdDestinationDisplayAgent *weakSelf = self; - self.telephoneConfirmationController = [[MPTelephoneConfirmationController alloc] initWithURL:URL clickHandler:^(NSURL *targetTelephoneURL, BOOL confirmed) { - MPAdDestinationDisplayAgent *strongSelf = weakSelf; - if (strongSelf) { - if (confirmed) { - [strongSelf.delegate displayAgentWillLeaveApplication]; - [[UIApplication sharedApplication] openURL:targetTelephoneURL]; - } - [strongSelf completeDestinationLoading]; - } - }]; - - [self.telephoneConfirmationController show]; -} - - (void)failedToResolveURLWithError:(NSError *)error { [self hideOverlay]; @@ -302,20 +278,18 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; [self.delegate displayAgentDidDismissModal]; } -- (void)presentStoreKitControllerWithItemIdentifier:(NSString *)identifier fallbackURL:(NSURL *)URL +- (void)presentStoreKitControllerWithProductParameters:(NSDictionary *)parameters fallbackURL:(NSURL *)URL { - self.storeKitController = [MPStoreKitProvider buildController]; + self.storeKitController = [[SKStoreProductViewController alloc] init]; + self.storeKitController.modalPresentationStyle = UIModalPresentationFullScreen; self.storeKitController.delegate = self; - - NSDictionary *parameters = [NSDictionary dictionaryWithObject:identifier - forKey:SKStoreProductParameterITunesItemIdentifier]; [self.storeKitController loadProductWithParameters:parameters completionBlock:nil]; [self hideOverlay]; [[self.delegate viewControllerForPresentingModalView] presentViewController:self.storeKitController animated:MP_ANIMATED completion:nil]; } -#pragma mark - +#pragma mark - - (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController { @@ -323,23 +297,6 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; [self hideModalAndNotifyDelegate]; } -#pragma mark - - -- (void)dismissBrowserController:(MPAdBrowserController *)browserController animated:(BOOL)animated -{ - self.isLoadingDestination = NO; - [self hideModalAndNotifyDelegate]; -} - -- (MPAdConfiguration *)adConfiguration -{ - if ([self.delegate respondsToSelector:@selector(adConfiguration)]) { - return [self.delegate adConfiguration]; - } - - return nil; -} - #pragma mark - - (void)safariViewControllerDidFinish:(SFSafariViewController *)controller { @@ -363,16 +320,6 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; }]; } -+ (BOOL)shouldUseSafariViewController -{ - MOPUBDisplayAgentType displayAgentType = [MOPUBExperimentProvider displayAgentType]; - if (@available(iOS 9.0, *)) { - return (displayAgentType == MOPUBDisplayAgentTypeSafariViewController); - } - - return NO; -} - - (void)hideOverlay { [self.overlayView hide]; @@ -403,9 +350,12 @@ static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; { 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. - [self showStoreKitProductWithParameter:actionInfo.iTunesItemIdentifier - fallbackURL:actionInfo.iTunesStoreFallbackURL]; +#pragma clang diagnostic pop + [self showStoreKitProductWithParameters:actionInfo.iTunesStoreParameters + fallbackURL:actionInfo.iTunesStoreFallbackURL]; break; case MOPUBDisplayAgentTypeNativeSafari: [self openURLInApplication:actionInfo.iTunesStoreFallbackURL]; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdImpressionTimer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h similarity index 93% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdImpressionTimer.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h index 6fc9d633a0..901ca0f0e7 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdImpressionTimer.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h @@ -1,7 +1,9 @@ // // MPAdImpressionTimer.h // -// Copyright © 2017 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdImpressionTimer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m similarity index 81% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdImpressionTimer.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m index a9ffe04c0a..9af007c27e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdImpressionTimer.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m @@ -1,7 +1,9 @@ // // MPAdImpressionTimer.m // -// Copyright © 2017 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPAdImpressionTimer.h" @@ -29,8 +31,11 @@ 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]; - _viewVisibilityTimer.runLoopMode = NSRunLoopCommonModes; + _viewVisibilityTimer = [MPTimer timerWithTimeInterval:kImpressionTimerInterval + target:self + selector:@selector(tick:) + repeats:YES + runLoopMode:NSRunLoopCommonModes]; _requiredSecondsForImpression = requiredSecondsForImpression; _pixelsRequiredForViewVisibility = visibilityPixels; _firstVisibilityTimestamp = kFirstVisibilityTimestampNone; @@ -45,8 +50,11 @@ static const CGFloat kDefaultPixelCountWhenUsingPercentage = CGFLOAT_MIN; // 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]; - _viewVisibilityTimer.runLoopMode = NSRunLoopCommonModes; + _viewVisibilityTimer = [MPTimer timerWithTimeInterval:kImpressionTimerInterval + target:self + selector:@selector(tick:) + repeats:YES + runLoopMode:NSRunLoopCommonModes]; _requiredSecondsForImpression = requiredSecondsForImpression; _percentageRequiredForViewVisibility = visibilityPercentage; _firstVisibilityTimestamp = kFirstVisibilityTimestampNone; @@ -65,12 +73,12 @@ static const CGFloat kDefaultPixelCountWhenUsingPercentage = CGFLOAT_MIN; - (void)startTrackingView:(UIView *)view { if (!view) { - MPLogError(@"Cannot track empty view"); + MPLogInfo(@"Cannot track empty view"); return; } - if (self.viewVisibilityTimer.isScheduled) { - MPLogWarn(@"viewVisibilityTimer is already started."); + if (self.viewVisibilityTimer.isCountdownActive) { + MPLogInfo(@"viewVisibilityTimer is already started."); return; } @@ -84,7 +92,7 @@ static const CGFloat kDefaultPixelCountWhenUsingPercentage = CGFLOAT_MIN; { CGFloat adViewArea = CGRectGetWidth(self.adView.bounds) * CGRectGetHeight(self.adView.bounds); if (adViewArea == 0) { - MPLogError(@"ad view area cannot be 0"); + MPLogInfo(@"ad view area cannot be 0"); return; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerCommunicator.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h similarity index 64% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerCommunicator.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h index 7ca853a411..52a2151696 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPAdServerCommunicator.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h @@ -1,8 +1,9 @@ // // MPAdServerCommunicator.h -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -24,6 +25,11 @@ - (void)loadURL:(NSURL *)URL; - (void)cancel; +- (void)sendBeforeLoadUrlWithConfiguration:(MPAdConfiguration *)configuration; +- (void)sendAfterLoadUrlWithConfiguration:(MPAdConfiguration *)configuration + adapterLoadDuration:(NSTimeInterval)duration + adapterLoadResult:(MPAfterLoadResult)result; + @end //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -34,4 +40,6 @@ - (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 new file mode 100644 index 0000000000..9f65530334 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m @@ -0,0 +1,358 @@ +// +// MPAdServerCommunicator.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..f90e3cb4a8 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h @@ -0,0 +1,115 @@ +// +// MPAdServerURLBuilder.h +// +// Copyright 2018-2019 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" + +@class CLLocation; + +@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 new file mode 100644 index 0000000000..f96f8c3b1c --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m @@ -0,0 +1,553 @@ +// +// MPAdServerURLBuilder.m +// +// Copyright 2018-2019 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 "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] = [self carrierNameValue]; + queryParams[kISOCountryCodeKey] = [self isoCountryCodeValue]; + queryParams[kMobileNetworkCodeKey] = [self mobileNetworkCodeValue]; + queryParams[kMobileCountryCodeKey] = [self mobileCountryCodeValue]; + 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 locationInformationDictionary:targeting.location]]; + + 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 *)carrierNameValue +{ + NSString *carrierName = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"carrierName"]; + return carrierName; +} + ++ (NSString *)isoCountryCodeValue +{ + NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"isoCountryCode"]; + return code; +} + ++ (NSString *)mobileNetworkCodeValue +{ + NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"mobileNetworkCode"]; + return code; +} + ++ (NSString *)mobileCountryCodeValue +{ + NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"mobileCountryCode"]; + return code; +} + ++ (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:@"%@", @([[MPCoreInstanceProvider sharedProvider] 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 *)locationInformationDictionary:(CLLocation *)location { + // Not allowed to collect location because it is PII + if (![MPConsentManager.sharedManager canCollectPersonalInfo]) { + return @{}; + } + + NSMutableDictionary *locationDict = [NSMutableDictionary dictionary]; + + CLLocation *bestLocation = location; + CLLocation *locationFromProvider = [[[MPCoreInstanceProvider sharedProvider] sharedMPGeolocationProvider] lastKnownLocation]; + + // Location determined by CoreLocation is given priority over the Publisher-specified location. + if (locationFromProvider) { + bestLocation = locationFromProvider; + } + + if (bestLocation && bestLocation.horizontalAccuracy >= 0) { + locationDict[kLocationLatitudeLongitudeKey] = [NSString stringWithFormat:@"%@,%@", + @(bestLocation.coordinate.latitude), + @(bestLocation.coordinate.longitude)]; + if (bestLocation.horizontalAccuracy) { + locationDict[kLocationHorizontalAccuracy] = [NSString stringWithFormat:@"%@", @(bestLocation.horizontalAccuracy)]; + } + + if (bestLocation == locationFromProvider) { + 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/3party/MoPubSDK/Internal/Common/MPClosableView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h similarity index 85% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPClosableView.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h index c506b3cf5f..09d63b7d0b 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPClosableView.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h @@ -1,12 +1,15 @@ // // MPClosableView.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 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, @@ -44,7 +47,9 @@ CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButt @property (nonatomic, readonly) BOOL wasTapped; @property (nonatomic, strong, readonly) UIButton *closeButton; -- (instancetype)initWithFrame:(CGRect)frame closeButtonType:(MPClosableViewCloseButtonType)closeButtonType; +- (instancetype)initWithFrame:(CGRect)frame + contentView:(UIView *)contentView + delegate:(id)delegate; @end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPClosableView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m similarity index 77% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPClosableView.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m index 09a671cad9..e9e53ef034 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPClosableView.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m @@ -1,48 +1,58 @@ // // MPClosableView.m -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPClosableView.h" -#import "MPInstanceProvider.h" +#import "MPGlobal.h" #import "MPUserInteractionGestureRecognizer.h" -static CGFloat kCloseRegionWidth = 50.0f; -static CGFloat kCloseRegionHeight = 50.0f; +/** + 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"; -CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButtonLocation closeButtonLocation) +/** + 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) { - CGFloat width = size.width; - CGFloat height = size.height; - CGRect closeButtonFrame = CGRectMake(0.0f, 0.0f, kCloseRegionWidth, kCloseRegionHeight); + CGRect closeButtonFrame = CGRectMake(0.0f, 0.0f, kCloseRegionSize.width, kCloseRegionSize.height); switch (closeButtonLocation) { case MPClosableViewCloseButtonLocationTopRight: - closeButtonFrame.origin = CGPointMake(width-kCloseRegionWidth, 0.0f); + 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((width-kCloseRegionWidth) / 2.0f, 0.0f); + closeButtonFrame.origin = CGPointMake((adSize.width-kCloseRegionSize.width) / 2.0f, 0.0f); break; case MPClosableViewCloseButtonLocationBottomRight: - closeButtonFrame.origin = CGPointMake(width-kCloseRegionWidth, height-kCloseRegionHeight); + closeButtonFrame.origin = CGPointMake(adSize.width-kCloseRegionSize.width, adSize.height-kCloseRegionSize.height); break; case MPClosableViewCloseButtonLocationBottomLeft: - closeButtonFrame.origin = CGPointMake(0.0f, height-kCloseRegionHeight); + closeButtonFrame.origin = CGPointMake(0.0f, adSize.height-kCloseRegionSize.height); break; case MPClosableViewCloseButtonLocationBottomCenter: - closeButtonFrame.origin = CGPointMake((width-kCloseRegionWidth) / 2.0f, height-kCloseRegionHeight); + closeButtonFrame.origin = CGPointMake((adSize.width-kCloseRegionSize.width) / 2.0f, adSize.height-kCloseRegionSize.height); break; case MPClosableViewCloseButtonLocationCenter: - closeButtonFrame.origin = CGPointMake((width-kCloseRegionWidth) / 2.0f, (height-kCloseRegionHeight) / 2.0f); + closeButtonFrame.origin = CGPointMake((adSize.width-kCloseRegionSize.width) / 2.0f, (adSize.height-kCloseRegionSize.height) / 2.0f); break; - default: - closeButtonFrame.origin = CGPointMake(width-kCloseRegionWidth, 0.0f); + default: // top right + closeButtonFrame.origin = CGPointMake(adSize.width-kCloseRegionSize.width, 0.0f); break; } @@ -60,14 +70,19 @@ CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButt @implementation MPClosableView -- (instancetype)initWithFrame:(CGRect)frame closeButtonType:(MPClosableViewCloseButtonType)closeButtonType -{ +- (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:)]; @@ -83,9 +98,13 @@ CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButt [_closeButton addTarget:self action:@selector(closeButtonPressed) forControlEvents:UIControlEventTouchUpInside]; - [self setCloseButtonType:closeButtonType]; + [self setCloseButtonType:MPClosableViewCloseButtonTypeTappableWithImage]; [self addSubview:_closeButton]; + + // Set up web view + contentView.frame = self.bounds; + [self addSubview:contentView]; } return self; @@ -99,12 +118,13 @@ CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButt - (void)layoutSubviews { + [super layoutSubviews]; if (@available(iOS 11, *)) { self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; NSMutableArray *constraints = [NSMutableArray arrayWithObjects: - [self.closeButton.widthAnchor constraintEqualToConstant:kCloseRegionWidth], - [self.closeButton.heightAnchor constraintEqualToConstant:kCloseRegionHeight], + [self.closeButton.widthAnchor constraintEqualToConstant:kCloseRegionSize.width], + [self.closeButton.heightAnchor constraintEqualToConstant:kCloseRegionSize.height], nil]; switch (self.closeButtonLocation) { @@ -196,7 +216,7 @@ CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButt #pragma mark - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 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 new file mode 100644 index 0000000000..68cd6e8311 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h @@ -0,0 +1,46 @@ +// +// MPCountdownTimerView.h +// +// Copyright 2018-2019 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; + +@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 new file mode 100644 index 0000000000..bf7f43476e --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m @@ -0,0 +1,239 @@ +// +// MPCountdownTimerView.m +// +// Copyright 2018-2019 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; + } + + 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/3party/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h similarity index 75% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h index d8c12311ed..8065ce0a3d 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h @@ -1,8 +1,9 @@ // // MPEnhancedDeeplinkRequest.h -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m similarity index 93% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m index 317eb52dfe..8f69b7d611 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m @@ -1,8 +1,9 @@ // // MPEnhancedDeeplinkRequest.m -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPEnhancedDeeplinkRequest.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPLastResortDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h similarity index 59% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPLastResortDelegate.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h index 852e38f989..5967dd1226 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPLastResortDelegate.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h @@ -1,8 +1,9 @@ // // MPLastResortDelegate.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPLastResortDelegate.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m similarity index 84% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPLastResortDelegate.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m index 3df4d1ef05..c4161c22b9 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPLastResortDelegate.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m @@ -1,8 +1,9 @@ // // MPLastResortDelegate.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPLastResortDelegate.h" 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 new file mode 100644 index 0000000000..f9c624e7d2 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h @@ -0,0 +1,53 @@ +// +// MPProgressOverlayView.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..19bb87318c --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m @@ -0,0 +1,207 @@ +// +// MPProgressOverlayView.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Common/MPRealTimeTimer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h similarity index 90% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPRealTimeTimer.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h index 11a9f31a44..832071fda6 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPRealTimeTimer.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h @@ -1,8 +1,9 @@ // // MPRealTimeTimer.h -// MoPubSampleApp // -// Copyright © 2017 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPRealTimeTimer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m similarity index 88% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPRealTimeTimer.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m index e536d41f47..6731fe4e16 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPRealTimeTimer.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m @@ -1,8 +1,9 @@ // // MPRealTimeTimer.m -// MoPubSampleApp // -// Copyright © 2017 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPRealTimeTimer.h" @@ -67,8 +68,8 @@ self.timer = [MPTimer timerWithTimeInterval:self.currentTimeInterval target:self selector:@selector(fire) - repeats:NO]; - self.timer.runLoopMode = NSRunLoopCommonModes; + repeats:NO + runLoopMode:NSRunLoopCommonModes]; [self.timer scheduleNow]; if (!self.fireDate) { self.fireDate = [NSDate dateWithTimeIntervalSinceNow:self.currentTimeInterval]; @@ -81,6 +82,11 @@ } - (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) { diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLActionInfo.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h similarity index 82% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLActionInfo.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h index a487bc4d21..5df4db18c3 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLActionInfo.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h @@ -1,8 +1,9 @@ // // MPURLActionInfo.h -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -27,7 +28,7 @@ typedef NS_ENUM(NSUInteger, MPURLActionType) { @property (nonatomic, readonly) MPURLActionType actionType; @property (nonatomic, readonly, copy) NSURL *originalURL; -@property (nonatomic, readonly, copy) NSString *iTunesItemIdentifier; +@property (nonatomic, readonly, strong) NSDictionary *iTunesStoreParameters; @property (nonatomic, readonly, copy) NSURL *iTunesStoreFallbackURL; @property (nonatomic, readonly, copy) NSURL *safariDestinationURL; @property (nonatomic, readonly, copy) NSString *HTTPResponseString; @@ -36,7 +37,7 @@ typedef NS_ENUM(NSUInteger, MPURLActionType) { @property (nonatomic, readonly, strong) MPEnhancedDeeplinkRequest *enhancedDeeplinkRequest; @property (nonatomic, readonly, copy) NSURL *shareURL; -+ (instancetype)infoWithURL:(NSURL *)URL iTunesItemIdentifier:(NSString *)identifier iTunesStoreFallbackURL:(NSURL *)URL; ++ (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; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLActionInfo.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m similarity index 87% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLActionInfo.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m index 228eb488d9..6dea319a43 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLActionInfo.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m @@ -1,8 +1,9 @@ // // MPURLActionInfo.m -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPURLActionInfo.h" @@ -11,7 +12,7 @@ @property (nonatomic, readwrite) MPURLActionType actionType; @property (nonatomic, readwrite, copy) NSURL *originalURL; -@property (nonatomic, readwrite, copy) NSString *iTunesItemIdentifier; +@property (nonatomic, readwrite, strong) NSDictionary *iTunesStoreParameters; @property (nonatomic, readwrite, copy) NSURL *iTunesStoreFallbackURL; @property (nonatomic, readwrite, copy) NSURL *safariDestinationURL; @property (nonatomic, readwrite, copy) NSString *HTTPResponseString; @@ -26,12 +27,12 @@ @implementation MPURLActionInfo -+ (instancetype)infoWithURL:(NSURL *)URL iTunesItemIdentifier:(NSString *)identifier iTunesStoreFallbackURL:(NSURL *)fallbackURL ++ (instancetype)infoWithURL:(NSURL *)URL iTunesStoreParameters:(NSDictionary *)parameters iTunesStoreFallbackURL:(NSURL *)fallbackURL { MPURLActionInfo *info = [[[self class] alloc] init]; info.actionType = MPURLActionTypeStoreKit; info.originalURL = URL; - info.iTunesItemIdentifier = identifier; + info.iTunesStoreParameters = parameters; info.iTunesStoreFallbackURL = fallbackURL; return info; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLResolver.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h similarity index 72% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLResolver.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h index 8e2dc99261..a6f921e33c 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLResolver.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h @@ -1,8 +1,9 @@ // // MPURLResolver.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLResolver.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m similarity index 62% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLResolver.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m index f80c3a8470..1341cf96e2 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPURLResolver.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m @@ -1,16 +1,17 @@ // // MPURLResolver.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 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 "MPInstanceProvider.h" #import "MPLogging.h" #import "MPCoreInstanceProvider.h" #import "MOPUBExperimentProvider.h" @@ -32,7 +33,6 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; @property (nonatomic, copy) MPURLResolverCompletionBlock completion; - (MPURLActionInfo *)actionInfoFromURL:(NSURL *)URL error:(NSError **)error; -- (NSString *)storeItemIdentifierForURL:(NSURL *)URL; - (BOOL)URLShouldOpenInApplication:(NSURL *)URL; - (BOOL)URLIsHTTPOrHTTPS:(NSURL *)URL; - (BOOL)URLPointsToAMap:(NSURL *)URL; @@ -67,7 +67,7 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; if (info) { [self safeInvokeAndNilCompletionBlock:info error:nil]; - } else if ([self shouldEnableClickthroughExperiment]) { + } else if ([self shouldOpenWithInAppWebBrowser]) { info = [MPURLActionInfo infoWithURL:self.originalURL webViewBaseURL:self.currentURL]; [self safeInvokeAndNilCompletionBlock:info error:nil]; } else if (error) { @@ -154,8 +154,9 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; return nil; } - if ([self storeItemIdentifierForURL:URL]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL iTunesItemIdentifier:[self storeItemIdentifierForURL:URL] iTunesStoreFallbackURL:URL]; + 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) { @@ -212,28 +213,113 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; 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 -- (NSString *)storeItemIdentifierForURL:(NSURL *)URL +/** + 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 { - NSString *itemIdentifier = nil; - if ([URL.host hasSuffix:@"itunes.apple.com"]) { - NSString *lastPathComponent = [[URL path] lastPathComponent]; + // 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"]) { - itemIdentifier = [lastPathComponent substringFromIndex:2]; - } else { - itemIdentifier = [URL.mp_queryAsDictionary objectForKey:@"id"]; + parsedIdentifier = [lastPathComponent substringFromIndex:2]; } - } else if ([URL.host hasSuffix:@"phobos.apple.com"]) { - itemIdentifier = [URL.mp_queryAsDictionary objectForKey:@"id"]; + // 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; } - NSCharacterSet *nonIntegers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; - if (itemIdentifier && itemIdentifier.length > 0 && [itemIdentifier rangeOfCharacterFromSet:nonIntegers].location == NSNotFound) { - return itemIdentifier; + // 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 nil; + return parameters; } #pragma mark - Identifying URLs to open in Safari @@ -257,7 +343,7 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; NSStringEncoding encoding = NSUTF8StringEncoding; if (![contentType length]) { - MPLogWarn(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); + MPLogInfo(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); return encoding; } @@ -281,19 +367,19 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; return encoding; } -#pragma mark - Check if it's necessary to include a URL in the clickthrough experiment. +#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 included in the clickthrough experiment, redirect URL scheme needs to be http/https. - -- (BOOL)shouldEnableClickthroughExperiment +// 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 include it in the clickthrough experiment. - if (![self URLIsHTTPOrHTTPS:self.currentURL]) { + // 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; } @@ -301,18 +387,21 @@ static NSString * const kRedirectURLQueryStringKey = @"r"; 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]; - if (!redirectURLStr || ![self URLIsHTTPOrHTTPS:[NSURL URLWithString:redirectURLStr]]) { + 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; } } - // Check experiment variant is in test group. - if ([MPAdDestinationDisplayAgent shouldUseSafariViewController] || - [MOPUBExperimentProvider displayAgentType] == MOPUBDisplayAgentTypeNativeSafari) { - return YES; - } - 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 new file mode 100644 index 0000000000..df7d4c1552 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h @@ -0,0 +1,29 @@ +// +// MPVideoConfig.h +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ +// + +#import +#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; + +- (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 diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPVideoConfig.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m similarity index 51% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPVideoConfig.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m index f5c2c4b9ae..ee893e0d57 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPVideoConfig.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m @@ -1,76 +1,51 @@ // // MPVideoConfig.m -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 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 "MPVASTTracking.h" +/** + This is a private data object that represents an ad candidate for display. + */ @interface MPVideoPlaybackCandidate : NSObject -@property (nonatomic, readwrite) MPVASTLinearAd *linearAd; -@property (nonatomic, readwrite) NSArray *errorURLs; -@property (nonatomic, readwrite) NSArray *impressionURLs; -@property (nonatomic, readwrite) NSTimeInterval minimumViewabilityTimeInterval; -@property (nonatomic, readwrite) double minimumFractionOfVideoVisible; -@property (nonatomic, readwrite) NSURL *viewabilityTrackingURL; +@property (nonatomic, strong) MPVASTLinearAd *linearAd; +@property (nonatomic, strong) NSArray *errorURLs; +@property (nonatomic, strong) NSArray *impressionURLs; @end +@implementation MPVideoPlaybackCandidate +@end // this data object should have empty implementation + //////////////////////////////////////////////////////////////////////////////////////////////////// -@implementation MPVideoPlaybackCandidate +@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, readwrite) NSURL *mediaURL; -@property (nonatomic, readwrite) NSURL *clickThroughURL; -@property (nonatomic, readwrite) NSArray *clickTrackingURLs; -@property (nonatomic, readwrite) NSArray *errorURLs; -@property (nonatomic, readwrite) NSArray *impressionURLs; -@property (nonatomic, readwrite) NSArray *startTrackers; -@property (nonatomic, readwrite) NSArray *firstQuartileTrackers; -@property (nonatomic, readwrite) NSArray *midpointTrackers; -@property (nonatomic, readwrite) NSArray *thirdQuartileTrackers; -@property (nonatomic, readwrite) NSArray *completionTrackers; -@property (nonatomic, readwrite) NSArray *muteTrackers; -@property (nonatomic, readwrite) NSArray *unmuteTrackers; -@property (nonatomic, readwrite) NSArray *pauseTrackers; -@property (nonatomic, readwrite) NSArray *rewindTrackers; -@property (nonatomic, readwrite) NSArray *resumeTrackers; -@property (nonatomic, readwrite) NSArray *fullscreenTrackers; -@property (nonatomic, readwrite) NSArray *exitFullscreenTrackers; -@property (nonatomic, readwrite) NSArray *expandTrackers; -@property (nonatomic, readwrite) NSArray *collapseTrackers; -@property (nonatomic, readwrite) NSArray *acceptInvitationLinearTrackers; -@property (nonatomic, readwrite) NSArray *closeLinearTrackers; -@property (nonatomic, readwrite) NSArray *skipTrackers; -@property (nonatomic, readwrite) NSArray *otherProgressTrackers; - +@property (nonatomic, strong) NSDictionary *> *trackingEventTable; @end -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPVASTLinearAd (MPVideoConfig) - -@property (nonatomic, readwrite) NSArray *clickTrackingURLs; -@property (nonatomic, readwrite) NSArray *customClickURLs; -@property (nonatomic, readwrite) NSArray *industryIcons; -@property (nonatomic, readwrite) NSDictionary *trackingEvents; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - @implementation MPVideoConfig +#pragma mark - Public + - (instancetype)initWithVASTResponse:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers { self = [super init]; @@ -80,52 +55,65 @@ 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]; + NSArray *candidates = [self playbackCandidatesFromVASTResponse:response]; if (candidates.count == 0) { return; } MPVideoPlaybackCandidate *candidate = candidates[0]; - MPVASTMediaFile *mediaFile = candidate.linearAd.highestBitrateMediaFile; - _mediaURL = mediaFile.URL; + _mediaFiles = candidate.linearAd.mediaFiles; _clickThroughURL = candidate.linearAd.clickThroughURL; - _clickTrackingURLs = candidate.linearAd.clickTrackingURLs; - _errorURLs = candidate.errorURLs; - _impressionURLs = candidate.impressionURLs; - NSDictionary *trackingEvents = candidate.linearAd.trackingEvents; - _creativeViewTrackers = trackingEvents[MPVASTTrackingEventTypeCreativeView]; - _startTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeStart]; - _firstQuartileTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeFirstQuartile]; - _midpointTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeMidpoint]; - _thirdQuartileTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeThirdQuartile]; - _completionTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeComplete]; - _muteTrackers = trackingEvents[MPVASTTrackingEventTypeMute]; - _unmuteTrackers = trackingEvents[MPVASTTrackingEventTypeUnmute]; - _pauseTrackers = trackingEvents[MPVASTTrackingEventTypePause]; - _rewindTrackers = trackingEvents[MPVASTTrackingEventTypeRewind]; - _resumeTrackers = trackingEvents[MPVASTTrackingEventTypeResume]; - _fullscreenTrackers = trackingEvents[MPVASTTrackingEventTypeFullscreen]; - _exitFullscreenTrackers = trackingEvents[MPVASTTrackingEventTypeExitFullscreen]; - _expandTrackers = trackingEvents[MPVASTTrackingEventTypeExpand]; - _collapseTrackers = trackingEvents[MPVASTTrackingEventTypeCollapse]; - _acceptInvitationLinearTrackers = trackingEvents[MPVASTTrackingEventTypeAcceptInvitationLinear]; - _closeLinearTrackers = trackingEvents[MPVASTTrackingEventTypeCloseLinear]; - _skipTrackers = trackingEvents[MPVASTTrackingEventTypeSkip]; - _otherProgressTrackers = trackingEvents[MPVASTTrackingEventTypeProgress]; + // 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]; + } - _minimumViewabilityTimeInterval = candidate.minimumViewabilityTimeInterval; - _minimumFractionOfVideoVisible = candidate.minimumFractionOfVideoVisible; - _viewabilityTrackingURL = candidate.viewabilityTrackingURL; + 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 +- (NSArray *)playbackCandidatesFromVASTResponse:(MPVASTResponse *)response { - NSMutableArray *candidates = [NSMutableArray array]; + NSMutableArray *candidates = [NSMutableArray array]; for (MPVASTAd *ad in response.ads) { if (ad.inlineAd) { @@ -137,26 +125,11 @@ candidate.linearAd = creative.linearAd; candidate.errorURLs = inlineAd.errorURLs; candidate.impressionURLs = inlineAd.impressionURLs; - - NSDictionary *viewabilityExt = [self extensionFromInlineAd:inlineAd forKey:@"MoPubViewabilityTracker"]; - if (viewabilityExt) { - NSURL *viewabilityTrackingURL = [NSURL URLWithString:viewabilityExt[@"text"]]; - BOOL valid = [MPVASTStringUtilities stringRepresentsNonNegativeDuration:viewabilityExt[@"viewablePlaytime"]]&& - [MPVASTStringUtilities stringRepresentsNonNegativePercentage:viewabilityExt[@"percentViewable"]] && - viewabilityTrackingURL; - - if (valid) { - candidate.minimumViewabilityTimeInterval = [MPVASTStringUtilities timeIntervalFromString:viewabilityExt[@"viewablePlaytime"]]; - candidate.minimumFractionOfVideoVisible = [MPVASTStringUtilities percentageFromString:viewabilityExt[@"percentViewable"]] / 100.0; - candidate.viewabilityTrackingURL = viewabilityTrackingURL; - } - } - [candidates addObject:candidate]; } } } else if (ad.wrapper) { - NSArray *candidatesFromWrapper = [self playbackCandidatesFromVASTResponse:ad.wrapper.wrappedVASTResponse]; + NSArray *candidatesFromWrapper = [self playbackCandidatesFromVASTResponse:ad.wrapper.wrappedVASTResponse]; // Merge any wrapper-level tracking URLs into each of the candidates. for (MPVideoPlaybackCandidate *candidate in candidatesFromWrapper) { @@ -262,18 +235,18 @@ } } -- (NSArray *)trackersByMergingOriginalTrackers:(NSDictionary *)originalTrackers additionalTrackers:(NSDictionary *)additionalTrackers name:(NSString *)trackerName -{ - if (![originalTrackers[trackerName] isKindOfClass:[NSArray class]]) { - return additionalTrackers[trackerName]; +- (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 (![additionalTrackers[trackerName] isKindOfClass:[NSArray class]]) { - return originalTrackers[trackerName]; + if ([additional isKindOfClass:[NSArray class]] == false) { + return original; } - NSMutableArray *mergedTrackers = [NSMutableArray new]; - [mergedTrackers addObjectsFromArray:originalTrackers[trackerName]]; - [mergedTrackers addObjectsFromArray:additionalTrackers[trackerName]]; - return mergedTrackers; + return [original arrayByAddingObjectsFromArray:additional]; } - (NSDictionary *)dictionaryByMergingTrackingDictionaries:(NSArray *)dictionaries @@ -288,7 +261,7 @@ [mergedDictionary[key] addObjectsFromArray:dictionary[key]]; } else { - MPLogError(@"TrackingEvents dictionary expected an array object for key '%@' " + MPLogInfo(@"TrackingEvents dictionary expected an array object for key '%@' " @"but got an instance of %@ instead.", key, NSStringFromClass([dictionary[key] class])); } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPXMLParser.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h similarity index 55% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPXMLParser.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h index c246979f6b..69f100744e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPXMLParser.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h @@ -1,8 +1,9 @@ // // MPXMLParser.h -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPXMLParser.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m similarity index 95% rename from iphone/Maps/3party/MoPubSDK/Internal/Common/MPXMLParser.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m index c38b620899..44205385d9 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Common/MPXMLParser.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m @@ -1,8 +1,9 @@ // // MPXMLParser.m -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPXMLParser.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h similarity index 90% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h index 2647913790..cb1e9ce950 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h @@ -1,8 +1,9 @@ // // MPAdWebViewAgent.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -30,9 +31,7 @@ typedef NSUInteger MPAdWebViewEvent; - (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate; - (void)loadConfiguration:(MPAdConfiguration *)configuration; -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation; - (void)invokeJavaScriptForEvent:(MPAdWebViewEvent)event; -- (void)forceRedraw; - (void)enableRequestHandling; - (void)disableRequestHandling; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m similarity index 69% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m index 06fd6f358b..a54bd81097 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m @@ -1,24 +1,23 @@ // // MPAdWebViewAgent.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 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 "UIWebView+MPAdditions.h" #import "MPWebView.h" -#import "MPInstanceProvider.h" #import "MPCoreInstanceProvider.h" #import "MPUserInteractionGestureRecognizer.h" #import "NSJSONSerialization+MPAdditions.h" #import "NSURL+MPAdditions.h" -#import "MPInternalUtils.h" #import "MPAPIEndPoints.h" #import "MoPub.h" #import "MPViewabilityTracker.h" @@ -28,8 +27,6 @@ #define NSFoundationVersionNumber_iOS_6_1 993.00 #endif -#define MPOffscreenWebViewNeedsRenderingWorkaround() (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) - @interface MPAdWebViewAgent () @property (nonatomic, strong) MPAdConfiguration *configuration; @@ -40,25 +37,17 @@ @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:(UIWebViewNavigationType)navigationType; +- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(WKNavigationType)navigationType; - (void)interceptURL:(NSURL *)URL; @end @implementation MPAdWebViewAgent -@synthesize configuration = _configuration; -@synthesize delegate = _delegate; -@synthesize destinationDisplayAgent = _destinationDisplayAgent; -@synthesize shouldHandleRequests = _shouldHandleRequests; -@synthesize view = _view; -@synthesize adAlertManager = _adAlertManager; -@synthesize userInteractedWithWebView = _userInteractedWithWebView; -@synthesize userInteractionRecognizer = _userInteractionRecognizer; - -- (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate; +- (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate { self = [super init]; if (self) { @@ -67,6 +56,7 @@ self.destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; self.delegate = delegate; self.shouldHandleRequests = YES; + self.didFireClickImpression = NO; self.adAlertManager = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertManagerWithDelegate:self]; self.userInteractionRecognizer = [[MPUserInteractionGestureRecognizer alloc] initWithTarget:self action:@selector(handleInteraction:)]; @@ -95,7 +85,7 @@ #pragma mark - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } @@ -132,7 +122,7 @@ // 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.adType != MPAdTypeInterstitial) { + if (configuration.isFullscreenAd == false) { if ([configuration hasPreferredSize]) { CGRect frame = self.view.frame; frame.size.width = configuration.preferredSize.width; @@ -141,8 +131,7 @@ } } - [self.view mp_setScrollable:configuration.scrollable]; - [self.view disableJavaScriptDialogs]; + [self.view mp_setScrollable:NO]; // Initialize viewability trackers before loading self.view [self init3rdPartyViewabilityTrackers]; @@ -219,8 +208,9 @@ #pragma mark - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType +- (BOOL)webView:(MPWebView *)webView +shouldStartLoadWithRequest:(NSURLRequest *)request + navigationType:(WKNavigationType)navigationType { if (!self.shouldHandleRequests) { return NO; @@ -248,7 +238,7 @@ - (void)webViewDidStartLoad:(MPWebView *)webView { - [self.view disableJavaScriptDialogs]; + // no op } #pragma mark - MoPub-specific URL handlers @@ -267,19 +257,17 @@ [self.delegate adDidFailToLoadAd:self.view]; break; default: - MPLogWarn(@"MPAdWebView - unsupported MoPub URL: %@", [URL absoluteString]); + MPLogInfo(@"MPAdWebView - unsupported MoPub URL: %@", [URL absoluteString]); break; } } #pragma mark - URL Interception -- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(UIWebViewNavigationType)navigationType +- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(WKNavigationType)navigationType { - if ([URL mp_hasTelephoneScheme] || [URL mp_hasTelephonePromptScheme]) { + if (navigationType == WKNavigationTypeLinkActivated) { return YES; - } else if (navigationType == UIWebViewNavigationTypeLinkClicked) { - return YES; - } else if (navigationType == UIWebViewNavigationTypeOther && self.userInteractedWithWebView) { + } else if (navigationType == WKNavigationTypeOther && self.userInteractedWithWebView) { return YES; } else { return NO; @@ -289,7 +277,9 @@ - (void)interceptURL:(NSURL *)URL { NSURL *redirectedURL = URL; - if (self.configuration.clickTrackingURL) { + 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]]; @@ -319,7 +309,7 @@ - (BOOL)isInterstitialAd { - return (self.configuration.adType == MPAdTypeInterstitial); + return self.configuration.isFullscreenAd; } - (void)initAdAlertManager @@ -331,49 +321,4 @@ [self.adAlertManager beginMonitoringAlerts]; } -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation -{ - [self forceRedraw]; -} - -- (void)forceRedraw -{ - UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; - int angle = -1; - switch (orientation) { - case UIInterfaceOrientationPortrait: angle = 0; break; - case UIInterfaceOrientationLandscapeLeft: angle = 90; break; - case UIInterfaceOrientationLandscapeRight: angle = -90; break; - case UIInterfaceOrientationPortraitUpsideDown: angle = 180; break; - default: break; - } - - if (angle == -1) return; - - // UIWebView doesn't seem to fire the 'orientationchange' event upon rotation, so we do it here. - NSString *orientationEventScript = [NSString stringWithFormat: - @"window.__defineGetter__('orientation',function(){return %d;});" - @"(function(){ var evt = document.createEvent('Events');" - @"evt.initEvent('orientationchange',true,true);window.dispatchEvent(evt);})();", - angle]; - [self.view stringByEvaluatingJavaScriptFromString:orientationEventScript]; - - // XXX: In iOS 7, off-screen UIWebViews will fail to render certain image creatives. - // Specifically, creatives that only contain an tag whose src attribute uses a 302 - // redirect will not be rendered at all. One workaround is to temporarily change the web view's - // internal contentInset property; this seems to force the web view to re-draw. - if (MPOffscreenWebViewNeedsRenderingWorkaround()) { - if ([self.view respondsToSelector:@selector(scrollView)]) { - UIScrollView *scrollView = self.view.scrollView; - UIEdgeInsets originalInsets = scrollView.contentInset; - UIEdgeInsets newInsets = UIEdgeInsetsMake(originalInsets.top + 1, - originalInsets.left, - originalInsets.bottom, - originalInsets.right); - scrollView.contentInset = newInsets; - scrollView.contentInset = originalInsets; - } - } -} - @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 new file mode 100644 index 0000000000..e713461c92 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.h @@ -0,0 +1,20 @@ +// +// MPContentBlocker.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..0741685b49 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.m @@ -0,0 +1,79 @@ +// +// MPContentBlocker.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h similarity index 63% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h index d6784f2b45..5de2985d08 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h @@ -1,8 +1,9 @@ // // MPHTMLBannerCustomEvent.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBannerCustomEvent.h" @@ -11,9 +12,6 @@ @interface MPHTMLBannerCustomEvent : MPBannerCustomEvent -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" @property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop @end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m similarity index 55% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m index f36d667cf9..921db5e38b 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m @@ -1,15 +1,16 @@ // // MPHTMLBannerCustomEvent.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 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 "MPInstanceProvider.h" #import "MPAnalyticsTracker.h" @interface MPHTMLBannerCustomEvent () @@ -20,22 +21,24 @@ @implementation MPHTMLBannerCustomEvent -@synthesize bannerAgent = _bannerAgent; +// 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 NO; } -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info +- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup { - MPLogInfo(@"Loading MoPub HTML banner"); - MPLogTrace(@"Loading banner with HTML source: %@", [[self.delegate configuration] adResponseHTMLString]); + 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 = [[MPInstanceProvider sharedProvider] buildMPAdWebViewAgentWithAdWebViewFrame:adWebViewFrame - delegate:self]; - [self.bannerAgent loadConfiguration:[self.delegate configuration]]; + self.bannerAgent = [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:adWebViewFrame delegate:self]; + [self.bannerAgent loadConfiguration:configuration]; } - (void)dealloc @@ -43,11 +46,6 @@ self.bannerAgent.delegate = nil; } -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.bannerAgent rotateToOrientation:newOrientation]; -} - #pragma mark - MPAdWebViewAgentDelegate - (CLLocation *)location @@ -67,14 +65,17 @@ - (void)adDidFinishLoadingAd:(MPWebView *)ad { - MPLogInfo(@"MoPub HTML banner did load"); + MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); [self.delegate bannerCustomEvent:self didLoadAd:ad]; } - (void)adDidFailToLoadAd:(MPWebView *)ad { - MPLogInfo(@"MoPub HTML banner did fail"); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; + 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 @@ -84,23 +85,20 @@ - (void)adActionWillBegin:(MPWebView *)ad { - MPLogInfo(@"MoPub HTML banner will begin action"); [self.delegate bannerCustomEventWillBeginAction:self]; } - (void)adActionDidFinish:(MPWebView *)ad { - MPLogInfo(@"MoPub HTML banner did finish action"); [self.delegate bannerCustomEventDidFinishAction:self]; } - (void)adActionWillLeaveApplication:(MPWebView *)ad { - MPLogInfo(@"MoPub HTML banner will leave application"); [self.delegate bannerCustomEventWillLeaveApplication:self]; } -- (void)trackMPXAndThirdPartyImpressions +- (void)trackImpressionsIncludedInMarkup { [self.bannerAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidAppear]; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h similarity index 51% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h index 1d767b74d3..dcd36f0cf6 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h @@ -1,19 +1,16 @@ // // MPHTMLInterstitialCustomEvent.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPInterstitialCustomEvent.h" -#import "MPHTMLInterstitialViewController.h" #import "MPPrivateInterstitialCustomEventDelegate.h" -@interface MPHTMLInterstitialCustomEvent : MPInterstitialCustomEvent +@interface MPHTMLInterstitialCustomEvent : MPInterstitialCustomEvent -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" @property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop @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 new file mode 100644 index 0000000000..1c23a9594f --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m @@ -0,0 +1,136 @@ +// +// MPHTMLInterstitialCustomEvent.m +// +// Copyright 2018-2019 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; + +- (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) + +- (CLLocation *)location +{ + return [self.delegate location]; +} + +- (NSString *)adUnitId +{ + return [self.delegate adUnitId]; +} + +- (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/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h similarity index 74% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h index f15ebfe614..554d859b0c 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h @@ -1,8 +1,9 @@ // // MPHTMLInterstitialViewController.h -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m similarity index 77% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m index e6c1b726da..b2fb47e53a 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m @@ -1,14 +1,14 @@ // // MPHTMLInterstitialViewController.m -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 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 "MPInstanceProvider.h" #import "MPViewabilityTracker.h" @interface MPHTMLInterstitialViewController () @@ -21,10 +21,6 @@ @implementation MPHTMLInterstitialViewController -@synthesize delegate = _delegate; -@synthesize backingViewAgent = _backingViewAgent; -@synthesize backingView = _backingView; - - (void)dealloc { self.backingViewAgent.delegate = nil; @@ -37,8 +33,7 @@ [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; - self.backingViewAgent = [[MPInstanceProvider sharedProvider] buildMPAdWebViewAgentWithAdWebViewFrame:self.view.bounds - delegate:self]; + self.backingViewAgent = [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:self.view.bounds delegate:self]; } #pragma mark - Public @@ -77,11 +72,6 @@ [self.backingViewAgent enableRequestHandling]; [self.backingViewAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidAppear]; - // XXX: In certain cases, UIWebView's content appears off-center due to rotation / auto- - // resizing while off-screen. -forceRedraw corrects this issue, but there is always a brief - // instant when the old content is visible. We mask this using a short fade animation. - [self.backingViewAgent forceRedraw]; - [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.3]; self.backingView.alpha = 1.0; @@ -102,15 +92,6 @@ [self.delegate interstitialDidDisappear:self]; } -#pragma mark - Autorotation - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation -{ - [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - - [self.backingViewAgent rotateToOrientation:self.interfaceOrientation]; -} - #pragma mark - MPAdWebViewAgentDelegate - (CLLocation *)location diff --git a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPWebView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h similarity index 57% rename from iphone/Maps/3party/MoPubSDK/Internal/HTML/MPWebView.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h index d6a4c50493..31c01a4d02 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/HTML/MPWebView.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h @@ -1,27 +1,24 @@ // // MPWebView.h -// MoPubSDK // -// Copyright © 2016 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // -/*** - * MPWebView - * This class is a wrapper class for WKWebView and UIWebView. Internally, it utilizes WKWebView when possible, and - * falls back on UIWebView only when WKWebView isn't available (i.e., in iOS 7). MPWebView's interface is meant to - * imitate UIWebView, and, in many cases, MPWebView can act as a drop-in replacement for UIWebView. MPWebView also - * blocks all JavaScript text boxes from appearing. +/** + * @c MPWebView + * This class is a wrapper class for @c WKWebView. @c MPWebView blocks all JavaScript text boxes from appearing. * - * While `stringByEvaluatingJavaScriptFromString:` does exist for UIWebView compatibility reasons, it's highly - * recommended that the caller uses `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 WKWebView and does not wait or return. + * 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 UIWebView -- such as pagination -- as WKWebView also - * does not contain support. - ***/ + * MPWebView currently does not support a few other features of WKWebView, such as pagination -- as WKWebView. + */ #import +#import @class MPWebView; @@ -31,7 +28,7 @@ - (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType; + navigationType:(WKNavigationType)navigationType; - (void)webViewDidStartLoad:(MPWebView *)webView; @@ -46,11 +43,6 @@ typedef void (^MPWebViewJavascriptEvaluationCompletionHandler)(id result, NSErro @interface MPWebView : UIView -// If you -need- UIWebView for some reason, use this method to init and send `YES` to `forceUIWebView` to be sure -// you're using UIWebView regardless of OS. If any other `init` method is used, or if `NO` is used as the forceUIWebView -// parameter, WKWebView will be used when available. -- (instancetype)initWithFrame:(CGRect)frame forceUIWebView:(BOOL)forceUIWebView; - @property (weak, nonatomic) id delegate; // When set to `YES`, `shouldConformToSafeArea` sets constraints on the WKWebView to always stay within the safe area @@ -58,17 +50,10 @@ typedef void (^MPWebViewJavascriptEvaluationCompletionHandler)(id result, NSErro // 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. -// -// This property has no effect on UIWebView-based MPWebViews, as UIWebView only supports springs and struts, however -// this should not be an issue because UIWebView doesn't seem to be glitchy with the safe area. @property (nonatomic, assign) BOOL shouldConformToSafeArea; @property (nonatomic, readonly, getter=isLoading) BOOL loading; -// These methods and properties are non-functional below iOS 9. If you call or try to set them, they'll do nothing. -// For the properties, if you try to access them, you'll get `NO` 100% of the time. They are entirely hidden when -// compiling with iOS 8 SDK or below. -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName @@ -76,10 +61,6 @@ textEncodingName:(NSString *)encodingName @property (nonatomic) BOOL allowsLinkPreview; @property (nonatomic, readonly) BOOL allowsPictureInPictureMediaPlayback; -#endif - -+ (void)forceWKWebView:(BOOL)shouldForce; -+ (BOOL)isForceWKWebView; - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL; @@ -108,8 +89,6 @@ textEncodingName:(NSString *)encodingName @property (nonatomic, readonly) BOOL mediaPlaybackRequiresUserAction; @property (nonatomic, readonly) BOOL mediaPlaybackAllowsAirPlay; -// UIWebView+MPAdditions methods - (void)mp_setScrollable:(BOOL)scrollable; -- (void)disableJavaScriptDialogs; @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 new file mode 100644 index 0000000000..8463b12d23 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m @@ -0,0 +1,445 @@ +// +// MPWebView.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h similarity index 83% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h index 0807ed304c..f483972218 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h @@ -1,15 +1,17 @@ // // MPBaseInterstitialAdapter.h -// MoPub // -// Created by Nafis Jamal on 4/27/11. -// Copyright 2011 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import #import -@class MPAdConfiguration, CLLocation; +@class CLLocation; +@class MPAdConfiguration; +@class MPAdTargeting; @protocol MPInterstitialAdapterDelegate; @@ -27,8 +29,8 @@ */ - (void)unregisterDelegate; -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration; -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration; +- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; +- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; - (void)didStopLoading; @@ -65,5 +67,6 @@ - (void)interstitialDidExpireForAdapter:(MPBaseInterstitialAdapter *)adapter; - (void)interstitialDidReceiveTapEventForAdapter:(MPBaseInterstitialAdapter *)adapter; - (void)interstitialWillLeaveApplicationForAdapter:(MPBaseInterstitialAdapter *)adapter; +- (void)interstitialDidReceiveImpressionEventForAdapter:(MPBaseInterstitialAdapter *)adapter; @end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m similarity index 61% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m index d31c8fc547..f4b2f462b2 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m @@ -1,9 +1,9 @@ // // MPBaseInterstitialAdapter.m -// MoPub // -// Created by Nafis Jamal on 4/27/11. -// Copyright 2011 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBaseInterstitialAdapter.h" @@ -11,6 +11,7 @@ #import "MPGlobal.h" #import "MPAnalyticsTracker.h" #import "MPCoreInstanceProvider.h" +#import "MPError.h" #import "MPTimer.h" #import "MPConstants.h" @@ -25,10 +26,6 @@ @implementation MPBaseInterstitialAdapter -@synthesize delegate = _delegate; -@synthesize configuration = _configuration; -@synthesize timeoutTimer = _timeoutTimer; - - (id)initWithDelegate:(id)delegate { self = [super init]; @@ -51,20 +48,18 @@ self.delegate = nil; } -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration +- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting { // To be implemented by subclasses. [self doesNotRecognizeSelector:_cmd]; } -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration +- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting { self.configuration = configuration; [self startTimeoutTimer]; - - MPBaseInterstitialAdapter *strongSelf = self; - [strongSelf getAdWithConfiguration:configuration]; + [self getAdWithConfiguration:configuration targeting:targeting]; } - (void)startTimeoutTimer @@ -73,11 +68,10 @@ self.configuration.adTimeoutInterval : INTERSTITIAL_TIMEOUT_INTERVAL; if (timeInterval > 0) { - self.timeoutTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - + self.timeoutTimer = [MPTimer timerWithTimeInterval:timeInterval + target:self + selector:@selector(timeout) + repeats:NO]; [self.timeoutTimer scheduleNow]; } } @@ -89,7 +83,9 @@ - (void)timeout { - [self.delegate adapter:self didFailToLoadAdWithError:nil]; + NSError * error = [NSError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Interstitial ad request timed out"]; + [self.delegate adapter:self didFailToLoadAdWithError:error]; + self.delegate = nil; } #pragma mark - Presentation @@ -103,12 +99,13 @@ - (void)trackImpression { - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] trackImpressionForConfiguration:self.configuration]; + [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; + [self.delegate interstitialDidReceiveImpressionEventForAdapter:self]; } - (void)trackClick { - [[[MPCoreInstanceProvider sharedProvider] sharedMPAnalyticsTracker] trackClickForConfiguration:self.configuration]; + [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; } @end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h similarity index 63% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h index b5f920b4c2..eeb65e987d 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h @@ -1,14 +1,15 @@ // // MPInterstitialAdManager.h -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPAdServerCommunicator.h" #import "MPBaseInterstitialAdapter.h" -@class CLLocation; +@class MPAdTargeting; @protocol MPInterstitialAdManagerDelegate; @interface MPInterstitialAdManager : NSObject )delegate; -- (void)loadInterstitialWithAdUnitID:(NSString *)ID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location; +- (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 new file mode 100644 index 0000000000..54de4c4267 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m @@ -0,0 +1,298 @@ +// +// MPInterstitialAdManager.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h similarity index 74% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h index b06fb1c1d4..cc4cd925f4 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h @@ -1,20 +1,23 @@ // // MPInterstitialAdManagerDelegate.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 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 @@ -24,6 +27,7 @@ didFailToLoadInterstitialWithError:(NSError *)error; - (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/3party/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h similarity index 64% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h index 71534c94ae..2949207242 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h @@ -1,8 +1,9 @@ // // MPInterstitialCustomEventAdapter.h -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBaseInterstitialAdapter.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m similarity index 83% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m index a9ed50e28d..b391aa8c95 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m @@ -1,19 +1,22 @@ // // MPInterstitialCustomEventAdapter.m -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPInterstitialCustomEventAdapter.h" -#import "MPConstants.h" #import "MPAdConfiguration.h" +#import "MPAdTargeting.h" +#import "MPConstants.h" +#import "MPCoreInstanceProvider.h" +#import "MPError.h" +#import "MPHTMLInterstitialCustomEvent.h" #import "MPLogging.h" -#import "MPInstanceProvider.h" #import "MPInterstitialCustomEvent.h" #import "MPInterstitialAdController.h" -#import "MPHTMLInterstitialCustomEvent.h" #import "MPMRAIDInterstitialCustomEvent.h" #import "MPRealTimeTimer.h" @@ -28,10 +31,6 @@ @end @implementation MPInterstitialCustomEventAdapter -@synthesize hasTrackedImpression = _hasTrackedImpression; -@synthesize hasTrackedClick = _hasTrackedClick; - -@synthesize interstitialCustomEvent = _interstitialCustomEvent; - (void)dealloc { @@ -47,18 +46,23 @@ [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_interstitialCustomEvent]; } -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration +- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting { MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); self.configuration = configuration; - self.interstitialCustomEvent = [[MPInstanceProvider sharedProvider] buildInterstitialCustomEventFromCustomClass:configuration.customEventClass delegate:self]; - - if (self.interstitialCustomEvent) { - [self.interstitialCustomEvent requestInterstitialWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; - } else { - [self.delegate adapter:self didFailToLoadAdWithError:nil]; + 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 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 new file mode 100644 index 0000000000..ccf03f00e5 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h @@ -0,0 +1,67 @@ +// +// MPInterstitialViewController.h +// +// Copyright 2018-2019 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 + +- (NSString *)adUnitId; +- (void)interstitialDidLoadAd:(id)interstitial; +- (void)interstitialDidFailToLoadAd:(id)interstitial; +- (void)interstitialDidReceiveTapEvent:(id)interstitial; +- (void)interstitialWillLeaveApplication:(id)interstitial; + +@optional +- (CLLocation *)location; +- (void)interstitialRewardedVideoEnded; + +@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m similarity index 81% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m index b88b193088..3b19877a36 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m @@ -1,15 +1,15 @@ // // MPInterstitialViewController.m -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPInterstitialViewController.h" -#import "MPGlobal.h" +#import "MPError.h" #import "MPLogging.h" -#import "UIButton+MPAdditions.h" static const CGFloat kCloseButtonPadding = 5.0; static const CGFloat kCloseButtonEdgeInset = 5.0; @@ -17,13 +17,10 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; @interface MPInterstitialViewController () -@property (nonatomic, assign) BOOL applicationHasStatusBar; - - (void)setCloseButtonImageWithImageNamed:(NSString *)imageName; - (void)setCloseButtonStyle:(MPInterstitialCloseButtonStyle)style; - (void)closeButtonPressed; - (void)dismissInterstitialAnimated:(BOOL)animated; -- (void)setApplicationStatusBarHidden:(BOOL)hidden; @end @@ -31,38 +28,37 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; @implementation MPInterstitialViewController -@synthesize closeButton = _closeButton; -@synthesize closeButtonStyle = _closeButtonStyle; -@synthesize orientationType = _orientationType; -@synthesize applicationHasStatusBar = _applicationHasStatusBar; -@synthesize delegate = _delegate; - - - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; + self.modalPresentationStyle = UIModalPresentationFullScreen; +} + +- (BOOL)prefersHomeIndicatorAutoHidden { + return YES; } #pragma mark - Public -- (void)presentInterstitialFromViewController:(UIViewController *)controller +- (void)presentInterstitialFromViewController:(UIViewController *)controller complete:(void(^)(NSError *))complete { if (self.presentingViewController) { - MPLogWarn(@"Cannot present an interstitial that is already on-screen."); + if (complete != nil) { + complete(NSError.fullscreenAdAlreadyOnScreen); + } return; } [self willPresentInterstitial]; - - self.applicationHasStatusBar = !([UIApplication sharedApplication].isStatusBarHidden); - [self setApplicationStatusBarHidden:YES]; - [self layoutCloseButton]; [controller presentViewController:self animated:MP_ANIMATED completion:^{ [self didPresentInterstitial]; + if (complete != nil) { + complete(nil); + } }]; } @@ -96,7 +92,7 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - (UIButton *)closeButton { if (!_closeButton) { - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _closeButton = [MPExtendedHitBoxButton buttonWithType:UIButtonTypeCustom]; _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin; @@ -122,9 +118,9 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; kCloseButtonPadding, self.closeButton.bounds.size.width, self.closeButton.bounds.size.height); - self.closeButton.mp_TouchAreaInsets = UIEdgeInsetsMake(kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset); + self.closeButton.touchAreaInsets = UIEdgeInsetsMake(kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset); [self setCloseButtonStyle:self.closeButtonStyle]; - if (@available(iOS 11.0, *)) { + if (@available(iOS 11, *)) { self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; [NSLayoutConstraint activateConstraints:@[ [self.closeButton.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:kCloseButtonPadding], @@ -167,8 +163,6 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - (void)dismissInterstitialAnimated:(BOOL)animated { - [self setApplicationStatusBarHidden:!self.applicationHasStatusBar]; - [self willDismissInterstitial]; UIViewController *presentingViewController = self.presentingViewController; @@ -182,32 +176,12 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; } } -#pragma mark - Hidding status bar (pre-iOS 7) - -- (void)setApplicationStatusBarHidden:(BOOL)hidden -{ - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:hidden]; -} - -#pragma mark - Hidding status bar (iOS 7 and above) - - (BOOL)prefersStatusBarHidden { return YES; } -#pragma mark - Autorotation (iOS 6.0 and above) - -- (BOOL)shouldAutorotate -{ - return YES; -} - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 - (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif { NSUInteger applicationSupportedOrientations = [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:MPKeyWindow()]; @@ -229,7 +203,7 @@ static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; // just return the application's supported orientations. if (!interstitialSupportedOrientations) { - MPLogError(@"Your application does not support this interstitial's desired orientation " + MPLogInfo(@"Your application does not support this interstitial's desired orientation " @"(%@).", orientationDescription); return applicationSupportedOrientations; } else { diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h similarity index 62% rename from iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h index cb12c1d270..1e9ceea6d1 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h @@ -1,8 +1,9 @@ // -// MPPrivateInterstitialcustomEventDelegate.h -// MoPub +// MPPrivateInterstitialCustomEventDelegate.h // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h new file mode 100644 index 0000000000..35b0417776 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h @@ -0,0 +1,124 @@ +// +// MPAdServerKeys.h +// +// Copyright 2018-2019 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 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 new file mode 100644 index 0000000000..06d3936b6d --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m @@ -0,0 +1,124 @@ +// +// MPAdServerKeys.m +// +// Copyright 2018-2019 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 kImpressionDataPublisherRevenueKey = @"publisher_revenue"; +NSString * const kImpressionDataPrecisionKey = @"precision"; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentDialogViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h similarity index 85% rename from iphone/Maps/3party/MoPubSDK/Internal/MPConsentDialogViewController.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h index 59836eda99..a70a20ce16 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentDialogViewController.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h @@ -1,8 +1,9 @@ // // MPConsentDialogViewController.h -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -26,6 +27,11 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)consentDialogViewControllerWillDisappear:(MPConsentDialogViewController *)consentDialogViewController; +/** + Informs the delegate that the given consentDialogViewController did complete dismissing. + */ +- (void)consentDialogViewControllerDidDismiss:(MPConsentDialogViewController *)consentDialogViewController; + @end @interface MPConsentDialogViewController : UIViewController diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentDialogViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m similarity index 90% rename from iphone/Maps/3party/MoPubSDK/Internal/MPConsentDialogViewController.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m index 0c48f7628c..2b510e9139 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentDialogViewController.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m @@ -1,14 +1,16 @@ // // MPConsentDialogViewController.m -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 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); @@ -47,6 +49,9 @@ static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; // Initialize web view [self setUpWebView]; + + // Ensure fullscreen presentation + self.modalPresentationStyle = UIModalPresentationFullScreen; } return self; @@ -82,11 +87,17 @@ static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; } - (void)closeConsentDialog { - [self dismissViewControllerAnimated:YES completion:nil]; + [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 forceUIWebView:NO]; + self.webView = [[MPWebView alloc] initWithFrame:CGRectZero]; self.webView.delegate = self; self.webView.scrollView.bounces = NO; self.webView.backgroundColor = [UIColor whiteColor]; @@ -98,7 +109,7 @@ static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; [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.0, *)) { + if (@available(iOS 11, *)) { self.webView.translatesAutoresizingMaskIntoConstraints = NO; [NSLayoutConstraint activateConstraints:@[ [self.webView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], @@ -126,7 +137,7 @@ static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.closeButton]; - if (@available(iOS 11.0, *)) { + if (@available(iOS 11, *)) { self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; [NSLayoutConstraint activateConstraints:@[ [self.closeButton.widthAnchor constraintEqualToConstant:kCloseButtonDimension], @@ -191,13 +202,13 @@ static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; } } -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { +- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(WKNavigationType)navigationType { BOOL requestIsMoPubScheme = [request.URL.scheme isEqualToString:kMoPubScheme]; - BOOL requestIsMoPubHost = [request.URL.host isEqualToString:MOPUB_BASE_HOSTNAME]; + BOOL requestIsMoPubHost = [request.URL.host isEqualToString:MPAPIEndpoints.baseHostname]; // Kick to Safari if the URL is not of MoPub scheme or hostname if (!requestIsMoPubScheme && !requestIsMoPubHost) { - [[UIApplication sharedApplication] openURL:request.URL]; + [MoPub openURL:request.URL]; return NO; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h similarity index 80% rename from iphone/Maps/3party/MoPubSDK/Internal/MPConsentManager.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h index a37480435b..0ad842c046 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentManager.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h @@ -1,8 +1,9 @@ // // MPConsentManager.h -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -13,11 +14,29 @@ @interface MPConsentManager : NSObject /** - Ad unit ID sent to Ad Server as a proxy for the MoPub app ID. + 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. */ @@ -29,6 +48,12 @@ */ @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. */ @@ -66,6 +91,7 @@ - (void)forceStatusShouldForceExplicitNo:(BOOL)shouldForceExplicitNo shouldInvalidateConsent:(BOOL)shouldInvalidateConsent shouldReacquireConsent:(BOOL)shouldReacquireConsent + shouldForceGDPRApplicability:(BOOL)shouldForceGDPRApplies consentChangeReason:(NSString * _Nullable)consentChangeReason shouldBroadcast:(BOOL)shouldBroadcast; @@ -91,7 +117,9 @@ 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 completion:(void (^_Nullable)(void))completion; +- (void)showConsentDialogFromViewController:(UIViewController * _Nonnull)viewController + didShow:(void (^ _Nullable)(void))didShow + didDismiss:(void (^ _Nullable)(void))didDismiss; @end @@ -142,6 +170,13 @@ */ @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. */ diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m similarity index 67% rename from iphone/Maps/3party/MoPubSDK/Internal/MPConsentManager.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m index 69ef8a7e17..856414486e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPConsentManager.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m @@ -1,19 +1,21 @@ // // MPConsentManager.m -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 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 "MPConsentAdServerKeys.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" @@ -23,6 +25,7 @@ #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"; @@ -34,6 +37,7 @@ static NSString * const kIfaForConsentStorageKey = @"com.mopub.m 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"; @@ -64,6 +68,12 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; */ @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 @@ -76,6 +86,11 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; */ @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 @@ -91,6 +106,14 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; */ @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 @@ -166,12 +189,26 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; 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 @@ -190,6 +227,9 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; - (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. self.shouldReacquireConsent = NO; @@ -200,13 +240,10 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // 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 shouldBroadcast:YES]) { + MPLogDebug(@"Consent synchronization triggered by publisher granting consent"); [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } + // Consent synchronization success/fail logging is already handled + // by `synchronizeConsentWithCompletion:`. }]; } } @@ -218,13 +255,10 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // 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 shouldBroadcast:YES]) { + MPLogDebug(@"Consent synchronization triggered by publisher revoking consent"); [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } + // Consent synchronization success/fail logging is already handled + // by `synchronizeConsentWithCompletion:`. }]; } } @@ -238,6 +272,13 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; - (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); } @@ -248,11 +289,21 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; self.consentDialogViewController = nil; NSError *limitAdTrackingError = [NSError errorWithDomain:kConsentErrorDomain code:MPConsentErrorCodeLimitAdTrackingEnabled - userInfo:nil]; + 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); @@ -296,11 +347,38 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; }]; } -- (void)showConsentDialogFromViewController:(UIViewController *)viewController completion:(void (^)(void))completion { +- (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:completion]; + 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]); } } @@ -319,21 +397,39 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // 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) { - if (error) { - MPLogInfo(@"Error when syncing consent dialog response: %@", error); - return; - } - - MPLogInfo(@"Did sync consent dialog response."); + // 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 { @@ -342,13 +438,29 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; [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) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } + // Consent synchronization success/fail logging is already handled + // by `synchronizeConsentWithCompletion:`. }]; } @@ -358,11 +470,15 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; 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), @@ -378,6 +494,14 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; [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 /** @@ -387,6 +511,8 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; @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; @@ -395,7 +521,7 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // is no longer required. This call will complete without error and no // next update timer will be created. if (self.isGDPRApplicable == MPBoolNo) { - MPLogInfo(@"GDPR not applicable, consent synchronization will complete immediately"); + MPLogEvent([MPLogEvent consentSyncCompletedWithMessage:@"GDPR not applicable, consent synchronization will complete immediately"]); completion(nil); return; } @@ -404,14 +530,24 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // 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 GDPR applicability is unknown, we should perform a sync + // 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.isGDPRApplicable != MPBoolUnknown) { - MPLogInfo(@"Currently in a do not track state, consent synchronization will complete immediately"); + 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]; @@ -424,48 +560,64 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; [MPHTTPNetworkSession startTaskWithHttpRequest:syncRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { __typeof__(self) strongSelf = weakSelf; - // 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]; - - // Deserialize the JSON response and attempt to parse it - NSError * deserializationError = nil; - NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&deserializationError]; - if (deserializationError != nil) { - // Schedule the next timer and complete with error. - strongSelf.nextUpdateTimer = [strongSelf newNextUpdateTimer]; - MPLogError(@"%@", deserializationError.localizedDescription); - completion(deserializationError); - return; - } - - // Attempt to parse and update the consent state - NSError * parseError = nil; - if ([strongSelf updateConsentStateWithParameters:json]) { - MPLogTrace(@"Successfully parsed consent synchronization response"); - } - else { - parseError = [NSError errorWithDomain:kConsentErrorDomain code:MPConsentErrorCodeFailedToParseSynchronizationResponse userInfo:@{ NSLocalizedDescriptionKey: @"Failed to parse consent synchronization response; one or more required fields are missing" }]; - MPLogError(@"%@", parseError.localizedDescription); - } - - // Schedule the next timer and complete. - strongSelf.nextUpdateTimer = [strongSelf newNextUpdateTimer]; - completion(parseError); + [strongSelf didFinishSynchronizationWithData:data + synchronizedStatus:synchronizedStatus + completion:completion]; } errorHandler:^(NSError * _Nonnull error) { __typeof__(self) strongSelf = weakSelf; - // Schedule the next timer and complete with error. - strongSelf.nextUpdateTimer = [strongSelf newNextUpdateTimer]; - MPLogError(@"%@", error.localizedDescription); - completion(error); + [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 /** @@ -481,13 +633,10 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; - (void)onNextUpdateFiredWithTimer { // Synchronize with the server because it's time. + MPLogDebug(@"Scheduled consent synchronization timer fired."); [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } + // Consent synchronization success/fail logging is already handled + // by `synchronizeConsentWithCompletion:`. }]; } @@ -556,7 +705,7 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // Nothing needs to be done if we're not changing state. MPConsentStatus oldStatus = self.currentStatus; if (oldStatus == currentStatus) { - MPLogWarn(@"Attempted to set consent status to same value"); + MPLogInfo(@"Attempted to set consent status to same value"); return NO; } @@ -564,10 +713,13 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // and will not transition out of it. BOOL trackingEnabledOnDevice = MPIdentityProvider.advertisingTrackingEnabled; if (oldStatus == MPConsentStatusDoNotTrack && !trackingEnabledOnDevice) { - MPLogWarn(@"Attempted to set consent status while in a do not track state"); + MPLogInfo(@"Attempted to set consent status while in a do not track state"); return NO; } + // Capture old `isConsentNeeded` value + BOOL oldIsConsentNeeded = self.isConsentNeeded; + // Save IFA for this particular case so it can be used to remove personal data later. if (oldStatus != MPConsentStatusConsented && currentStatus == MPConsentStatusConsented) { [self storeIfa]; @@ -589,10 +741,12 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // "do not track" state is maintained by a seperate storage field. [defaults setBool:(currentStatus == MPConsentStatusDoNotTrack) forKey:kIsDoNotTrackStorageKey]; - // If the state has been updated to "consented", copy the current - // privacy policy version, vendor list version, and IAB vendor list - // to the equivalent consented fields. - if (currentStatus == MPConsentStatusConsented) { + // 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 + if (currentStatus == MPConsentStatusPotentialWhitelist || + (currentStatus == MPConsentStatusConsented && oldStatus != MPConsentStatusPotentialWhitelist)) { [defaults setObject:self.iabVendorList forKey:kConsentedIabVendorListStorageKey]; [defaults setObject:self.privacyPolicyVersion forKey:kConsentedPrivacyPolicyVersionStorageKey]; [defaults setObject:self.vendorListVersion forKey:kConsentedVendorListVersionStorageKey]; @@ -606,10 +760,16 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; } if (shouldBroadcast) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:oldStatus canCollectPii:self.canCollectPersonalInfo]; + [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]; + } } - MPLogInfo(@"Consent state changed to %@: %@", [NSString stringFromConsentStatus:currentStatus], reasonForChange); + MPLogDebug(@"Consent state changed to %@: %@", [NSString stringFromConsentStatus:currentStatus], reasonForChange); return YES; } @@ -620,7 +780,7 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; @return @c YES if the parameters were successfully parsed; @c NO otherwise. */ - (BOOL)updateConsentStateWithParameters:(NSDictionary * _Nonnull)newState { - MPLogTrace(@"Attempting to update consent with new state:\n%@", newState); + MPLogDebug(@"Attempting to update consent with new state:\n%@", newState); // Validate required parameters NSString * isWhitelistedValue = newState[kIsWhitelistedKey]; @@ -634,13 +794,14 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; currentIabVendorListHash == nil || vendorListUrl == nil || vendorListVersion == nil || privacyPolicyUrl == nil || privacyPolicyVersion == nil) { - MPLogError(@"Failed to parse new state. Missing required fields."); + 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; @@ -653,8 +814,11 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; [defaults setObject:privacyPolicyVersion forKey:kPrivacyPolicyVersionStorageKey]; // A user is considered GDPR applicable if they first launched the app - // within a GDPR region. - if (self.isGDPRApplicable == MPBoolUnknown) { + // 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]; } @@ -663,10 +827,12 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; 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]; @@ -703,7 +869,13 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; // Broadcast the `kMPConsentChangedNotification` if needed. if ((oldStatus != self.currentStatus) || (oldGDPRApplicableStatus != self.isGDPRApplicable)) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:oldStatus canCollectPii:self.canCollectPersonalInfo]; + [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; @@ -712,6 +884,7 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; - (void)forceStatusShouldForceExplicitNo:(BOOL)shouldForceExplicitNo shouldInvalidateConsent:(BOOL)shouldInvalidateConsent shouldReacquireConsent:(BOOL)shouldReacquireConsent + shouldForceGDPRApplicability:(BOOL)shouldForceGDPRApplies consentChangeReason:(NSString *)consentChangeReason shouldBroadcast:(BOOL)shouldBroadcast { if (shouldForceExplicitNo) { @@ -725,12 +898,104 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; 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 /** @@ -798,7 +1063,8 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; } - (MPBool)isGDPRApplicable { - return (MPBool)[NSUserDefaults.standardUserDefaults integerForKey:kGDPRAppliesStorageKey]; + // Always return @c MPBoolYes if @c forceIsGDPRApplicable has been set to @c YES + return self.forceIsGDPRApplicable ? MPBoolYes : (MPBool)[NSUserDefaults.standardUserDefaults integerForKey:kGDPRAppliesStorageKey]; } - (BOOL)isWhitelisted { @@ -860,7 +1126,11 @@ static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; [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]; } 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 new file mode 100644 index 0000000000..bdfd203ef1 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h @@ -0,0 +1,24 @@ +// +// MPCoreInstanceProvider+MRAID.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..8e6247ed79 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m @@ -0,0 +1,31 @@ +// +// MPCoreInstanceProvider+MRAID.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/MPCoreInstanceProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h similarity index 84% rename from iphone/Maps/3party/MoPubSDK/Internal/MPCoreInstanceProvider.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h index e7e56c195c..18981be1d4 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPCoreInstanceProvider.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h @@ -1,13 +1,15 @@ // // MPCoreInstanceProvider.h -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import #import #import "MPGlobal.h" +#import "MPReachability.h" #import "MPURLResolver.h" @class MPAdConfiguration; @@ -23,7 +25,6 @@ // Utilities @class MPAdAlertManager, MPAdAlertGestureRecognizer; @class MPAnalyticsTracker; -@class MPReachability; @class MPTimer; @class MPGeolocationProvider; @class CLLocationManager; @@ -52,13 +53,11 @@ typedef NS_OPTIONS(NSUInteger, MPATSSetting) { - (CLLocationManager *)buildCLLocationManager; - (id)buildMPAdAlertManagerWithDelegate:(id)delegate; - (MPAdAlertGestureRecognizer *)buildMPAdAlertGestureRecognizerWithTarget:(id)target action:(SEL)action; -- (MPAnalyticsTracker *)sharedMPAnalyticsTracker; -- (MPReachability *)sharedMPReachability; - (MPATSSetting)appTransportSecuritySettings; // This call may return nil and may not update if the user hot-swaps the device's sim card. - (NSDictionary *)sharedCarrierInfo; -- (MPTimer *)buildMPTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)selector repeats:(BOOL)repeats; +- (MPNetworkStatus)currentRadioAccessTechnology; @end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPCoreInstanceProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m similarity index 77% rename from iphone/Maps/3party/MoPubSDK/Internal/MPCoreInstanceProvider.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m index 1dee272ace..b18a7353b9 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPCoreInstanceProvider.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m @@ -1,8 +1,9 @@ // // MPCoreInstanceProvider.m -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPCoreInstanceProvider.h" @@ -10,19 +11,15 @@ #import #import -#import "MPAdServerCommunicator.h" -#import "MPURLResolver.h" #import "MPAdDestinationDisplayAgent.h" -#import "MPReachability.h" -#import "MPTimer.h" +#import "MPAdServerCommunicator.h" #import "MPAnalyticsTracker.h" #import "MPGeolocationProvider.h" +#import "MPTimer.h" +#import "MPURLResolver.h" #define MOPUB_CARRIER_INFO_DEFAULTS_KEY @"com.mopub.carrierinfo" -#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) -#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) - static NSString *const kMoPubAppTransportSecurityDictionaryKey = @"NSAppTransportSecurity"; static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsKey = @"NSAllowsArbitraryLoads"; static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey = @"NSAllowsArbitraryLoadsForMedia"; @@ -47,10 +44,6 @@ typedef enum @implementation MPCoreInstanceProvider -@synthesize singletons = _singletons; -@synthesize carrierInfo = _carrierInfo; -@synthesize twitterDeepLinkStatus = _twitterDeepLinkStatus; - static MPCoreInstanceProvider *sharedProvider = nil; + (instancetype)sharedProvider @@ -171,20 +164,6 @@ static MPCoreInstanceProvider *sharedProvider = nil; return gestureRecognizer; } -- (MPAnalyticsTracker *)sharedMPAnalyticsTracker -{ - return [self singletonForClass:[MPAnalyticsTracker class] provider:^id{ - return [MPAnalyticsTracker tracker]; - }]; -} - -- (MPReachability *)sharedMPReachability -{ - return [self singletonForClass:[MPReachability class] provider:^id{ - return [MPReachability reachabilityForLocalWiFi]; - }]; -} - - (MPATSSetting)appTransportSecuritySettings { // Keep track of ATS settings statically, as they'll never change in the lifecycle of the application. @@ -198,14 +177,6 @@ static MPCoreInstanceProvider *sharedProvider = nil; } // Otherwise, figure out ATS settings - - // App Transport Security was introduced in iOS 9; if the system version is less than 9, then arbirtrary loads are fine. - if (SYSTEM_VERSION_LESS_THAN(@"9.0")) { - gSetting = MPATSSettingAllowsArbitraryLoads; - gCheckedAppTransportSettings = YES; - return gSetting; - } - // Start with the assumption that ATS is enabled gSetting = MPATSSettingEnabled; @@ -219,7 +190,7 @@ static MPCoreInstanceProvider *sharedProvider = nil; // 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 (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { + 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 @@ -253,9 +224,33 @@ static MPCoreInstanceProvider *sharedProvider = nil; return self.carrierInfo; } -- (MPTimer *)buildMPTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)selector repeats:(BOOL)repeats -{ - return [MPTimer timerWithTimeInterval:seconds target:target selector:selector repeats:repeats]; +static CTTelephonyNetworkInfo * gTelephonyNetworkInfo; +- (MPNetworkStatus)currentRadioAccessTechnology { + if (!gTelephonyNetworkInfo) { + 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; } @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 new file mode 100644 index 0000000000..99f3179e39 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.h @@ -0,0 +1,24 @@ +// +// MPExtendedHitBoxButton.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..5f5967aa44 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.m @@ -0,0 +1,28 @@ +// +// MPExtendedHitBoxButton.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/MPHTTPNetworkSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h similarity index 95% rename from iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkSession.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h index f70c1fd8cb..470c307173 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkSession.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h @@ -1,7 +1,9 @@ // // MPHTTPNetworkSession.h // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkSession.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m old mode 100755 new mode 100644 similarity index 89% rename from iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkSession.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m index 447cb68ba6..7e8c145270 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkSession.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m @@ -1,13 +1,16 @@ // // MPHTTPNetworkSession.m // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 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 @@ -209,7 +212,7 @@ didCompleteWithError:(nullable NSError *)error { // Validate that response is not an error. if (error != nil) { - MPLogError(@"Network request failed with: %@", error.localizedDescription); + MPLogEvent([MPLogEvent error:error message:nil]); safe_block(taskData.errorHandler, error); return; } @@ -217,16 +220,25 @@ didCompleteWithError:(nullable NSError *)error { // Validate response is a HTTP response. NSHTTPURLResponse * httpResponse = [task.response isKindOfClass:[NSHTTPURLResponse class]] ? (NSHTTPURLResponse *)task.response : nil; if (httpResponse == nil) { - NSError * notHttpResponseError = [NSError errorWithDomain:kMoPubSDKNetworkDomain code:MOPUBErrorUnexpectedNetworkResponse userInfo:@{ NSLocalizedDescriptionKey: @"response is not of type NSHTTPURLResponse" }]; - MPLogError(@"Network request failed with: %@", notHttpResponseError.localizedDescription); + 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 errorWithDomain:kMoPubSDKNetworkDomain code:MOPUBErrorNoNetworkData userInfo:@{ NSLocalizedDescriptionKey: @"no data found in the NSHTTPURLResponse" }]; - MPLogError(@"Network request failed with: %@", noDataError.localizedDescription); + NSError * noDataError = [NSError networkResponseContainedNoData]; + MPLogEvent([MPLogEvent error:noDataError message:nil]); safe_block(taskData.errorHandler, noDataError); return; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkTaskData.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h similarity index 91% rename from iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkTaskData.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h index a30deefe6e..eaf785ea62 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkTaskData.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h @@ -1,8 +1,9 @@ // // MPHTTPNetworkTaskData.h -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkTaskData.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m similarity index 86% rename from iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkTaskData.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m index ae898f29d8..2b3d8d8083 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPHTTPNetworkTaskData.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m @@ -1,8 +1,9 @@ // // MPHTTPNetworkTaskData.m -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPHTTPNetworkTaskData.h" diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h new file mode 100644 index 0000000000..882e015eff --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h @@ -0,0 +1,80 @@ +// +// MPMediationManager.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..c581f6e57b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m @@ -0,0 +1,301 @@ +// +// MPMediationManager.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..429a82b5c9 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h @@ -0,0 +1,48 @@ +// +// MPMemoryCache.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..cadf51dacc --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m @@ -0,0 +1,91 @@ +// +// MPMemoryCache.m +// +// Copyright 2018-2019 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/MPRateLimitConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.h new file mode 100644 index 0000000000..5ce0bd30a5 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.h @@ -0,0 +1,40 @@ +// +// MPRateLimitConfiguration.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..4265725a30 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.m @@ -0,0 +1,53 @@ +// +// MPRateLimitConfiguration.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..61644aec89 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.h @@ -0,0 +1,50 @@ +// +// MPRateLimitManager.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..3b58aae0da --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.m @@ -0,0 +1,73 @@ +// +// MPRateLimitManager.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..e6c26fd07b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h @@ -0,0 +1,38 @@ +// +// MPReachabilityManager.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..e49285647d --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m @@ -0,0 +1,56 @@ +// +// MPReachabilityManager.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..66e2bd79cd --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h @@ -0,0 +1,81 @@ +// +// MPURL.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..4e6387c6d0 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m @@ -0,0 +1,52 @@ +// +// MPURL.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/MPURLRequest.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h similarity index 83% rename from iphone/Maps/3party/MoPubSDK/Internal/MPURLRequest.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h index ef933e3839..76549071b5 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MPURLRequest.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h @@ -1,8 +1,9 @@ // // MPURLRequest.h -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m new file mode 100644 index 0000000000..1e1e1c79ff --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m @@ -0,0 +1,104 @@ +// +// MPURLRequest.m +// +// Copyright 2018-2019 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/MPVASTTracking.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h new file mode 100644 index 0000000000..d72b8eaf1b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h @@ -0,0 +1,40 @@ +// +// MPVASTTracking.h +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ +// + +#import +#import "MPVASTError.h" +#import "MPVideoConfig.h" + +@interface MPVASTTracking : NSObject + +- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig videoURL:(NSURL *)videoURL; + +/** + 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:(NSString *)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; + +/** + Call this when a VAST related error happens. + */ +- (void)handleVASTError:(MPVASTError)error videoTimeOffset:(NSTimeInterval)videoTimeOffset; + +@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 new file mode 100644 index 0000000000..64804b2a8d --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m @@ -0,0 +1,168 @@ +// +// MPVASTTracking.m +// +// Copyright 2018-2019 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" + +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; + +/** + 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 *> *firedTable; + +@end + +@implementation MPVASTTracking + +- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig videoURL:(NSURL *)videoURL { + self = [super init]; + if (self) { + _videoConfig = videoConfig; + _videoURL = videoURL; + _analyticsTracker = [MPAnalyticsTracker sharedTracker]; + _firedTable = [NSMutableDictionary new]; + + dispatch_once(&dispatchOnceToken, ^{ + oneOffEventTypes = [NSSet setWithObjects: + MPVideoEventClick, + MPVideoEventCloseLinear, + MPVideoEventComplete, + MPVideoEventCreativeView, + MPVideoEventFirstQuartile, + MPVideoEventImpression, + MPVideoEventMidpoint, + MPVideoEventProgress, + MPVideoEventSkip, + MPVideoEventStart, + MPVideoEventThirdQuartile, + nil]; + }); + } + return self; +} + +- (void)handleVideoEvent:(MPVideoEvent)videoEvent videoTimeOffset:(NSTimeInterval)videoTimeOffset { + if ([oneOffEventTypes containsObject:videoEvent] + && self.firedTable[videoEvent] != nil) { + return; // do not fire more than once + } + + if (videoEvent == 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 videoTimeOffset:videoTimeOffset]; + } + self.firedTable[videoEvent] = firedEvents; +} + +- (void)handleVideoProgressEvent:(NSTimeInterval)videoTimeOffset videoDuration:(NSTimeInterval)videoDuration { + if (videoTimeOffset < 0 || videoDuration <= 0) { + return; + } + + if (self.firedTable[MPVideoEventStart] == nil) { + [self handleVideoEvent:MPVideoEventStart videoTimeOffset:videoTimeOffset]; + } + if ((0.25 * videoDuration) <= videoTimeOffset + && self.firedTable[MPVideoEventFirstQuartile] == nil) { + [self handleVideoEvent:MPVideoEventFirstQuartile videoTimeOffset:videoTimeOffset]; + } + if ((0.50 * videoDuration) <= videoTimeOffset + && self.firedTable[MPVideoEventMidpoint] == nil) { + [self handleVideoEvent:MPVideoEventMidpoint videoTimeOffset:videoTimeOffset]; + } + if ((0.75 * videoDuration) <= videoTimeOffset + && self.firedTable[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.firedTable[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 videoTimeOffset:videoTimeOffset]; + } + self.firedTable[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 videoTimeOffset:videoTimeOffset]; +} + +#pragma mark - Private + +- (void)processAndSendURLs:(NSSet *)urls + videoTimeOffset:(NSTimeInterval)videoTimeOffset { + if ([urls count] == 0) { + return; + } + + NSMutableArray *processedURLs = [NSMutableArray new]; + for (NSURL *url in urls) { + [processedURLs addObject:[MPVASTMacroProcessor + macroExpandedURLForURL:url + errorCode:nil + videoTimeOffset:videoTimeOffset + videoAssetURL:self.videoURL]]; + } + [self.analyticsTracker sendTrackingRequestForURLs:processedURLs]; +} + +@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 new file mode 100644 index 0000000000..feebaedcf1 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.h @@ -0,0 +1,23 @@ +// +// MPWebBrowserUserAgentInfo.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..fc0af0a2f0 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.m @@ -0,0 +1,74 @@ +// +// MPWebBrowserUserAgentInfo.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h similarity index 71% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h index 7f56818a04..16580a3a21 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h @@ -1,8 +1,9 @@ // // MPForceableOrientationProtocol.h -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h similarity index 59% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h index 94a031ba0f..735724496d 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h @@ -1,8 +1,9 @@ // // MPMRAIDBannerCustomEvent.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPBannerCustomEvent.h" @@ -10,9 +11,6 @@ @interface MPMRAIDBannerCustomEvent : MPBannerCustomEvent -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" @property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop @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 new file mode 100644 index 0000000000..fb31adb54b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m @@ -0,0 +1,124 @@ +// +// MPMRAIDBannerCustomEvent.m +// +// Copyright 2018-2019 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 + +- (CLLocation *)location +{ + return [self.delegate location]; +} + +- (NSString *)adUnitId +{ + return [self.delegate adUnitId]; +} + +- (MPAdConfiguration *)adConfiguration +{ + return [self.delegate configuration]; +} + +- (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.adConfiguration.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)closeButtonPressed +{ + //don't care +} + +- (void)appShouldSuspendForAd:(UIView *)adView +{ + [self.delegate bannerCustomEventWillBeginAction:self]; +} + +- (void)appShouldResumeFromAd:(UIView *)adView +{ + [self.delegate bannerCustomEventDidFinishAction:self]; +} + +- (void)trackImpressionsIncludedInMarkup +{ + [self.mraidController.mraidWebView stringByEvaluatingJavaScriptFromString:@"webviewDidAppear();"]; +} + +- (void)startViewabilityTracker +{ + [self.mraidController.viewabilityTracker startTracking]; +} + +- (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/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h similarity index 51% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h index 2c27929b96..eadbb4d9f5 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h @@ -1,19 +1,16 @@ // // MPMRAIDInterstitialCustomEvent.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPInterstitialCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" #import "MPPrivateInterstitialCustomEventDelegate.h" -@interface MPMRAIDInterstitialCustomEvent : MPInterstitialCustomEvent +@interface MPMRAIDInterstitialCustomEvent : MPInterstitialCustomEvent -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" @property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop @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 new file mode 100644 index 0000000000..e9031f4adc --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m @@ -0,0 +1,122 @@ +// +// MPMRAIDInterstitialCustomEvent.m +// +// Copyright 2018-2019 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; + +- (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) + +- (CLLocation *)location +{ + return [self.delegate location]; +} + +- (NSString *)adUnitId +{ + return [self.delegate adUnitId]; +} + +- (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/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h similarity index 79% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h index 3cf03e377a..c995f92aa7 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h @@ -1,8 +1,9 @@ // // MPMRAIDInterstitialViewController.h -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPInterstitialViewController.h" @@ -10,7 +11,6 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// -@protocol MPMRAIDInterstitialViewControllerDelegate; @class MPAdConfiguration; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m similarity index 78% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m index 6aff041ff5..7b12e463c7 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m @@ -1,12 +1,12 @@ // // MPMRAIDInterstitialViewController.m -// MoPub // -// Copyright (c) 2012 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPMRAIDInterstitialViewController.h" -#import "MPInstanceProvider.h" #import "MPAdConfiguration.h" #import "MRController.h" @@ -31,7 +31,10 @@ CGFloat width = MAX(configuration.preferredSize.width, 1); CGFloat height = MAX(configuration.preferredSize.height, 1); CGRect frame = CGRectMake(0, 0, width, height); - self.mraidController = [[MPInstanceProvider sharedProvider] buildInterstitialMRControllerWithFrame:frame delegate:self]; + self.mraidController = [[MRController alloc] initWithAdViewFrame:frame + supportedOrientations:configuration.orientationType + adPlacementType:MRAdViewPlacementTypeInterstitial + delegate:self]; self.configuration = configuration; self.orientationType = [self.configuration orientationType]; @@ -48,7 +51,7 @@ - (void)willPresentInterstitial { - [self.mraidController disableRequestHandling]; + [self.mraidController handleMRAIDInterstitialWillPresentWithViewController:self]; if ([self.delegate respondsToSelector:@selector(interstitialWillAppear:)]) { [self.delegate interstitialWillAppear:self]; } @@ -115,15 +118,13 @@ self.interstitialView.frame = self.view.bounds; self.interstitialView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; [self.view addSubview:self.interstitialView]; - if (@available(iOS 9.0, *)) { - 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], - ]]; - } + 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]; @@ -175,14 +176,9 @@ #pragma mark - Orientation Handling -// supportedInterfaceOrientations and shouldAutorotate are for ios 6, 7, and 8. -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 - (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif { - return ([[UIApplication sharedApplication] mp_supportsOrientationMask:self.supportedOrientationMask]) ? self.supportedOrientationMask : UIInterfaceOrientationMaskAll; + return ([[UIApplication sharedApplication] mp_supportsOrientationMask:self.supportedOrientationMask]) ? self.supportedOrientationMask : [super supportedInterfaceOrientations]; } - (BOOL)shouldAutorotate diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBridge.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h similarity index 93% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBridge.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h index ac0531bc99..aa6d23866e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBridge.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h @@ -1,8 +1,9 @@ // // MRBridge.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -24,7 +25,7 @@ @property (nonatomic, assign) BOOL shouldHandleRequests; @property (nonatomic, weak) id delegate; -- (instancetype)initWithWebView:(MPWebView *)webView; +- (instancetype)initWithWebView:(MPWebView *)webView delegate:(id)delegate; - (void)loadHTMLString:(NSString *)HTML baseURL:(NSURL *)baseURL; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBridge.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m similarity index 80% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBridge.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m index f78c0a3cc7..cd3fc5642e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBridge.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m @@ -1,23 +1,25 @@ // // MRBridge.m -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 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 "MPLogging.h" #import "NSURL+MPAdditions.h" #import "MPGlobal.h" #import "MRBundleManager.h" -#import "MPInstanceProvider.h" -#import "UIWebView+MPAdditions.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 () @@ -28,12 +30,14 @@ static NSString * const kMraidURLScheme = @"mraid"; @implementation MRBridge -- (instancetype)initWithWebView:(MPWebView *)webView +- (instancetype)initWithWebView:(MPWebView *)webView delegate:(id)delegate { if (self = [super init]) { _webView = webView; _webView.delegate = self; - _nativeCommandHandler = [[MPInstanceProvider sharedProvider] buildMRNativeCommandHandlerWithDelegate:self]; + _nativeCommandHandler = [[MRNativeCommandHandler alloc] initWithDelegate:self]; + _shouldHandleRequests = YES; + _delegate = delegate; } return self; @@ -47,24 +51,18 @@ static NSString * const kMraidURLScheme = @"mraid"; - (void)loadHTMLString:(NSString *)HTML baseURL:(NSURL *)baseURL { // Bail out if we can't locate mraid.js. - if (![self MRAIDScriptPath]) { + if (![[MPCoreInstanceProvider sharedProvider] isMraidJavascriptAvailable]) { NSError *error = [NSError errorWithDomain:MoPubMRAIDAdsSDKDomain code:MRErrorMRAIDJSNotFound userInfo:nil]; [self.delegate bridge:self didFailLoadingWebView:self.webView error:error]; return; } if (HTML) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - // Execute the javascript in the web view directly. - NSString *mraidString = [NSString stringWithContentsOfFile:[self MRAIDScriptPath] encoding:NSUTF8StringEncoding error:nil]; - - // Once done loading from the file, execute the javascript and load the html into the web view. - dispatch_async(dispatch_get_main_queue(), ^{ - [self.webView evaluateJavaScript:mraidString completionHandler:^(id result, NSError *error){ - [self.webView disableJavaScriptDialogs]; - [self.webView loadHTMLString:HTML baseURL:baseURL]; - }]; - }); + // 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]; + }]; }); } } @@ -139,7 +137,7 @@ static NSString * const kMraidURLScheme = @"mraid"; #pragma mark - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType +- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(WKNavigationType)navigationType { NSURL *url = [request URL]; NSMutableString *urlString = [NSMutableString stringWithString:[url absoluteString]]; @@ -161,7 +159,7 @@ static NSString * const kMraidURLScheme = @"mraid"; withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [urlString length])]; - MPLogDebug(@"Web console: %@", urlString); + MPLogEvent([MPLogEvent javascriptConsoleLogWithMessage:urlString]); return NO; } @@ -169,21 +167,16 @@ static NSString * const kMraidURLScheme = @"mraid"; return NO; } - if ([url mp_hasTelephoneScheme] || [url mp_hasTelephonePromptScheme]) { - [self.delegate bridge:self handleDisplayForDestinationURL:url]; - return NO; - } - BOOL isLoading = [self.delegate isLoadingAd]; BOOL userInteractedWithWebView = [self.delegate hasUserInteractedWithWebViewForBridge:self]; - BOOL safeToAutoloadLink = navigationType == UIWebViewNavigationTypeLinkClicked || userInteractedWithWebView || [url mp_isSafeForLoadingWithoutUserAction]; + BOOL safeToAutoloadLink = navigationType == WKNavigationTypeLinkActivated || userInteractedWithWebView || [url mp_isSafeForLoadingWithoutUserAction]; - if (!isLoading && (navigationType == UIWebViewNavigationTypeOther || navigationType == UIWebViewNavigationTypeLinkClicked)) { + 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 == UIWebViewNavigationTypeLinkClicked) && ([scheme isEqualToString:@"https"] || [scheme isEqualToString:@"http"]))) { + if (iframe && !((navigationType == WKNavigationTypeLinkActivated) && ([scheme isEqualToString:@"https"] || [scheme isEqualToString:@"http"]))) { return safeToAutoloadLink; } @@ -197,7 +190,7 @@ static NSString * const kMraidURLScheme = @"mraid"; - (void)webViewDidStartLoad:(MPWebView *)webView { - [webView disableJavaScriptDialogs]; + // no op } - (void)webViewDidFinishLoad:(MPWebView *)webView @@ -216,12 +209,6 @@ static NSString * const kMraidURLScheme = @"mraid"; #pragma mark - Private -- (NSString *)MRAIDScriptPath -{ - MRBundleManager *bundleManager = [[MPInstanceProvider sharedProvider] buildMRBundleManager]; - return [bundleManager mraidPath]; -} - - (void)executeJavascript:(NSString *)javascript, ... { va_list args; @@ -256,6 +243,16 @@ static NSString * const kMraidURLScheme = @"mraid"; - (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]; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBundleManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h similarity index 54% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBundleManager.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h index e701d8be5b..670a9e5c04 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBundleManager.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h @@ -1,8 +1,9 @@ // // MRBundleManager.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBundleManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m similarity index 82% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBundleManager.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m index aa3cc249f0..17d1f13278 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRBundleManager.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m @@ -1,8 +1,9 @@ // // MRBundleManager.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MRBundleManager.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRCommand.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h similarity index 95% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRCommand.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h index e4a54f9422..f2de0e6db9 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRCommand.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h @@ -1,8 +1,9 @@ // // MRCommand.h -// MoPub // -// Copyright (c) 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRCommand.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m similarity index 93% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRCommand.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m index f1d0e55a6b..c1ac9900db 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRCommand.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m @@ -1,8 +1,9 @@ // // MRCommand.m -// MoPub // -// Copyright (c) 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MRCommand.h" @@ -12,7 +13,18 @@ @implementation MRCommand -@synthesize delegate = _delegate; ++ (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 { @@ -117,11 +129,6 @@ @implementation MRCloseCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - + (NSString *)commandType { return @"close"; @@ -139,11 +146,6 @@ @implementation MRExpandCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - + (NSString *)commandType { return @"expand"; @@ -168,11 +170,6 @@ @implementation MRResizeCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - + (NSString *)commandType { return @"resize"; @@ -191,11 +188,6 @@ @implementation MRUseCustomCloseCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - // 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 @@ -226,11 +218,6 @@ @implementation MRSetOrientationPropertiesCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - + (NSString *)commandType { return @"setOrientationProperties"; @@ -310,11 +297,6 @@ @implementation MROpenCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - + (NSString *)commandType { return @"open"; @@ -333,11 +315,6 @@ @implementation MRPlayVideoCommand -+ (void)load -{ - [MRCommand registerCommand:self]; -} - + (NSString *)commandType { return @"playVideo"; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRConstants.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h similarity index 78% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRConstants.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h index f994cd3469..36776e5ceb 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRConstants.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h @@ -1,8 +1,9 @@ // // MRConstants.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // enum { diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRConstants.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m similarity index 67% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRConstants.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m index 75fb85a950..6b9de524ef 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRConstants.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m @@ -1,8 +1,9 @@ // // MRConstants.m -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h similarity index 75% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRController.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h index fed79c69e7..5887f8b23e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRController.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h @@ -1,8 +1,9 @@ // // MRController.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -28,9 +29,13 @@ @property (nonatomic, readonly) MPViewabilityTracker *viewabilityTracker; @property (nonatomic, weak) id delegate; -- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame adPlacementType:(MRAdViewPlacementType)placementType; +- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame + supportedOrientations:(MPInterstitialOrientationType)orientationType + adPlacementType:(MRAdViewPlacementType)placementType + delegate:(id)delegate; - (void)loadAdWithConfiguration:(MPAdConfiguration *)configuration; +- (void)handleMRAIDInterstitialWillPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController; - (void)handleMRAIDInterstitialDidPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController; - (void)enableRequestHandling; - (void)disableRequestHandling; @@ -77,4 +82,10 @@ // 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/3party/MoPubSDK/Internal/MRAID/MRController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m similarity index 74% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRController.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m index 6b1177e191..002e26309f 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRController.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m @@ -1,8 +1,9 @@ // // MRController.m -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MRController.h" @@ -16,12 +17,10 @@ #import "MPCoreInstanceProvider.h" #import "MPClosableView.h" #import "MPGlobal.h" -#import "MPInstanceProvider.h" #import "MPLogging.h" #import "MPTimer.h" #import "NSHTTPURLResponse+MPAdditions.h" #import "NSURL+MPAdditions.h" -#import "UIWebView+MPAdditions.h" #import "MPForceableOrientationProtocol.h" #import "MPAPIEndPoints.h" #import "MoPub.h" @@ -51,8 +50,8 @@ static NSString *const kMRAIDCommandResize = @"resize"; @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; -@property (nonatomic, assign) BOOL shouldUseUIWebView; // 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; @@ -61,7 +60,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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 firedReadyEventForDefaultAd; +@property (nonatomic, assign) BOOL didConfigureOrientationNotificationObservers; // Points to mraidAdView (one-part expand) or mraidAdViewTwoPart (two-part expand) while expanded. @property (nonatomic, strong) MPClosableView *expansionContentView; @@ -83,27 +82,41 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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; + @end @implementation MRController -- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame adPlacementType:(MRAdViewPlacementType)placementType +- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame + supportedOrientations:(MPInterstitialOrientationType)orientationType + adPlacementType:(MRAdViewPlacementType)placementType + delegate:(id)delegate { if (self = [super init]) { + _includeSafeAreaInsetsInCalculations = YES; _placementType = placementType; _currentState = MRAdViewStateDefault; - _forceOrientationMask = UIInterfaceOrientationMaskAll; + _forceOrientationMask = MPInterstitialOrientationTypeToUIInterfaceOrientationMask(orientationType); _isAnimatingAdSize = NO; - _firedReadyEventForDefaultAd = NO; + _didConfigureOrientationNotificationObservers = NO; _currentAdSize = CGSizeZero; + _isAppSuspended = NO; _mraidDefaultAdFrame = adViewFrame; - _adPropertyUpdateTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:kAdPropertyUpdateTimerInterval - target:self - selector:@selector(updateMRAIDProperties) - repeats:YES]; - _adPropertyUpdateTimer.runLoopMode = NSRunLoopCommonModes; + _adPropertyUpdateTimer = [MPTimer timerWithTimeInterval:kAdPropertyUpdateTimerInterval + target:self + selector:@selector(updateMRAIDProperties) + repeats:YES + runLoopMode:NSRunLoopCommonModes]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewEnteredBackground) @@ -119,6 +132,13 @@ static NSString *const kMRAIDCommandResize = @"resize"; _adAlertManager = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertManagerWithDelegate:self]; _adAlertManagerTwoPart = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertManagerWithDelegate:self]; + + _delegate = delegate; + + _previousCurrentPosition = CGRectNull; + _previousDefaultPosition = CGRectNull; + _previousScreenSize = CGSizeZero; + _previousMaxSize = CGSizeZero; } return self; @@ -143,16 +163,14 @@ static NSString *const kMRAIDCommandResize = @"resize"; self.isAdLoading = YES; self.adRequiresPrecaching = configuration.precacheRequired; self.isAdVastVideoPlayer = configuration.isVastVideoPlayer; - self.shouldUseUIWebView = self.isAdVastVideoPlayer; - self.mraidWebView = [self buildMRAIDWebViewWithFrame:self.mraidDefaultAdFrame - forceUIWebView:self.shouldUseUIWebView]; + self.mraidWebView = [self buildMRAIDWebViewWithFrame:self.mraidDefaultAdFrame]; self.mraidWebView.shouldConformToSafeArea = [self isInterstitialAd]; - self.mraidBridge = [[MPInstanceProvider sharedProvider] buildMRBridgeWithWebView:self.mraidWebView delegate:self]; - self.mraidAdView = [[MPInstanceProvider sharedProvider] buildMRAIDMPClosableViewWithFrame:self.mraidDefaultAdFrame - webView:self.mraidWebView - delegate:self]; + 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; } @@ -176,11 +194,19 @@ static NSString *const kMRAIDCommandResize = @"resize"; } +- (void)handleMRAIDInterstitialWillPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController +{ + self.interstitialViewController = viewController; + [self updateOrientation]; + [self willBeginAnimatingAdSize]; +} + - (void)handleMRAIDInterstitialDidPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController { self.interstitialViewController = viewController; - [self enableRequestHandling]; - [self checkViewability]; + [self didEndAnimatingAdSize]; + [self updateMRAIDProperties]; + [self updateOrientation]; // If viewability tracking has been deferred (i.e., if this is a non-banner ad), start tracking here now that the // ad has been presented. If viewability tracking was not deferred, we're already tracking and there's no need to @@ -316,9 +342,9 @@ static NSString *const kMRAIDCommandResize = @"resize"; return bridge; } -- (MPWebView *)buildMRAIDWebViewWithFrame:(CGRect)frame forceUIWebView:(BOOL)forceUIWebView +- (MPWebView *)buildMRAIDWebViewWithFrame:(CGRect)frame { - MPWebView *webView = [[MPWebView alloc] initWithFrame:frame forceUIWebView:forceUIWebView]; + MPWebView *webView = [[MPWebView alloc] initWithFrame:frame]; webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; webView.backgroundColor = [UIColor clearColor]; webView.clipsToBounds = YES; @@ -353,7 +379,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; #pragma mark - Executing Javascript -- (void)initializeLoadedAdForBridge:(MRBridge *)bridge +- (void)configureMraidEnvironmentToShowAdForBridge:(MRBridge *)bridge { // Set up some initial properties so mraid can operate. MPLogDebug(@"Injecting initial JavaScript state."); @@ -378,68 +404,82 @@ static NSString *const kMRAIDCommandResize = @"resize"; #pragma mark - Resize Helpers -- (CGRect)adjustedFrameForFrame:(CGRect)frame allowOffscreen:(BOOL)allowOffscreen +/** + 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 (allowOffscreen) { + if (CGRectContainsRect(applicationSafeArea, frame)) { return frame; - } - - CGRect applicationFrame = MPApplicationFrame(); - CGFloat applicationWidth = CGRectGetWidth(applicationFrame); - CGFloat applicationHeight = CGRectGetHeight(applicationFrame); - CGFloat adFrameWidth = CGRectGetWidth(frame); - CGFloat adFrameHeight = CGRectGetHeight(frame); - - //Checking that the ad's frame falls offscreen, and then it is smaller than the screen's bounds (so when - //moved onscreen, it will fit). If not, we bail out, and validation is done separately. - if (!CGRectContainsRect(applicationFrame, frame) && adFrameWidth <= applicationWidth && adFrameHeight <= applicationHeight) { - - CGFloat applicationMinX = CGRectGetMinX(applicationFrame); - CGFloat applicationMaxX = CGRectGetMaxX(applicationFrame); - CGFloat adFrameMinX = CGRectGetMinX(frame); - CGFloat adFrameMaxX = CGRectGetMaxX(frame); - - if (adFrameMinX < applicationMinX) { - frame.origin.x += applicationMinX - adFrameMinX; - } else if (adFrameMaxX > applicationMaxX) { - frame.origin.x -= adFrameMaxX - applicationMaxX; + } 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); } - CGFloat applicationMinY = CGRectGetMinY(applicationFrame); - CGFloat applicationMaxY = CGRectGetMaxY(applicationFrame); - CGFloat adFrameMinY = CGRectGetMinY(frame); - CGFloat adFrameMaxY = CGRectGetMaxY(frame); - - if (adFrameMinY < applicationMinY) { - frame.origin.y += applicationMinY - adFrameMinY; - } else if (adFrameMaxY > applicationMaxY) { - frame.origin.y -= adFrameMaxY - applicationMaxY; + 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; } -- (BOOL)isValidResizeFrame:(CGRect)frame allowOffscreen:(BOOL)allowOffscreen +/** + 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 { - BOOL valid = YES; - if (!allowOffscreen && !CGRectContainsRect(MPApplicationFrame(), frame)) { - valid = NO; - } else if (CGRectGetWidth(frame) < 50.0f || CGRectGetHeight(frame) < 50.0f) { - valid = NO; + 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); + } } - - return valid; } -- (BOOL)isValidResizeCloseButtonPlacementInFrame:(CGRect)newFrame -{ - CGRect closeButtonFrameForResize = MPClosableViewCustomCloseButtonFrame(newFrame.size, self.mraidAdView.closeButtonLocation); - //Manually calculating Button's Frame in the window (newFrame's soon-to-be superview) because newFrame is not - //part of the view hierarchy yet. - CGRect closeButtonFrameInWindow = CGRectOffset(closeButtonFrameForResize, CGRectGetMinX(newFrame), CGRectGetMinY(newFrame)); - - return CGRectContainsRect(MPApplicationFrame(), closeButtonFrameInWindow); +/** + 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 @@ -489,7 +529,6 @@ static NSString *const kMRAIDCommandResize = @"resize"; view.frame = self.expandModalViewController.view.bounds; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.expandModalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - [self.expandModalViewController hideStatusBar]; [[self.delegate viewControllerForPresentingModalView] presentViewController:self.expandModalViewController animated:animated @@ -561,8 +600,6 @@ static NSString *const kMRAIDCommandResize = @"resize"; // they're in a transitional state. [self willBeginAnimatingAdSize]; - // Tell the modal view controller to restore the state of the status bar back to what the application had it set to. - [self.expandModalViewController restoreStatusBarVisibility]; __weak __typeof__(self) weakSelf = self; [self.expandModalViewController dismissViewControllerAnimated:YES completion:^{ __typeof__(self) strongSelf = weakSelf; @@ -584,6 +621,11 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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]; + } }]; } @@ -593,15 +635,25 @@ static NSString *const kMRAIDCommandResize = @"resize"; [self willBeginAnimatingAdSize]; + __weak __typeof__(self) weakSelf = self; [UIView animateWithDuration:kMRAIDResizeAnimationTimeInterval animations:^{ - self.mraidAdView.frame = self.mraidDefaultAdFrameInKeyWindow; + __typeof__(self) strongSelf = weakSelf; + + strongSelf.mraidAdView.frame = strongSelf.mraidDefaultAdFrameInKeyWindow; } completion:^(BOOL finished) { - [self.resizeBackgroundView removeFromSuperview]; - [self.originalSuperview addSubview:self.mraidAdView]; - self.mraidAdView.frame = self.mraidDefaultAdFrame; - [self changeStateTo:MRAdViewStateDefault]; - [self didEndAnimatingAdSize]; - [self adDidDismissModalView]; + __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]; + } }]; } @@ -642,7 +694,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; - (void)nativeCommandWillPresentModalView { - [self adWillPresentModalView]; + [self adWillPresentModalViewByExpanding:NO]; } - (void)nativeCommandDidDismissModalView @@ -661,8 +713,8 @@ static NSString *const kMRAIDCommandResize = @"resize"; 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 intialize the javascript/fire ready event, or 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 + // 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) { @@ -676,7 +728,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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 initializeLoadedAdForBridge:bridge]; + [self configureMraidEnvironmentToShowAdForBridge:bridge]; } } } @@ -708,9 +760,9 @@ static NSString *const kMRAIDCommandResize = @"resize"; } else if (command == MPMoPubHostCommandFailLoad) { [self adDidFailToLoad]; } else if (command == MPMoPubHostCommandRewardedVideoEnded) { - [self.delegate rewardedVideoEnded]; + [self rewardedVideoEnded]; } else { - MPLogWarn(@"MRController - unsupported MoPub URL: %@", [url absoluteString]); + MPLogInfo(@"MRController - unsupported MoPub URL: %@", [url absoluteString]); } } @@ -764,8 +816,10 @@ static NSString *const kMRAIDCommandResize = @"resize"; BOOL inExpandedState = self.currentState == MRAdViewStateExpanded; - // If we aren't expanded or showing an interstitial ad, we don't have to force orientation on our ad. + // 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; } @@ -791,12 +845,6 @@ static NSString *const kMRAIDCommandResize = @"resize"; if (inSameOrientation) { fullScreenAdViewController.supportedOrientationMask = forceOrientationMask; } else { - // It doesn't seem possible to force orientation in iOS 7+. So we dismiss the current view controller and re-present it with the forced orientation. - // If it's an expanded ad, we need to restore the status bar visibility before we dismiss the current VC since we don't show the status bar in expanded state. - if (inExpandedState) { - [self.expandModalViewController restoreStatusBarVisibility]; - } - // Block our timer from updating properties while we force orientation on the view controller. [self willBeginAnimatingAdSize]; @@ -837,7 +885,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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 adWillPresentModalView]; + [self adWillPresentModalViewByExpanding:YES]; } else { [self.resizeBackgroundView removeFromSuperview]; } @@ -848,9 +896,11 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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 forceUIWebView:self.shouldUseUIWebView]; - self.mraidBridgeTwoPart = [[MPInstanceProvider sharedProvider] buildMRBridgeWithWebView:twoPartWebView delegate:self]; - self.mraidAdViewTwoPart = [[MPInstanceProvider sharedProvider] buildMRAIDMPClosableViewWithFrame:twoPartFrame webView:twoPartWebView delegate:self]; + 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; @@ -901,17 +951,29 @@ static NSString *const kMRAIDCommandResize = @"resize"; self.mraidDefaultAdFrameInKeyWindow = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:MPKeyWindow().rootViewController.view]; } - CGRect newFrame = CGRectMake(CGRectGetMinX(self.mraidDefaultAdFrameInKeyWindow) + offsetX, CGRectGetMinY(self.mraidDefaultAdFrameInKeyWindow) + offsetY, width, height); - newFrame = [self adjustedFrameForFrame:newFrame allowOffscreen:allowOffscreen]; + 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]; + } - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithoutImage; - self.mraidAdView.closeButtonLocation = [self adCloseButtonLocationFromString:customClosePositionString]; - - if (![self isValidResizeFrame:newFrame allowOffscreen:allowOffscreen]) { + 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 isValidResizeCloseButtonPlacementInFrame:newFrame]) { - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Custom close event region is offscreen."]; + } 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) { @@ -919,12 +981,12 @@ static NSString *const kMRAIDCommandResize = @"resize"; self.originalSuperview = self.mraidAdView.superview; self.mraidAdView.frame = self.mraidDefaultAdFrameInKeyWindow; - self.resizeBackgroundView.frame = MPApplicationFrame(); + self.resizeBackgroundView.frame = MPApplicationFrame(self.includeSafeAreaInsetsInCalculations); [MPKeyWindow().rootViewController.view addSubview:self.resizeBackgroundView]; [MPKeyWindow().rootViewController.view addSubview:self.mraidAdView]; - [self adWillPresentModalView]; + [self adWillPresentModalViewByExpanding:YES]; } [self animateViewFromDefaultStateToResizedState:self.mraidAdView withFrame:newFrame]; @@ -943,7 +1005,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; // Fire the ready event and initialize properties if the view has a window. MRBridge *bridge = [self bridgeForAdView:closableView]; - if (!self.firedReadyEventForDefaultAd && bridge == self.mraidBridge) { + 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 @@ -962,8 +1024,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; object:nil]; [self.adPropertyUpdateTimer scheduleNow]; - [self initializeLoadedAdForBridge:bridge]; - self.firedReadyEventForDefaultAd = YES; + self.didConfigureOrientationNotificationObservers = YES; } } } @@ -972,7 +1033,7 @@ static NSString *const kMRAIDCommandResize = @"resize"; - (void)displayAgentWillPresentModal { - [self adWillPresentModalView]; + [self adWillPresentModalViewByExpanding:NO]; } - (void)displayAgentDidDismissModal @@ -995,12 +1056,16 @@ static NSString *const kMRAIDCommandResize = @"resize"; // 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 checkViewability]; [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]; } } @@ -1008,16 +1073,18 @@ static NSString *const kMRAIDCommandResize = @"resize"; { CGRect visibleFrame = CGRectZero; - if (self.placementType == MRAdViewPlacementTypeInline) { - if (self.currentState == MRAdViewStateExpanded) { - // We're in a modal so we can just return the expanded view's frame. - visibleFrame = self.expansionContentView.frame; - } else { - UIWindow *keyWindow = MPKeyWindow(); - visibleFrame = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:keyWindow.rootViewController.view]; - } - } else if (self.placementType == MRAdViewPlacementTypeInterstitial) { - visibleFrame = self.mraidAdView.frame; + // 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; @@ -1045,22 +1112,42 @@ static NSString *const kMRAIDCommandResize = @"resize"; { CGRect frame = [self activeAdFrameInScreenSpace]; - // Only fire to the active ad view. - MRBridge *activeBridge = [self bridgeForActiveAdView]; - [activeBridge fireSetCurrentPositionWithPositionRect:frame]; + @synchronized (self) { + // No need to update since nothing has changed. + if (CGRectEqualToRect(frame, self.previousCurrentPosition)) { + return; + } - MPLogTrace(@"Current Position: %@", NSStringFromCGRect(frame)); + // 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]; - // 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]; + @synchronized (self) { + // No need to update since nothing has changed. + if (CGRectEqualToRect(defaultFrame, self.previousDefaultPosition)) { + return; + } - MPLogTrace(@"Default Position: %@", NSStringFromCGRect(defaultFrame)); + // 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 @@ -1068,23 +1155,51 @@ static NSString *const kMRAIDCommandResize = @"resize"; // Fire an event for screen size changing. This includes the area of the status bar in its calculation. CGSize screenSize = MPScreenBounds().size; - // Fire to both ad views as it pertains to both views. - [self.mraidBridge fireSetScreenSize:screenSize]; - [self.mraidBridgeTwoPart fireSetScreenSize:screenSize]; + @synchronized (self) { + // No need to update since nothing has changed. + if (CGSizeEqualToSize(screenSize, self.previousScreenSize)) { + return; + } - MPLogTrace(@"Screen Size: %@", NSStringFromCGSize(screenSize)); + // 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().size; + CGSize maxSize = MPApplicationFrame(self.includeSafeAreaInsetsInCalculations).size; - // Fire to both ad views as it pertains to both views. - [self.mraidBridge fireSetMaxSize:maxSize]; - [self.mraidBridgeTwoPart fireSetMaxSize:maxSize]; + @synchronized (self) { + // No need to update since nothing has changed. + if (CGSizeEqualToSize(maxSize, self.previousMaxSize)) { + return; + } - MPLogTrace(@"Max Size: %@", NSStringFromCGSize(maxSize)); + // 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 @@ -1159,6 +1274,9 @@ static NSString *const kMRAIDCommandResize = @"resize"; - (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]; } @@ -1185,12 +1303,25 @@ static NSString *const kMRAIDCommandResize = @"resize"; } } -- (void)adWillPresentModalView +- (void)rewardedVideoEnded +{ + if ([self.delegate respondsToSelector:@selector(rewardedVideoEnded)]) { + [self.delegate rewardedVideoEnded]; + } +} + +- (void)adWillPresentModalViewByExpanding:(BOOL)wasExpended { self.modalViewCount++; - if (self.modalViewCount == 1) { + 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 @@ -1203,6 +1334,12 @@ static NSString *const kMRAIDCommandResize = @"resize"; - (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]; } @@ -1210,6 +1347,12 @@ static NSString *const kMRAIDCommandResize = @"resize"; - (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]; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRError.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h similarity index 55% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRError.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h index eeb1053954..835a9390a0 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRError.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h @@ -1,8 +1,9 @@ // // MRError.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import 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 new file mode 100644 index 0000000000..516ca6091f --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m @@ -0,0 +1,11 @@ +// +// MRError.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..41fa8144e0 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h @@ -0,0 +1,27 @@ +// +// MRExpandModalViewController.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..ef9ea50fdb --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m @@ -0,0 +1,68 @@ +// +// MRExpandModalViewController.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h similarity index 92% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h index 656bf57a09..efe3e89850 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h @@ -1,8 +1,9 @@ // // MRNativeCommandHandler.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m similarity index 93% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m index 14f44aa403..040bfa5bef 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m @@ -1,14 +1,14 @@ // // MRNativeCommandHandler.m -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 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 "MPInstanceProvider.h" #import "MPLogging.h" #import "MRVideoPlayerManager.h" @@ -27,7 +27,7 @@ if (self) { _delegate = delegate; - _videoPlayerManager = [[MPInstanceProvider sharedProvider] buildMRVideoPlayerManagerWithDelegate:self]; + _videoPlayerManager = [[MRVideoPlayerManager alloc] initWithDelegate:self]; } return self; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRProperty.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h similarity index 94% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRProperty.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h index 6264849f9c..65f2dd2e3b 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRProperty.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h @@ -1,8 +1,9 @@ // // MRProperty.h -// MoPub // -// Copyright (c) 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRProperty.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m similarity index 89% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRProperty.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m index e47b151a2c..036b884587 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRProperty.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m @@ -1,9 +1,9 @@ // // MRProperty.m -// MoPub // -// Created by Andrew He on 12/13/11. -// Copyright (c) 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MRProperty.h" @@ -26,8 +26,6 @@ @implementation MRHostSDKVersionProperty : MRProperty -@synthesize version = _version; - + (instancetype)defaultProperty { MRHostSDKVersionProperty *property = [[self alloc] init]; @@ -46,8 +44,6 @@ @implementation MRPlacementTypeProperty : MRProperty -@synthesize placementType = _placementType; - + (MRPlacementTypeProperty *)propertyWithType:(MRAdViewPlacementType)type { MRPlacementTypeProperty *property = [[self alloc] init]; property.placementType = type; @@ -71,8 +67,6 @@ @implementation MRStateProperty -@synthesize state = _state; - + (MRStateProperty *)propertyWithState:(MRAdViewState)state { MRStateProperty *property = [[self alloc] init]; property.state = state; @@ -107,8 +101,6 @@ @implementation MRScreenSizeProperty : MRProperty -@synthesize screenSize = _screenSize; - + (MRScreenSizeProperty *)propertyWithSize:(CGSize)size { MRScreenSizeProperty *property = [[self alloc] init]; property.screenSize = size; @@ -129,12 +121,9 @@ + (NSDictionary *)supportedFeatures { - BOOL supportsSms, supportsTel; - supportsSms = supportsTel = [MPCoreInstanceProvider sharedProvider].sharedCarrierInfo[@"carrierName"] != nil; - return [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:supportsSms], @"sms", - [NSNumber numberWithBool:supportsTel], @"tel", + [NSNumber numberWithBool:NO], @"sms", + [NSNumber numberWithBool:NO], @"tel", [NSNumber numberWithBool:NO], @"calendar", [NSNumber numberWithBool:NO], @"storePicture", [NSNumber numberWithBool:YES], @"inlineVideo", @@ -178,8 +167,6 @@ @implementation MRViewableProperty : MRProperty -@synthesize isViewable = _isViewable; - + (MRViewableProperty *)propertyWithViewable:(BOOL)viewable { MRViewableProperty *property = [[self alloc] init]; property.isViewable = viewable; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h similarity index 79% rename from iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h index 373f327df5..47deff4435 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h @@ -1,5 +1,9 @@ // -// Copyright (c) 2013 MoPub. All rights reserved. +// MRVideoPlayerManager.h +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import 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 new file mode 100644 index 0000000000..d8c741efbf --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m @@ -0,0 +1,66 @@ +// +// MRVideoPlayerManager.m +// +// Copyright 2018-2019 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/MPNativeAdError+VAST.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MPNativeAdError+VAST.h new file mode 100644 index 0000000000..822fd699a1 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MPNativeAdError+VAST.h @@ -0,0 +1,12 @@ +// +// MPNativeAdError+VAST.h +// +// Copyright 2018-2019 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/Internal/Utility/Categories/MPNativeAdError+VAST.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MPNativeAdError+VAST.m new file mode 100644 index 0000000000..a3a5ef0bb2 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MPNativeAdError+VAST.m @@ -0,0 +1,34 @@ +// +// MPNativeAdError+VAST.m +// +// Copyright 2018-2019 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/Internal/Utility/Categories/MoPub+Utility.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h new file mode 100644 index 0000000000..d0c372a954 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h @@ -0,0 +1,60 @@ +// +// MoPub+Utility.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..06f1a85f10 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.m @@ -0,0 +1,54 @@ +// +// MoPub+Utility.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h similarity index 71% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h index 780314a3e9..01faf4a324 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h @@ -1,8 +1,9 @@ // // NSBundle+MPAdditions.h -// MoPubSDK // -// Copyright © 2016 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m similarity index 73% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m index fcb3ff55a6..18dc86fa4a 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m @@ -1,8 +1,9 @@ // // NSBundle+MPAdditions.m -// MoPubSDK // -// Copyright © 2016 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "NSBundle+MPAdditions.h" 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 new file mode 100644 index 0000000000..55648fd6c0 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h @@ -0,0 +1,18 @@ +// +// NSDate+MPAdditions.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..074ff86e70 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m @@ -0,0 +1,17 @@ +// +// NSDate+MPAdditions.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..4b6c856992 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h @@ -0,0 +1,24 @@ +// +// NSDictionary+MPAdditions.h +// +// Copyright 2018-2019 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; +- (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 new file mode 100644 index 0000000000..46c79c6ca1 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m @@ -0,0 +1,83 @@ +// +// NSDictionary+MPAdditions.m +// +// Copyright 2018-2019 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; +} + +- (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 new file mode 100644 index 0000000000..c4e35dc364 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h @@ -0,0 +1,27 @@ +// +// NSError+MPAdditions.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..597edccfe8 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m @@ -0,0 +1,32 @@ +// +// NSError+MPAdditions.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h similarity index 64% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h index 76f041c49b..89d2b59468 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h @@ -1,8 +1,9 @@ // // NSHTTPURLResponse+MPAdditions.h -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m similarity index 86% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m index f9b40770b2..06101d0c52 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m @@ -1,8 +1,9 @@ // // NSHTTPURLResponse+MPAdditions.m -// MoPubSDK // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "NSHTTPURLResponse+MPAdditions.h" @@ -17,7 +18,7 @@ NSString * const kMoPubHTTPHeaderContentType = @"Content-Type"; NSStringEncoding encoding = NSUTF8StringEncoding; if (![contentType length]) { - MPLogWarn(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); + MPLogInfo(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); return encoding; } diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h similarity index 65% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h index 106388a102..d56b30bea8 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h @@ -1,8 +1,9 @@ // // NSJSONSerialization+MPAdditions.h -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m similarity index 94% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m index 1dd1934292..c5340493f7 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m @@ -1,8 +1,9 @@ // // NSJSONSerialization+MPAdditions.m -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "NSJSONSerialization+MPAdditions.h" 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 new file mode 100644 index 0000000000..d87d8e5e6b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h @@ -0,0 +1,15 @@ +// +// NSMutableArray+MPAdditions.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..196ef426e4 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m @@ -0,0 +1,22 @@ +// +// NSMutableArray+MPAdditions.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h similarity index 72% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h index f89ab1e897..36683953a3 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h @@ -1,8 +1,9 @@ // // NSString+MPAdditions.h -// MoPubSDK // -// Copyright © 2017 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import 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 new file mode 100644 index 0000000000..45278cfa92 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m @@ -0,0 +1,30 @@ +// +// NSString+MPAdditions.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h similarity index 78% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h index 9a59433796..e99a90ff2a 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h @@ -1,8 +1,9 @@ // // NSString+MPConsentStatus.h -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m similarity index 92% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m index a4c46689f7..f56d2e1aaa 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m @@ -1,8 +1,9 @@ // // NSString+MPConsentStatus.m -// MoPubSDK // -// Copyright © 2018 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "NSString+MPConsentStatus.h" diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h similarity index 85% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h index f66bb525ea..02ff320ef5 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h @@ -1,8 +1,9 @@ // // NSURL+MPAdditions.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -26,8 +27,6 @@ typedef enum { - (NSString *)mp_queryParameterForKey:(NSString *)key; - (NSArray *)mp_queryParametersForKey:(NSString *)key; - (NSDictionary *)mp_queryAsDictionary; -- (BOOL)mp_hasTelephoneScheme; -- (BOOL)mp_hasTelephonePromptScheme; - (BOOL)mp_isSafeForLoadingWithoutUserAction; - (BOOL)mp_isMoPubScheme; - (MPMoPubHostCommand)mp_mopubHostCommand; diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m similarity index 83% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m index 86a8abca47..db8d048c18 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m @@ -1,15 +1,13 @@ // // NSURL+MPAdditions.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "NSURL+MPAdditions.h" -static NSString * const kTelephoneScheme = @"tel"; -static NSString * const kTelephonePromptScheme = @"telprompt"; - // Share Constants static NSString * const kMoPubShareScheme = @"mopubshare"; static NSString * const kMoPubShareTweetHost = @"tweet"; @@ -32,7 +30,7 @@ static NSString * const kMoPubRewardedVideoEndedHost = @"rewardedVideoEnded"; if (keyAndValue.count >= 2 && [[keyAndValue objectAtIndex:0] isEqualToString:key] && [[keyAndValue objectAtIndex:1] length] > 0) { - return [[keyAndValue objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + return [[keyAndValue objectAtIndex:1] stringByRemovingPercentEncoding]; } } return nil; @@ -47,7 +45,7 @@ static NSString * const kMoPubRewardedVideoEndedHost = @"rewardedVideoEnded"; if (keyAndValue.count >= 2 && [[keyAndValue objectAtIndex:0] isEqualToString:key] && [[keyAndValue objectAtIndex:1] length] > 0) { - [matchingParameters addObject:[[keyAndValue objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + [matchingParameters addObject:[[keyAndValue objectAtIndex:1] stringByRemovingPercentEncoding]]; } } return [NSArray arrayWithArray:matchingParameters]; @@ -62,23 +60,12 @@ static NSString * const kMoPubRewardedVideoEndedHost = @"rewardedVideoEnded"; if (keyVal.count >= 2) { NSString *key = [keyVal objectAtIndex:0]; NSString *value = [keyVal objectAtIndex:1]; - [queryDict setObject:[value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] - forKey:key]; + [queryDict setObject:[value stringByRemovingPercentEncoding] forKey:key]; } } return queryDict; } -- (BOOL)mp_hasTelephoneScheme -{ - return [[[self scheme] lowercaseString] isEqualToString:kTelephoneScheme]; -} - -- (BOOL)mp_hasTelephonePromptScheme -{ - return [[[self scheme] lowercaseString] isEqualToString:kTelephonePromptScheme]; -} - - (BOOL)mp_isSafeForLoadingWithoutUserAction { return [[self scheme].lowercaseString isEqualToString:@"http"] || 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 new file mode 100644 index 0000000000..1e177b8ead --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.h @@ -0,0 +1,24 @@ +// +// SKStoreProductViewController+MPAdditions.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..d4eebe3a68 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.m @@ -0,0 +1,35 @@ +// +// SKStoreProductViewController+MPAdditions.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h similarity index 54% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h index 02ff51c88a..196091c310 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h @@ -1,6 +1,9 @@ // // UIColor+MPAdditions.h -// Copyright (c) 2015 MoPub. All rights reserved. +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m similarity index 78% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m index bc5e5d7fa6..e92221acd5 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m @@ -1,6 +1,9 @@ // // UIColor+MPAdditions.m -// Copyright (c) 2015 MoPub. All rights reserved. +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "UIColor+MPAdditions.h" 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 new file mode 100644 index 0000000000..da6857574b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h @@ -0,0 +1,46 @@ +// +// UIView+MPAdditions.h +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m similarity index 51% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m index 3420d8b25c..cf3144f868 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m @@ -1,6 +1,9 @@ // // UIView+MPAdditions.m -// Copyright (c) 2015 MoPub. All rights reserved. +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "UIView+MPAdditions.h" @@ -95,3 +98,87 @@ } @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 new file mode 100644 index 0000000000..dbc8bca170 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h @@ -0,0 +1,19 @@ +// +// MOPUBExperimentProvider.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..f5cc74e957 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m @@ -0,0 +1,48 @@ +// +// MOPUBExperimentProvider.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..76ed0a40f0 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h @@ -0,0 +1,29 @@ +// +// MPAnalyticsTracker.h +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m similarity index 53% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m index cf3e7beff2..d1a5618138 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m @@ -1,8 +1,9 @@ // // MPAnalyticsTracker.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPAnalyticsTracker.h" @@ -14,16 +15,26 @@ @implementation MPAnalyticsTracker -+ (MPAnalyticsTracker *)tracker ++ (MPAnalyticsTracker *)sharedTracker { - return [[MPAnalyticsTracker alloc] init]; + 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 { - MPLogDebug(@"Tracking impression: %@", configuration.impressionTrackingURL); - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:configuration.impressionTrackingURL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request]; + // 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 @@ -33,7 +44,7 @@ [MPHTTPNetworkSession startTaskWithHttpRequest:request]; } -- (void)sendTrackingRequestForURLs:(NSArray *)URLs +- (void)sendTrackingRequestForURLs:(NSArray *)URLs { for (NSURL *URL in URLs) { MPURLRequest * trackingRequest = [[MPURLRequest alloc] initWithURL:URL]; 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 new file mode 100644 index 0000000000..e82e14465b --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h @@ -0,0 +1,76 @@ +// +// MPError.h +// +// Copyright 2018-2019 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, +} 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 new file mode 100644 index 0000000000..363c92ce94 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m @@ -0,0 +1,109 @@ +// +// MPError.m +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/MPGeolocationProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h similarity index 82% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGeolocationProvider.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h index 5fae5347f8..f0f6cf5051 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGeolocationProvider.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h @@ -1,8 +1,9 @@ // // MPGeolocationProvider.h -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGeolocationProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m similarity index 92% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGeolocationProvider.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m index 82c5a8c9ed..0690057ef3 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGeolocationProvider.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m @@ -1,8 +1,9 @@ // // MPGeolocationProvider.m -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPGeolocationProvider.h" @@ -179,7 +180,10 @@ const NSTimeInterval kMPLocationUpdateInterval = 10.0 * 60.0; [self.locationManager startUpdatingLocation]; [self.locationUpdateDurationTimer invalidate]; - self.locationUpdateDurationTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:kMPLocationUpdateDuration target:self selector:@selector(currentLocationUpdateDidFinish) repeats:NO]; + self.locationUpdateDurationTimer = [MPTimer timerWithTimeInterval:kMPLocationUpdateDuration + target:self + selector:@selector(currentLocationUpdateDidFinish) + repeats:NO]; [self.locationUpdateDurationTimer scheduleNow]; } @@ -196,7 +200,10 @@ const NSTimeInterval kMPLocationUpdateInterval = 10.0 * 60.0; { MPLogDebug(@"Next user location update due in %.1f seconds.", delay); [self.nextLocationUpdateTimer invalidate]; - self.nextLocationUpdateTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:delay target:self selector:@selector(startRecurringLocationUpdates) repeats:NO]; + self.nextLocationUpdateTimer = [MPTimer timerWithTimeInterval:delay + target:self + selector:@selector(startRecurringLocationUpdates) + repeats:NO]; [self.nextLocationUpdateTimer scheduleNow]; } @@ -296,15 +303,7 @@ const NSTimeInterval kMPLocationUpdateInterval = 10.0 * 60.0; } } -#pragma mark - (iOS < 6.0) - -- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation -{ - if ([self isLocation:newLocation betterThanLocation:self.lastKnownLocation]) { - self.lastKnownLocation = newLocation; - MPLogDebug(@"Updated last known user location."); - } -} +#pragma mark - Consent - (void)consentStateChanged:(NSNotification *)notification { diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGlobal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h similarity index 63% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGlobal.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h index f7e1a11461..709d950b02 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGlobal.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h @@ -1,8 +1,9 @@ // // MPGlobal.h -// MoPub // -// Copyright 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -15,7 +16,7 @@ UIInterfaceOrientation MPInterfaceOrientation(void); UIWindow *MPKeyWindow(void); CGFloat MPStatusBarHeight(void); -CGRect MPApplicationFrame(void); +CGRect MPApplicationFrame(BOOL includeSafeAreaInsets); CGRect MPScreenBounds(void); CGSize MPScreenResolution(void); CGFloat MPDeviceScaleFactor(void); @@ -25,28 +26,6 @@ BOOL MPViewIsVisible(UIView *view); BOOL MPViewIntersectsParentWindowWithPercent(UIView *view, CGFloat percentVisible); NSString *MPResourcePathForResource(NSString *resourceName); NSArray *MPConvertStringArrayToURLArray(NSArray *strArray); -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - * Availability constants. - */ - -#define MP_IOS_2_0 20000 -#define MP_IOS_2_1 20100 -#define MP_IOS_2_2 20200 -#define MP_IOS_3_0 30000 -#define MP_IOS_3_1 30100 -#define MP_IOS_3_2 30200 -#define MP_IOS_4_0 40000 -#define MP_IOS_4_1 40100 -#define MP_IOS_4_2 40200 -#define MP_IOS_4_3 40300 -#define MP_IOS_5_0 50000 -#define MP_IOS_5_1 50100 -#define MP_IOS_6_0 60000 -#define MP_IOS_7_0 70000 -#define MP_IOS_8_0 80000 -#define MP_IOS_9_0 90000 //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -62,6 +41,8 @@ typedef NS_ENUM(NSUInteger, MPInterstitialOrientationType) { MPInterstitialOrientationTypeAll, }; +UIInterfaceOrientationMask MPInterstitialOrientationTypeToUIInterfaceOrientationMask(MPInterstitialOrientationType type); + //////////////////////////////////////////////////////////////////////////////////////////////////// @interface UIDevice (MPAdditions) @@ -74,8 +55,6 @@ typedef NS_ENUM(NSUInteger, MPInterstitialOrientationType) { @interface UIApplication (MPAdditions) -// Correct way to hide/show the status bar on pre-ios 7. -- (void)mp_preIOS7setApplicationStatusBarHidden:(BOOL)hidden; - (BOOL)mp_supportsOrientationMask:(UIInterfaceOrientationMask)orientationMask; - (BOOL)mp_doesOrientation:(UIInterfaceOrientation)orientation matchOrientationMask:(UIInterfaceOrientationMask)orientationMask; @@ -100,18 +79,3 @@ typedef NS_ENUM(NSUInteger, MPInterstitialOrientationType) { - (void)processAdAlertOnce; @end - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Small alert wrapper class to handle telephone protocol prompting -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@class MPTelephoneConfirmationController; - -typedef void (^MPTelephoneConfirmationControllerClickHandler)(NSURL *targetTelephoneURL, BOOL confirmed); - -@interface MPTelephoneConfirmationController : NSObject - -- (id)initWithURL:(NSURL *)url clickHandler:(MPTelephoneConfirmationControllerClickHandler)clickHandler; -- (void)show; - -@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGlobal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m similarity index 65% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGlobal.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m index e1c1617573..5be46ae8b2 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPGlobal.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m @@ -1,8 +1,9 @@ // // MPGlobal.m -// MoPub // -// Copyright 2011 MoPub, Inc. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPGlobal.h" @@ -39,9 +40,25 @@ CGFloat MPStatusBarHeight() { return (width < height) ? width : height; } -CGRect MPApplicationFrame() +CGRect MPApplicationFrame(BOOL includeSafeAreaInsets) { - CGRect frame = MPScreenBounds(); + // 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(); @@ -51,23 +68,9 @@ CGRect MPApplicationFrame() CGRect MPScreenBounds() { - // Prior to iOS 8, window and screen coordinates were fixed and always specified relative to the - // device’s screen in a portrait orientation. Starting with iOS8, the `fixedCoordinateSpace` - // property was introduced which specifies bounds that always reflect the screen dimensions of - // the device in a portrait-up orientation. - CGRect bounds = [UIScreen mainScreen].bounds; - if ([[UIScreen mainScreen] respondsToSelector:@selector(fixedCoordinateSpace)]) { - bounds = [UIScreen mainScreen].fixedCoordinateSpace.bounds; - } - - // Rotate the portrait-up bounds if the orientation of the device is in landscape. - if (UIInterfaceOrientationIsLandscape(MPInterfaceOrientation())) { - CGFloat width = bounds.size.width; - bounds.size.width = bounds.size.height; - bounds.size.height = width; - } - - return bounds; + // 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() @@ -95,8 +98,7 @@ NSDictionary *MPDictionaryFromQueryString(NSString *query) { NSArray *keyVal = [element componentsSeparatedByString:@"="]; NSString *key = [keyVal objectAtIndex:0]; NSString *value = [keyVal lastObject]; - [queryDict setObject:[value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] - forKey:key]; + [queryDict setObject:[value stringByRemovingPercentEncoding] forKey:key]; } return queryDict; } @@ -188,7 +190,7 @@ NSString *MPResourcePathForResource(NSString *resourceName) if ([[NSBundle mainBundle] pathForResource:@"MoPub" ofType:@"bundle"] != nil) { return [@"MoPub.bundle" stringByAppendingPathComponent:resourceName]; } - else if ([[UIDevice currentDevice].systemVersion compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending) { + 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. @@ -196,14 +198,6 @@ NSString *MPResourcePathForResource(NSString *resourceName) NSString *resourcePath = [resourceBundle pathForResource:resourceName ofType:nil]; return resourcePath; } - else { - // We can just return the resource name because: - // 1. This is being used as an open source release so the resource will be - // in the main bundle. - // 2. This is cocoapods but CAN'T be using frameworks since that is only allowed - // on ios 8 and above. - return resourceName; - } } NSArray *MPConvertStringArrayToURLArray(NSArray *strArray) @@ -222,6 +216,15 @@ NSArray *MPConvertStringArrayToURLArray(NSArray *strArray) return urls; } +UIInterfaceOrientationMask MPInterstitialOrientationTypeToUIInterfaceOrientationMask(MPInterstitialOrientationType type) +{ + switch (type) { + case MPInterstitialOrientationTypePortrait: return UIInterfaceOrientationMaskPortrait; + case MPInterstitialOrientationTypeLandscape: return UIInterfaceOrientationMaskLandscape; + default: return UIInterfaceOrientationMaskAll; + } +} + //////////////////////////////////////////////////////////////////////////////////////////////////// @implementation UIDevice (MPAdditions) @@ -241,15 +244,6 @@ NSArray *MPConvertStringArrayToURLArray(NSArray *strArray) @implementation UIApplication (MPAdditions) -- (void)mp_preIOS7setApplicationStatusBarHidden:(BOOL)hidden -{ - // Hiding the status bar should use a fade effect. - // Displaying the status bar should use no animation. - UIStatusBarAnimation animation = hidden ? - UIStatusBarAnimationFade : UIStatusBarAnimationNone; - [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animation]; -} - - (BOOL)mp_supportsOrientationMask:(UIInterfaceOrientationMask)orientationMask { NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"]; @@ -308,78 +302,3 @@ NSArray *MPConvertStringArrayToURLArray(NSArray *strArray) } @end -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPTelephoneConfirmationController () - -@property (nonatomic, strong) UIAlertView *alertView; -@property (nonatomic, strong) NSURL *telephoneURL; -@property (nonatomic, copy) MPTelephoneConfirmationControllerClickHandler clickHandler; - -@end - -@implementation MPTelephoneConfirmationController - -- (id)initWithURL:(NSURL *)url clickHandler:(MPTelephoneConfirmationControllerClickHandler)clickHandler -{ - if (![url mp_hasTelephoneScheme] && ![url mp_hasTelephonePromptScheme]) { - // Shouldn't be here as the url must have a tel or telPrompt scheme. - MPLogError(@"Processing URL as a telephone URL when %@ doesn't follow the tel:// or telprompt:// schemes", url.absoluteString); - return nil; - } - - if (self = [super init]) { - // If using tel://xxxxxxx, the host will be the number. If using tel:xxxxxxx, we will try the resourceIdentifier. - NSString *phoneNumber = [url host]; - - if (!phoneNumber) { - phoneNumber = [url resourceSpecifier]; - if ([phoneNumber length] == 0) { - MPLogError(@"Invalid telelphone URL: %@.", url.absoluteString); - return nil; - } - } - - _alertView = [[UIAlertView alloc] initWithTitle: @"Are you sure you want to call?" - message:phoneNumber - delegate:self - cancelButtonTitle:@"Cancel" - otherButtonTitles:@"Call", nil]; - self.clickHandler = clickHandler; - - // We want to manually handle telPrompt scheme alerts. So we'll convert telPrompt schemes to tel schemes. - if ([url mp_hasTelephonePromptScheme]) { - self.telephoneURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", phoneNumber]]; - } else { - self.telephoneURL = url; - } - } - - return self; -} - -- (void)dealloc -{ - self.alertView.delegate = nil; - [self.alertView dismissWithClickedButtonIndex:0 animated:YES]; -} - -- (void)show -{ - [self.alertView show]; -} - -#pragma mark - UIAlertViewDelegate - -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - BOOL confirmed = (buttonIndex == 1); - - if (self.clickHandler) { - self.clickHandler(self.telephoneURL, confirmed); - } - -} - -@end - diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPIdentityProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h similarity index 79% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPIdentityProvider.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h index f732b1aa9a..263cb58ac1 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPIdentityProvider.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h @@ -1,8 +1,9 @@ // // MPIdentityProvider.h -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import @@ -24,6 +25,11 @@ */ + (NSString *)obfuscatedIdentifier; +/** + * Return the unobfuscated MoPub UUID, without the "mopub:" prefix. + */ ++ (NSString *)unobfuscatedMoPubIdentifier; + + (BOOL)advertisingTrackingEnabled; /** diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPIdentityProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m similarity index 55% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPIdentityProvider.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m index 02b6b8ae79..e420ea1eae 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPIdentityProvider.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m @@ -1,8 +1,9 @@ // // MPIdentityProvider.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPIdentityProvider.h" @@ -14,10 +15,12 @@ #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; @@ -25,6 +28,17 @@ static BOOL gFrequencyCappingIdUsageEnabled = YES; @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]; @@ -35,6 +49,14 @@ static BOOL gFrequencyCappingIdUsageEnabled = YES; 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) { @@ -72,26 +94,30 @@ static BOOL gFrequencyCappingIdUsageEnabled = YES; return @"mopub:XXXX"; } - // reset identifier every 24 hours - NSDate *lastSetDate = [[NSUserDefaults standardUserDefaults] objectForKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - if (!lastSetDate) { - [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; + // 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]; - } else { - NSTimeInterval diff = [[NSDate date] timeIntervalSinceDate:lastSetDate]; - if (diff > MOPUB_DAY_IN_SECONDS) { - [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - } + } + // 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) { + NSString * identifier = [[NSUserDefaults standardUserDefaults] objectForKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; + if (identifier == nil) { CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault); NSString *uuidStr = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuidObject)); CFRelease(uuidObject); - identifier = [NSString stringWithFormat:@"mopub:%@", [uuidStr uppercaseString]]; + identifier = [mopubPrefix stringByAppendingString:[uuidStr uppercaseString]]; [[NSUserDefaults standardUserDefaults] setObject:identifier forKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; } 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 new file mode 100644 index 0000000000..e8ec127175 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h @@ -0,0 +1,73 @@ +/* + 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 + + +// 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 enum : NSInteger { + MPNotReachable = 0, + MPReachableViaWiFi = 2, + MPReachableViaCellularNetworkUnknownGeneration, + MPReachableViaCellularNetwork2G, + MPReachableViaCellularNetwork3G, + MPReachableViaCellularNetwork4G +} MPNetworkStatus; + +#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/3party/MoPubSDK/Internal/Utility/MPReachability.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m similarity index 55% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPReachability.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m index e17fa4b20a..9269b9db8e 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPReachability.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m @@ -1,59 +1,24 @@ /* - File: Reachability.m - Abstract: Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - Version: 3.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2014 Apple Inc. All Rights Reserved. + 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 "MPReachability.h" -#import "MPLogging.h" +#import "MPCoreInstanceProvider.h" + +#pragma mark IPv6 Support +//Reachability fully support IPv6. For full details, see ReadMe.md. NSString *kMPReachabilityChangedNotification = @"kMPReachabilityChangedNotification"; @@ -87,16 +52,12 @@ static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, const char* static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) { #pragma unused (target, flags) - if (info == NULL) { - MPLogWarn(@"info was NULL in ReachabilityCallback"); - } - if (![(__bridge NSObject*) info isKindOfClass: [MPReachability class]]) { - MPLogWarn(@"info was wrong class in ReachabilityCallback"); - } + NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); + NSCAssert([(__bridge NSObject*) info isKindOfClass: [MPReachability class]], @"info was wrong class in ReachabilityCallback"); - MPReachability* reachabilityObject = (__bridge MPReachability *)info; + MPReachability* noteObject = (__bridge MPReachability *)info; // Post a notification to notify the client that the network reachability changed. - [[NSNotificationCenter defaultCenter] postNotificationName: kMPReachabilityChangedNotification object: reachabilityObject]; + [[NSNotificationCenter defaultCenter] postNotificationName: kMPReachabilityChangedNotification object: noteObject]; } @@ -104,7 +65,6 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach @implementation MPReachability { - BOOL _alwaysReturnLocalWiFiStatus; //default is NO SCNetworkReachabilityRef _reachabilityRef; } @@ -118,8 +78,8 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach if (returnValue != NULL) { returnValue->_reachabilityRef = reachability; - returnValue->_alwaysReturnLocalWiFiStatus = NO; - } else { + } + else { CFRelease(reachability); } } @@ -127,9 +87,9 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach } -+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress ++ (instancetype)reachabilityWithAddress:(const struct sockaddr *)hostAddress { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)hostAddress); + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, hostAddress); MPReachability* returnValue = NULL; @@ -139,8 +99,8 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach if (returnValue != NULL) { returnValue->_reachabilityRef = reachability; - returnValue->_alwaysReturnLocalWiFiStatus = NO; - } else { + } + else { CFRelease(reachability); } } @@ -148,7 +108,6 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach } - + (instancetype)reachabilityForInternetConnection { struct sockaddr_in zeroAddress; @@ -156,28 +115,13 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; - return [self reachabilityWithAddress:&zeroAddress]; + 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 -+ (instancetype)reachabilityForLocalWiFi -{ - struct sockaddr_in localWifiAddress; - bzero(&localWifiAddress, sizeof(localWifiAddress)); - localWifiAddress.sin_len = sizeof(localWifiAddress); - localWifiAddress.sin_family = AF_INET; - - // IN_LINKLOCALNETNUM is defined in as 169.254.0.0. - localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); - - MPReachability* returnValue = [self reachabilityWithAddress: &localWifiAddress]; - if (returnValue != NULL) - { - returnValue->_alwaysReturnLocalWiFiStatus = YES; - } - - return returnValue; -} #pragma mark - Start and stop notifier @@ -220,20 +164,6 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach #pragma mark - Network Flag Handling -- (MPNetworkStatus)localWiFiStatusForFlags:(SCNetworkReachabilityFlags)flags -{ - PrintReachabilityFlags(flags, "localWiFiStatusForFlags"); - MPNetworkStatus returnValue = MPNotReachable; - - if ((flags & kSCNetworkReachabilityFlagsReachable) && (flags & kSCNetworkReachabilityFlagsIsDirect)) - { - returnValue = MPReachableViaWiFi; - } - - return returnValue; -} - - - (MPNetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags { PrintReachabilityFlags(flags, "networkStatusForFlags"); @@ -274,7 +204,9 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach /* ... but WWAN connections are OK if the calling application is using the CFNetwork APIs. */ - returnValue = MPReachableViaWWAN; + + // If using WWAN, get current radio access technology to fill in 2G/3G/4G info + returnValue = [[MPCoreInstanceProvider sharedProvider] currentRadioAccessTechnology]; } return returnValue; @@ -303,29 +235,10 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { - if (_alwaysReturnLocalWiFiStatus) - { - returnValue = [self localWiFiStatusForFlags:flags]; - } - else - { - returnValue = [self networkStatusForFlags:flags]; - } + returnValue = [self networkStatusForFlags:flags]; } return returnValue; } - -- (BOOL)hasWifi -{ - return [self currentReachabilityStatus] == MPReachableViaWiFi; -} - -- (BOOL)hasCellular -{ - return [self currentReachabilityStatus] == MPReachableViaWWAN; -} - - @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 new file mode 100644 index 0000000000..c813a45b9a --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h @@ -0,0 +1,15 @@ +// +// MPSessionTracker.h +// +// Copyright 2018-2019 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/3party/MoPubSDK/Internal/Utility/MPSessionTracker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m similarity index 87% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPSessionTracker.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m index c5781c4aea..f8b79c97c6 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPSessionTracker.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m @@ -1,8 +1,9 @@ // // MPSessionTracker.m -// MoPub // -// Copyright (c) 2013 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPSessionTracker.h" @@ -17,7 +18,7 @@ @implementation MPSessionTracker -+ (void)load ++ (void)initializeNotificationObservers { if (SESSION_TRACKING_ENABLED) { [[NSNotificationCenter defaultCenter] addObserver:self 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 new file mode 100644 index 0000000000..8985713e54 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.h @@ -0,0 +1,34 @@ +// +// MPStopwatch.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..04712533e8 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.m @@ -0,0 +1,68 @@ +// +// MPStopwatch.m +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..7fc00d2402 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h @@ -0,0 +1,42 @@ +// +// MPTimer.h +// +// Copyright 2018-2019 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 new file mode 100644 index 0000000000..f2d121248a --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m @@ -0,0 +1,171 @@ +// +// MPTimer.m +// +// Copyright 2018-2019 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; +@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; + + // Use the main thread run loop to keep the timer alive. + // Note: `NSRunLoop` is not thread safe, so we have to access it from main thread only. + void (^mainThreadOperation)(void) = ^void(void) { + timer.timer = [NSTimer timerWithTimeInterval:seconds + target:timer + selector:@selector(timerDidFire) + userInfo:nil + repeats:repeats]; + [timer.timer setFireDate:[NSDate distantFuture]]; // do not fire until `scheduleNow` is called + [[NSRunLoop mainRunLoop] addTimer:timer.timer forMode:runLoopMode]; + }; + if ([NSThread isMainThread]) { + mainThreadOperation(); + } else { + dispatch_sync(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]; +} + +- (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); + } +} + +- (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]; +} + +@end diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h similarity index 51% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h index 0f77145c1a..3e045dd13c 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h @@ -1,8 +1,9 @@ // // MPUserInteractionGestureRecognizer.h -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m similarity index 87% rename from iphone/Maps/3party/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m index 23dc47c7db..422d364231 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m @@ -1,8 +1,9 @@ // // MPUserInteractionGestureRecognizer.m -// MoPub // -// Copyright (c) 2014 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPUserInteractionGestureRecognizer.h" 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 new file mode 100644 index 0000000000..4a06a735b7 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Protocols/MPMediaFileCache.h @@ -0,0 +1,52 @@ +// +// MPMediaFileCache.h +// +// Copyright 2018-2019 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 + +/** + Determine whether a remote media file has been locally cached. + */ +- (BOOL)isRemoteFileCached:(NSURL *)remoteFileURL; + +/** + Move a file to the cache directory. + @param localFileURL The location of the file to move. Typically this source file is a temporary file + provided by the completion handler of a URL session download task. + @param remoteFileURL The original remote URL that the file was hosted. + */ +- (NSError *)moveLocalFileToCache:(NSURL *)localFileURL remoteSourceFileURL:(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/3party/MoPubSDK/Internal/VAST/MPVASTAd.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h similarity index 73% rename from iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTAd.h rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h index 5ad3e7d9a3..2b4c6be70d 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTAd.h +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h @@ -1,8 +1,9 @@ // // MPVASTAd.h -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import diff --git a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTAd.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m similarity index 81% rename from iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTAd.m rename to iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m index ceb1f334b1..41080d2a30 100644 --- a/iphone/Maps/3party/MoPubSDK/Internal/VAST/MPVASTAd.m +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m @@ -1,8 +1,9 @@ // // MPVASTAd.m -// MoPub // -// Copyright (c) 2015 MoPub. All rights reserved. +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ // #import "MPVASTAd.h" @@ -19,7 +20,7 @@ // 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) { - MPLogWarn(@"VAST element is not allowed to contain both an and a " + MPLogInfo(@"VAST element is not allowed to contain both an and a " @". The will be ignored."); _wrapper = nil; } 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 new file mode 100644 index 0000000000..0ea3563ad7 --- /dev/null +++ b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h @@ -0,0 +1,56 @@ +// +// MPVASTCompanionAd.h +// +// Copyright 2018-2019 Twitter, Inc. +// Licensed under the MoPub SDK License Agreement +// http://www.mopub.com/legal/sdk-license-agreement/ +// + +#import +#import +#import "MPVASTModel.h" + +@class MPVASTResource; +@class MPVASTTrackingEvent; + +@interface MPVASTCompanionAd : MPVASTModel + +@property (nonatomic, strong, readonly) NSString *identifier; // optional attribute +@property (nonatomic, readonly) CGFloat width; +@property (nonatomic, readonly) CGFloat height; +@property (nonatomic, readonly) CGFloat assetHeight; // optional attribute +@property (nonatomic, readonly) CGFloat assetWidth; // 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 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