diff --git a/BinaryProjects/ANSDK.xcodeproj/project.pbxproj b/BinaryProjects/ANSDK.xcodeproj/project.pbxproj index ef364f0c2..62c97ba05 100644 --- a/BinaryProjects/ANSDK.xcodeproj/project.pbxproj +++ b/BinaryProjects/ANSDK.xcodeproj/project.pbxproj @@ -7,34 +7,37 @@ objects = { /* Begin PBXBuildFile section */ + 8AD618CB1981C11F00AC0780 /* ANAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */; }; + 8AD618CC1981C11F00AC0780 /* ANAdRequestUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */; }; + 8AD618CD1981C11F00AC0780 /* ANAdResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A31981C11F00AC0780 /* ANAdResponse.m */; }; + 8AD618CE1981C11F00AC0780 /* ANAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A41981C11F00AC0780 /* ANAdView.m */; }; + 8AD618CF1981C11F00AC0780 /* ANAdWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A71981C11F00AC0780 /* ANAdWebViewController.m */; }; + 8AD618D01981C11F00AC0780 /* ANANJAMImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */; }; + 8AD618D11981C11F00AC0780 /* ANBannerAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */; }; + 8AD618D21981C11F00AC0780 /* ANBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */; }; + 8AD618D31981C11F00AC0780 /* ANClickOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */; }; + 8AD618D41981C11F00AC0780 /* ANGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B11981C11F00AC0780 /* ANGlobal.m */; }; + 8AD618D51981C11F00AC0780 /* ANInterstitialAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */; }; + 8AD618D61981C11F00AC0780 /* ANInterstitialAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */; }; + 8AD618D71981C11F00AC0780 /* ANLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B51981C11F00AC0780 /* ANLocation.m */; }; + 8AD618D81981C11F00AC0780 /* ANLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B71981C11F00AC0780 /* ANLogging.m */; }; + 8AD618D91981C11F00AC0780 /* ANLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B81981C11F00AC0780 /* ANLogManager.m */; }; + 8AD618DA1981C11F00AC0780 /* ANMediatedAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */; }; + 8AD618DB1981C11F00AC0780 /* ANMediationAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */; }; + 8AD618DC1981C11F00AC0780 /* ANMediationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */; }; + 8AD618DD1981C11F00AC0780 /* ANMRAIDViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C11981C11F00AC0780 /* ANMRAIDViewController.m */; }; + 8AD618DE1981C11F00AC0780 /* ANPBBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */; }; + 8AD618DF1981C11F00AC0780 /* ANPBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */; }; + 8AD618E01981C11F00AC0780 /* ANReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C71981C11F00AC0780 /* ANReachability.m */; }; + 8AD618E11981C11F00AC0780 /* ANTargetingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */; }; + 8AD618E21981C11F00AC0780 /* ANWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618CA1981C11F00AC0780 /* ANWebView.m */; }; + 8AD618E31981C19100AC0780 /* appnexus_logo_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */; }; + 8AD618E41981C19500AC0780 /* appnexus_logo_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */; }; EC481796184504AD0066BBFE /* ANSDKResources.bundle in Copy Files */ = {isa = PBXBuildFile; fileRef = EC48177B1845046A0066BBFE /* ANSDKResources.bundle */; }; ECE4EADA194B768A0069D934 /* NSString+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA97194B768A0069D934 /* NSString+ANCategory.m */; }; ECE4EADB194B768A0069D934 /* NSTimer+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA99194B768A0069D934 /* NSTimer+ANCategory.m */; }; ECE4EADC194B768A0069D934 /* UIView+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA9B194B768A0069D934 /* UIView+ANCategory.m */; }; ECE4EADD194B768A0069D934 /* UIWebView+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA9D194B768A0069D934 /* UIWebView+ANCategory.m */; }; - ECE4EADE194B768A0069D934 /* ANAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAA0194B768A0069D934 /* ANAdFetcher.m */; }; - ECE4EADF194B768A0069D934 /* ANAdRequestUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAA2194B768A0069D934 /* ANAdRequestUrl.m */; }; - ECE4EAE0194B768A0069D934 /* ANAdResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAA4194B768A0069D934 /* ANAdResponse.m */; }; - ECE4EAE1194B768A0069D934 /* ANAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAA5194B768A0069D934 /* ANAdView.m */; }; - ECE4EAE2194B768A0069D934 /* ANAdWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAA8194B768A0069D934 /* ANAdWebViewController.m */; }; - ECE4EAE3194B768A0069D934 /* ANANJAMImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAAA194B768A0069D934 /* ANANJAMImplementation.m */; }; - ECE4EAE4194B768A0069D934 /* ANBannerAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAAB194B768A0069D934 /* ANBannerAdView.m */; }; - ECE4EAE5194B768A0069D934 /* ANBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAAE194B768A0069D934 /* ANBrowserViewController.m */; }; - ECE4EAE6194B768A0069D934 /* ANClickOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAB0194B768A0069D934 /* ANClickOverlayView.m */; }; - ECE4EAE7194B768A0069D934 /* ANGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAB2194B768A0069D934 /* ANGlobal.m */; }; - ECE4EAE8194B768A0069D934 /* ANInstallTrackerPixel.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAB4194B768A0069D934 /* ANInstallTrackerPixel.m */; }; - ECE4EAE9194B768A0069D934 /* ANInterstitialAd.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAB5194B768A0069D934 /* ANInterstitialAd.m */; }; - ECE4EAEA194B768A0069D934 /* ANInterstitialAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAB7194B768A0069D934 /* ANInterstitialAdViewController.m */; }; - ECE4EAEB194B768A0069D934 /* ANLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAB8194B768A0069D934 /* ANLocation.m */; }; - ECE4EAEC194B768A0069D934 /* ANLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EABA194B768A0069D934 /* ANLogging.m */; }; - ECE4EAED194B768A0069D934 /* ANLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EABB194B768A0069D934 /* ANLogManager.m */; }; - ECE4EAEE194B768A0069D934 /* ANMediatedAd.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EABD194B768A0069D934 /* ANMediatedAd.m */; }; - ECE4EAEF194B768A0069D934 /* ANMediationAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EABF194B768A0069D934 /* ANMediationAdViewController.m */; }; - ECE4EAF0194B768A0069D934 /* ANMRAIDViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAC2194B768A0069D934 /* ANMRAIDViewController.m */; }; - ECE4EAF1194B768A0069D934 /* ANPBBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAC4194B768A0069D934 /* ANPBBuffer.m */; }; - ECE4EAF2194B768A0069D934 /* ANReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAC6194B768A0069D934 /* ANReachability.m */; }; - ECE4EAF3194B768A0069D934 /* ANTargetingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAC7194B768A0069D934 /* ANTargetingParameters.m */; }; - ECE4EAF4194B768A0069D934 /* ANWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EAC9194B768A0069D934 /* ANWebView.m */; }; ECE4EB03194B76960069D934 /* ANBrowserViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECE4EACB194B768A0069D934 /* ANBrowserViewController.xib */; }; ECE4EB04194B76960069D934 /* ANInterstitialAdViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECE4EACC194B768A0069D934 /* ANInterstitialAdViewController.xib */; }; ECE4EB05194B76960069D934 /* anjam.js in Resources */ = {isa = PBXBuildFile; fileRef = ECE4EACD194B768A0069D934 /* anjam.js */; }; @@ -92,6 +95,53 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = appnexus_logo_icon.png; path = images/appnexus_logo_icon.png; sourceTree = ""; }; + 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "appnexus_logo_icon@2x.png"; path = "images/appnexus_logo_icon@2x.png"; sourceTree = ""; }; + 8AD6189E1981C11F00AC0780 /* ANAdFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdFetcher.h; sourceTree = ""; }; + 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdFetcher.m; sourceTree = ""; }; + 8AD618A01981C11F00AC0780 /* ANAdRequestUrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdRequestUrl.h; sourceTree = ""; }; + 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdRequestUrl.m; sourceTree = ""; }; + 8AD618A21981C11F00AC0780 /* ANAdResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdResponse.h; sourceTree = ""; }; + 8AD618A31981C11F00AC0780 /* ANAdResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdResponse.m; sourceTree = ""; }; + 8AD618A41981C11F00AC0780 /* ANAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdView.m; sourceTree = ""; }; + 8AD618A51981C11F00AC0780 /* ANAdViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdViewDelegate.h; sourceTree = ""; }; + 8AD618A61981C11F00AC0780 /* ANAdWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdWebViewController.h; sourceTree = ""; }; + 8AD618A71981C11F00AC0780 /* ANAdWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdWebViewController.m; sourceTree = ""; }; + 8AD618A81981C11F00AC0780 /* ANANJAMImplementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANANJAMImplementation.h; sourceTree = ""; }; + 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANANJAMImplementation.m; sourceTree = ""; }; + 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBannerAdView.m; sourceTree = ""; }; + 8AD618AB1981C11F00AC0780 /* ANBasicConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBasicConfig.h; sourceTree = ""; }; + 8AD618AC1981C11F00AC0780 /* ANBrowserViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBrowserViewController.h; sourceTree = ""; }; + 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBrowserViewController.m; sourceTree = ""; }; + 8AD618AE1981C11F00AC0780 /* ANClickOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANClickOverlayView.h; sourceTree = ""; }; + 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANClickOverlayView.m; sourceTree = ""; }; + 8AD618B01981C11F00AC0780 /* ANGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANGlobal.h; sourceTree = ""; }; + 8AD618B11981C11F00AC0780 /* ANGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANGlobal.m; sourceTree = ""; }; + 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAd.m; sourceTree = ""; }; + 8AD618B31981C11F00AC0780 /* ANInterstitialAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInterstitialAdViewController.h; sourceTree = ""; }; + 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAdViewController.m; sourceTree = ""; }; + 8AD618B51981C11F00AC0780 /* ANLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLocation.m; sourceTree = ""; }; + 8AD618B61981C11F00AC0780 /* ANLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLogging.h; sourceTree = ""; }; + 8AD618B71981C11F00AC0780 /* ANLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogging.m; sourceTree = ""; }; + 8AD618B81981C11F00AC0780 /* ANLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogManager.m; sourceTree = ""; }; + 8AD618B91981C11F00AC0780 /* ANMediatedAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediatedAd.h; sourceTree = ""; }; + 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediatedAd.m; sourceTree = ""; }; + 8AD618BB1981C11F00AC0780 /* ANMediationAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationAdViewController.h; sourceTree = ""; }; + 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationAdViewController.m; sourceTree = ""; }; + 8AD618BD1981C11F00AC0780 /* ANMediationContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationContainerView.h; sourceTree = ""; }; + 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationContainerView.m; sourceTree = ""; }; + 8AD618BF1981C11F00AC0780 /* ANMRAIDProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDProperties.h; sourceTree = ""; }; + 8AD618C01981C11F00AC0780 /* ANMRAIDViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDViewController.h; sourceTree = ""; }; + 8AD618C11981C11F00AC0780 /* ANMRAIDViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDViewController.m; sourceTree = ""; }; + 8AD618C21981C11F00AC0780 /* ANPBBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBBuffer.h; sourceTree = ""; }; + 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBBuffer.m; sourceTree = ""; }; + 8AD618C41981C11F00AC0780 /* ANPBContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBContainerView.h; sourceTree = ""; }; + 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBContainerView.m; sourceTree = ""; }; + 8AD618C61981C11F00AC0780 /* ANReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANReachability.h; sourceTree = ""; }; + 8AD618C71981C11F00AC0780 /* ANReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANReachability.m; sourceTree = ""; }; + 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTargetingParameters.m; sourceTree = ""; }; + 8AD618C91981C11F00AC0780 /* ANWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANWebView.h; sourceTree = ""; }; + 8AD618CA1981C11F00AC0780 /* ANWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANWebView.m; sourceTree = ""; }; EC3E5CDC1843C6D50070315E /* libANSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANSDK.a; sourceTree = BUILT_PRODUCTS_DIR; }; EC48177B1845046A0066BBFE /* ANSDKResources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ANSDKResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; ECE4EA8D194B768A0069D934 /* ANAdProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdProtocol.h; sourceTree = ""; }; @@ -110,49 +160,6 @@ ECE4EA9B194B768A0069D934 /* UIView+ANCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ANCategory.m"; sourceTree = ""; }; ECE4EA9C194B768A0069D934 /* UIWebView+ANCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+ANCategory.h"; sourceTree = ""; }; ECE4EA9D194B768A0069D934 /* UIWebView+ANCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+ANCategory.m"; sourceTree = ""; }; - ECE4EA9F194B768A0069D934 /* ANAdFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdFetcher.h; sourceTree = ""; }; - ECE4EAA0194B768A0069D934 /* ANAdFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdFetcher.m; sourceTree = ""; }; - ECE4EAA1194B768A0069D934 /* ANAdRequestUrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdRequestUrl.h; sourceTree = ""; }; - ECE4EAA2194B768A0069D934 /* ANAdRequestUrl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdRequestUrl.m; sourceTree = ""; }; - ECE4EAA3194B768A0069D934 /* ANAdResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdResponse.h; sourceTree = ""; }; - ECE4EAA4194B768A0069D934 /* ANAdResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdResponse.m; sourceTree = ""; }; - ECE4EAA5194B768A0069D934 /* ANAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdView.m; sourceTree = ""; }; - ECE4EAA6194B768A0069D934 /* ANAdViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdViewDelegate.h; sourceTree = ""; }; - ECE4EAA7194B768A0069D934 /* ANAdWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdWebViewController.h; sourceTree = ""; }; - ECE4EAA8194B768A0069D934 /* ANAdWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdWebViewController.m; sourceTree = ""; }; - ECE4EAA9194B768A0069D934 /* ANANJAMImplementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANANJAMImplementation.h; sourceTree = ""; }; - ECE4EAAA194B768A0069D934 /* ANANJAMImplementation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANANJAMImplementation.m; sourceTree = ""; }; - ECE4EAAB194B768A0069D934 /* ANBannerAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBannerAdView.m; sourceTree = ""; }; - ECE4EAAC194B768A0069D934 /* ANBasicConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBasicConfig.h; sourceTree = ""; }; - ECE4EAAD194B768A0069D934 /* ANBrowserViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBrowserViewController.h; sourceTree = ""; }; - ECE4EAAE194B768A0069D934 /* ANBrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBrowserViewController.m; sourceTree = ""; }; - ECE4EAAF194B768A0069D934 /* ANClickOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANClickOverlayView.h; sourceTree = ""; }; - ECE4EAB0194B768A0069D934 /* ANClickOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANClickOverlayView.m; sourceTree = ""; }; - ECE4EAB1194B768A0069D934 /* ANGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANGlobal.h; sourceTree = ""; }; - ECE4EAB2194B768A0069D934 /* ANGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANGlobal.m; sourceTree = ""; }; - ECE4EAB3194B768A0069D934 /* ANInstallTrackerPixel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInstallTrackerPixel.h; sourceTree = ""; }; - ECE4EAB4194B768A0069D934 /* ANInstallTrackerPixel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInstallTrackerPixel.m; sourceTree = ""; }; - ECE4EAB5194B768A0069D934 /* ANInterstitialAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAd.m; sourceTree = ""; }; - ECE4EAB6194B768A0069D934 /* ANInterstitialAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInterstitialAdViewController.h; sourceTree = ""; }; - ECE4EAB7194B768A0069D934 /* ANInterstitialAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAdViewController.m; sourceTree = ""; }; - ECE4EAB8194B768A0069D934 /* ANLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLocation.m; sourceTree = ""; }; - ECE4EAB9194B768A0069D934 /* ANLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLogging.h; sourceTree = ""; }; - ECE4EABA194B768A0069D934 /* ANLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogging.m; sourceTree = ""; }; - ECE4EABB194B768A0069D934 /* ANLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogManager.m; sourceTree = ""; }; - ECE4EABC194B768A0069D934 /* ANMediatedAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediatedAd.h; sourceTree = ""; }; - ECE4EABD194B768A0069D934 /* ANMediatedAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediatedAd.m; sourceTree = ""; }; - ECE4EABE194B768A0069D934 /* ANMediationAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationAdViewController.h; sourceTree = ""; }; - ECE4EABF194B768A0069D934 /* ANMediationAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationAdViewController.m; sourceTree = ""; }; - ECE4EAC0194B768A0069D934 /* ANMRAIDProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDProperties.h; sourceTree = ""; }; - ECE4EAC1194B768A0069D934 /* ANMRAIDViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDViewController.h; sourceTree = ""; }; - ECE4EAC2194B768A0069D934 /* ANMRAIDViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDViewController.m; sourceTree = ""; }; - ECE4EAC3194B768A0069D934 /* ANPBBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBBuffer.h; sourceTree = ""; }; - ECE4EAC4194B768A0069D934 /* ANPBBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBBuffer.m; sourceTree = ""; }; - ECE4EAC5194B768A0069D934 /* ANReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANReachability.h; sourceTree = ""; }; - ECE4EAC6194B768A0069D934 /* ANReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANReachability.m; sourceTree = ""; }; - ECE4EAC7194B768A0069D934 /* ANTargetingParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTargetingParameters.m; sourceTree = ""; }; - ECE4EAC8194B768A0069D934 /* ANWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANWebView.h; sourceTree = ""; }; - ECE4EAC9194B768A0069D934 /* ANWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANWebView.m; sourceTree = ""; }; ECE4EACB194B768A0069D934 /* ANBrowserViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ANBrowserViewController.xib; sourceTree = ""; }; ECE4EACC194B768A0069D934 /* ANInterstitialAdViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ANInterstitialAdViewController.xib; sourceTree = ""; }; ECE4EACD194B768A0069D934 /* anjam.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = anjam.js; sourceTree = ""; }; @@ -187,6 +194,58 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 8AD6189D1981C11F00AC0780 /* internal */ = { + isa = PBXGroup; + children = ( + 8AD6189E1981C11F00AC0780 /* ANAdFetcher.h */, + 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */, + 8AD618A01981C11F00AC0780 /* ANAdRequestUrl.h */, + 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */, + 8AD618A21981C11F00AC0780 /* ANAdResponse.h */, + 8AD618A31981C11F00AC0780 /* ANAdResponse.m */, + 8AD618A41981C11F00AC0780 /* ANAdView.m */, + 8AD618A51981C11F00AC0780 /* ANAdViewDelegate.h */, + 8AD618A61981C11F00AC0780 /* ANAdWebViewController.h */, + 8AD618A71981C11F00AC0780 /* ANAdWebViewController.m */, + 8AD618A81981C11F00AC0780 /* ANANJAMImplementation.h */, + 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */, + 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */, + 8AD618AB1981C11F00AC0780 /* ANBasicConfig.h */, + 8AD618AC1981C11F00AC0780 /* ANBrowserViewController.h */, + 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */, + 8AD618AE1981C11F00AC0780 /* ANClickOverlayView.h */, + 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */, + 8AD618B01981C11F00AC0780 /* ANGlobal.h */, + 8AD618B11981C11F00AC0780 /* ANGlobal.m */, + 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */, + 8AD618B31981C11F00AC0780 /* ANInterstitialAdViewController.h */, + 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */, + 8AD618B51981C11F00AC0780 /* ANLocation.m */, + 8AD618B61981C11F00AC0780 /* ANLogging.h */, + 8AD618B71981C11F00AC0780 /* ANLogging.m */, + 8AD618B81981C11F00AC0780 /* ANLogManager.m */, + 8AD618B91981C11F00AC0780 /* ANMediatedAd.h */, + 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */, + 8AD618BB1981C11F00AC0780 /* ANMediationAdViewController.h */, + 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */, + 8AD618BD1981C11F00AC0780 /* ANMediationContainerView.h */, + 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */, + 8AD618BF1981C11F00AC0780 /* ANMRAIDProperties.h */, + 8AD618C01981C11F00AC0780 /* ANMRAIDViewController.h */, + 8AD618C11981C11F00AC0780 /* ANMRAIDViewController.m */, + 8AD618C21981C11F00AC0780 /* ANPBBuffer.h */, + 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */, + 8AD618C41981C11F00AC0780 /* ANPBContainerView.h */, + 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */, + 8AD618C61981C11F00AC0780 /* ANReachability.h */, + 8AD618C71981C11F00AC0780 /* ANReachability.m */, + 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */, + 8AD618C91981C11F00AC0780 /* ANWebView.h */, + 8AD618CA1981C11F00AC0780 /* ANWebView.m */, + ); + path = internal; + sourceTree = ""; + }; EC3E5CD31843C6D50070315E = { isa = PBXGroup; children = ( @@ -215,8 +274,8 @@ ECE4EA92194B768A0069D934 /* ANLocation.h */, ECE4EA93194B768A0069D934 /* ANLogManager.h */, ECE4EA94194B768A0069D934 /* ANTargetingParameters.h */, + 8AD6189D1981C11F00AC0780 /* internal */, ECE4EA95194B768A0069D934 /* Categories */, - ECE4EA9E194B768A0069D934 /* internal */, ECE4EACA194B768A0069D934 /* Resources */, ); name = sdk; @@ -238,56 +297,6 @@ path = Categories; sourceTree = ""; }; - ECE4EA9E194B768A0069D934 /* internal */ = { - isa = PBXGroup; - children = ( - ECE4EA9F194B768A0069D934 /* ANAdFetcher.h */, - ECE4EAA0194B768A0069D934 /* ANAdFetcher.m */, - ECE4EAA1194B768A0069D934 /* ANAdRequestUrl.h */, - ECE4EAA2194B768A0069D934 /* ANAdRequestUrl.m */, - ECE4EAA3194B768A0069D934 /* ANAdResponse.h */, - ECE4EAA4194B768A0069D934 /* ANAdResponse.m */, - ECE4EAA5194B768A0069D934 /* ANAdView.m */, - ECE4EAA6194B768A0069D934 /* ANAdViewDelegate.h */, - ECE4EAA7194B768A0069D934 /* ANAdWebViewController.h */, - ECE4EAA8194B768A0069D934 /* ANAdWebViewController.m */, - ECE4EAA9194B768A0069D934 /* ANANJAMImplementation.h */, - ECE4EAAA194B768A0069D934 /* ANANJAMImplementation.m */, - ECE4EAAB194B768A0069D934 /* ANBannerAdView.m */, - ECE4EAAC194B768A0069D934 /* ANBasicConfig.h */, - ECE4EAAD194B768A0069D934 /* ANBrowserViewController.h */, - ECE4EAAE194B768A0069D934 /* ANBrowserViewController.m */, - ECE4EAAF194B768A0069D934 /* ANClickOverlayView.h */, - ECE4EAB0194B768A0069D934 /* ANClickOverlayView.m */, - ECE4EAB1194B768A0069D934 /* ANGlobal.h */, - ECE4EAB2194B768A0069D934 /* ANGlobal.m */, - ECE4EAB3194B768A0069D934 /* ANInstallTrackerPixel.h */, - ECE4EAB4194B768A0069D934 /* ANInstallTrackerPixel.m */, - ECE4EAB5194B768A0069D934 /* ANInterstitialAd.m */, - ECE4EAB6194B768A0069D934 /* ANInterstitialAdViewController.h */, - ECE4EAB7194B768A0069D934 /* ANInterstitialAdViewController.m */, - ECE4EAB8194B768A0069D934 /* ANLocation.m */, - ECE4EAB9194B768A0069D934 /* ANLogging.h */, - ECE4EABA194B768A0069D934 /* ANLogging.m */, - ECE4EABB194B768A0069D934 /* ANLogManager.m */, - ECE4EABC194B768A0069D934 /* ANMediatedAd.h */, - ECE4EABD194B768A0069D934 /* ANMediatedAd.m */, - ECE4EABE194B768A0069D934 /* ANMediationAdViewController.h */, - ECE4EABF194B768A0069D934 /* ANMediationAdViewController.m */, - ECE4EAC0194B768A0069D934 /* ANMRAIDProperties.h */, - ECE4EAC1194B768A0069D934 /* ANMRAIDViewController.h */, - ECE4EAC2194B768A0069D934 /* ANMRAIDViewController.m */, - ECE4EAC3194B768A0069D934 /* ANPBBuffer.h */, - ECE4EAC4194B768A0069D934 /* ANPBBuffer.m */, - ECE4EAC5194B768A0069D934 /* ANReachability.h */, - ECE4EAC6194B768A0069D934 /* ANReachability.m */, - ECE4EAC7194B768A0069D934 /* ANTargetingParameters.m */, - ECE4EAC8194B768A0069D934 /* ANWebView.h */, - ECE4EAC9194B768A0069D934 /* ANWebView.m */, - ); - path = internal; - sourceTree = ""; - }; ECE4EACA194B768A0069D934 /* Resources */ = { isa = PBXGroup; children = ( @@ -298,6 +307,8 @@ ECE4EACF194B768A0069D934 /* images */, ECE4EAD8194B768A0069D934 /* MRAID.bundle */, ECE4EAD9194B768A0069D934 /* sdkjs.js */, + 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */, + 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */, ); path = Resources; sourceTree = ""; @@ -388,6 +399,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8AD618E41981C19500AC0780 /* appnexus_logo_icon@2x.png in Resources */, + 8AD618E31981C19100AC0780 /* appnexus_logo_icon.png in Resources */, ECE4EB03194B76960069D934 /* ANBrowserViewController.xib in Resources */, ECE4EB04194B76960069D934 /* ANInterstitialAdViewController.xib in Resources */, ECE4EB07194B76960069D934 /* interstitial_closebox-down.png in Resources */, @@ -419,33 +432,34 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ECE4EADE194B768A0069D934 /* ANAdFetcher.m in Sources */, - ECE4EAE0194B768A0069D934 /* ANAdResponse.m in Sources */, - ECE4EADF194B768A0069D934 /* ANAdRequestUrl.m in Sources */, - ECE4EAE2194B768A0069D934 /* ANAdWebViewController.m in Sources */, - ECE4EAE1194B768A0069D934 /* ANAdView.m in Sources */, - ECE4EAE3194B768A0069D934 /* ANANJAMImplementation.m in Sources */, - ECE4EAE4194B768A0069D934 /* ANBannerAdView.m in Sources */, - ECE4EAE5194B768A0069D934 /* ANBrowserViewController.m in Sources */, - ECE4EAE6194B768A0069D934 /* ANClickOverlayView.m in Sources */, - ECE4EAE8194B768A0069D934 /* ANInstallTrackerPixel.m in Sources */, - ECE4EAE9194B768A0069D934 /* ANInterstitialAd.m in Sources */, - ECE4EAEA194B768A0069D934 /* ANInterstitialAdViewController.m in Sources */, - ECE4EAE7194B768A0069D934 /* ANGlobal.m in Sources */, - ECE4EAEB194B768A0069D934 /* ANLocation.m in Sources */, - ECE4EAEC194B768A0069D934 /* ANLogging.m in Sources */, - ECE4EAED194B768A0069D934 /* ANLogManager.m in Sources */, - ECE4EAEE194B768A0069D934 /* ANMediatedAd.m in Sources */, - ECE4EAEF194B768A0069D934 /* ANMediationAdViewController.m in Sources */, - ECE4EAF0194B768A0069D934 /* ANMRAIDViewController.m in Sources */, - ECE4EAF1194B768A0069D934 /* ANPBBuffer.m in Sources */, - ECE4EAF2194B768A0069D934 /* ANReachability.m in Sources */, - ECE4EAF3194B768A0069D934 /* ANTargetingParameters.m in Sources */, - ECE4EAF4194B768A0069D934 /* ANWebView.m in Sources */, + 8AD618D51981C11F00AC0780 /* ANInterstitialAd.m in Sources */, + 8AD618CF1981C11F00AC0780 /* ANAdWebViewController.m in Sources */, + 8AD618DA1981C11F00AC0780 /* ANMediatedAd.m in Sources */, ECE4EADA194B768A0069D934 /* NSString+ANCategory.m in Sources */, + 8AD618E11981C11F00AC0780 /* ANTargetingParameters.m in Sources */, + 8AD618CB1981C11F00AC0780 /* ANAdFetcher.m in Sources */, + 8AD618E21981C11F00AC0780 /* ANWebView.m in Sources */, + 8AD618D61981C11F00AC0780 /* ANInterstitialAdViewController.m in Sources */, ECE4EADB194B768A0069D934 /* NSTimer+ANCategory.m in Sources */, + 8AD618D01981C11F00AC0780 /* ANANJAMImplementation.m in Sources */, + 8AD618DC1981C11F00AC0780 /* ANMediationContainerView.m in Sources */, + 8AD618CD1981C11F00AC0780 /* ANAdResponse.m in Sources */, + 8AD618DE1981C11F00AC0780 /* ANPBBuffer.m in Sources */, + 8AD618D21981C11F00AC0780 /* ANBrowserViewController.m in Sources */, + 8AD618CE1981C11F00AC0780 /* ANAdView.m in Sources */, + 8AD618D81981C11F00AC0780 /* ANLogging.m in Sources */, + 8AD618CC1981C11F00AC0780 /* ANAdRequestUrl.m in Sources */, + 8AD618DB1981C11F00AC0780 /* ANMediationAdViewController.m in Sources */, + 8AD618D11981C11F00AC0780 /* ANBannerAdView.m in Sources */, + 8AD618DD1981C11F00AC0780 /* ANMRAIDViewController.m in Sources */, + 8AD618D31981C11F00AC0780 /* ANClickOverlayView.m in Sources */, + 8AD618DF1981C11F00AC0780 /* ANPBContainerView.m in Sources */, ECE4EADD194B768A0069D934 /* UIWebView+ANCategory.m in Sources */, + 8AD618E01981C11F00AC0780 /* ANReachability.m in Sources */, ECE4EADC194B768A0069D934 /* UIView+ANCategory.m in Sources */, + 8AD618D71981C11F00AC0780 /* ANLocation.m in Sources */, + 8AD618D41981C11F00AC0780 /* ANGlobal.m in Sources */, + 8AD618D91981C11F00AC0780 /* ANLogManager.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BinaryProjects/ANSDKGoogleAdMobAdapter.xcodeproj/project.pbxproj b/BinaryProjects/ANSDKGoogleAdMobAdapter.xcodeproj/project.pbxproj index ff11f2ed9..3779be3e4 100644 --- a/BinaryProjects/ANSDKGoogleAdMobAdapter.xcodeproj/project.pbxproj +++ b/BinaryProjects/ANSDKGoogleAdMobAdapter.xcodeproj/project.pbxproj @@ -29,6 +29,35 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 8AA18EBA19818D7100F937C4 /* DFPBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DFPBannerView.h; sourceTree = ""; }; + 8AA18EBB19818D7100F937C4 /* DFPExtras.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DFPExtras.h; sourceTree = ""; }; + 8AA18EBC19818D7100F937C4 /* DFPInterstitial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DFPInterstitial.h; sourceTree = ""; }; + 8AA18EBD19818D7100F937C4 /* DFPSwipeableBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DFPSwipeableBannerView.h; sourceTree = ""; }; + 8AA18EBE19818D7100F937C4 /* GADAdSizeDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADAdSizeDelegate.h; sourceTree = ""; }; + 8AA18EBF19818D7100F937C4 /* GADAppEventDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADAppEventDelegate.h; sourceTree = ""; }; + 8AA18EC019818D7100F937C4 /* GADSwipeableBannerViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADSwipeableBannerViewDelegate.h; sourceTree = ""; }; + 8AA18EC219818D7100F937C4 /* GADCustomEventBanner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADCustomEventBanner.h; sourceTree = ""; }; + 8AA18EC319818D7100F937C4 /* GADCustomEventBannerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADCustomEventBannerDelegate.h; sourceTree = ""; }; + 8AA18EC419818D7100F937C4 /* GADCustomEventExtras.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADCustomEventExtras.h; sourceTree = ""; }; + 8AA18EC519818D7100F937C4 /* GADCustomEventInterstitial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADCustomEventInterstitial.h; sourceTree = ""; }; + 8AA18EC619818D7100F937C4 /* GADCustomEventInterstitialDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADCustomEventInterstitialDelegate.h; sourceTree = ""; }; + 8AA18EC719818D7100F937C4 /* GADCustomEventRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADCustomEventRequest.h; sourceTree = ""; }; + 8AA18EC919818D7100F937C4 /* GADSearchBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADSearchBannerView.h; sourceTree = ""; }; + 8AA18ECA19818D7100F937C4 /* GADSearchRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADSearchRequest.h; sourceTree = ""; }; + 8AA18ECB19818D7100F937C4 /* GADAdMobExtras.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADAdMobExtras.h; sourceTree = ""; }; + 8AA18ECC19818D7100F937C4 /* GADAdNetworkExtras.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADAdNetworkExtras.h; sourceTree = ""; }; + 8AA18ECD19818D7100F937C4 /* GADAdSize.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADAdSize.h; sourceTree = ""; }; + 8AA18ECE19818D7100F937C4 /* GADBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADBannerView.h; sourceTree = ""; }; + 8AA18ECF19818D7100F937C4 /* GADBannerViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADBannerViewDelegate.h; sourceTree = ""; }; + 8AA18ED019818D7100F937C4 /* GADInAppPurchase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchase.h; sourceTree = ""; }; + 8AA18ED119818D7100F937C4 /* GADInAppPurchaseDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchaseDelegate.h; sourceTree = ""; }; + 8AA18ED219818D7100F937C4 /* GADInterstitial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADInterstitial.h; sourceTree = ""; }; + 8AA18ED319818D7100F937C4 /* GADInterstitialDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADInterstitialDelegate.h; sourceTree = ""; }; + 8AA18ED419818D7100F937C4 /* GADModules.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADModules.h; sourceTree = ""; }; + 8AA18ED519818D7100F937C4 /* GADRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADRequest.h; sourceTree = ""; }; + 8AA18ED619818D7100F937C4 /* GADRequestError.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GADRequestError.h; sourceTree = ""; }; + 8AA18ED719818D7100F937C4 /* libGoogleAdMobAds.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGoogleAdMobAds.a; sourceTree = ""; }; + 8AA18ED819818D7100F937C4 /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; ECFDECAE1950E2870043F777 /* libANSDKGoogleAdMobAdapter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANSDKGoogleAdMobAdapter.a; sourceTree = BUILT_PRODUCTS_DIR; }; ECFDECD81950E3F70043F777 /* ANAdProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdProtocol.h; sourceTree = ""; }; ECFDECD91950E3F70043F777 /* ANAdView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdView.h; sourceTree = ""; }; @@ -48,35 +77,6 @@ ECFDECE91950E4450043F777 /* ANAdAdapterInterstitialAdMob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialAdMob.m; sourceTree = ""; }; ECFDECEA1950E4450043F777 /* ANAdAdapterInterstitialDFP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterInterstitialDFP.h; sourceTree = ""; }; ECFDECEB1950E4450043F777 /* ANAdAdapterInterstitialDFP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialDFP.m; sourceTree = ""; }; - ECFDECEF1950E4450043F777 /* DFPBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPBannerView.h; sourceTree = ""; }; - ECFDECF01950E4450043F777 /* DFPExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPExtras.h; sourceTree = ""; }; - ECFDECF11950E4450043F777 /* DFPInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPInterstitial.h; sourceTree = ""; }; - ECFDECF21950E4450043F777 /* DFPSwipeableBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPSwipeableBannerView.h; sourceTree = ""; }; - ECFDECF31950E4450043F777 /* GADAdSizeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdSizeDelegate.h; sourceTree = ""; }; - ECFDECF41950E4450043F777 /* GADAppEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAppEventDelegate.h; sourceTree = ""; }; - ECFDECF51950E4450043F777 /* GADSwipeableBannerViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADSwipeableBannerViewDelegate.h; sourceTree = ""; }; - ECFDECF71950E4450043F777 /* GADCustomEventBanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventBanner.h; sourceTree = ""; }; - ECFDECF81950E4450043F777 /* GADCustomEventBannerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventBannerDelegate.h; sourceTree = ""; }; - ECFDECF91950E4450043F777 /* GADCustomEventExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventExtras.h; sourceTree = ""; }; - ECFDECFA1950E4450043F777 /* GADCustomEventInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventInterstitial.h; sourceTree = ""; }; - ECFDECFB1950E4450043F777 /* GADCustomEventInterstitialDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventInterstitialDelegate.h; sourceTree = ""; }; - ECFDECFC1950E4450043F777 /* GADCustomEventRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventRequest.h; sourceTree = ""; }; - ECFDECFE1950E4450043F777 /* GADSearchBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADSearchBannerView.h; sourceTree = ""; }; - ECFDECFF1950E4450043F777 /* GADSearchRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADSearchRequest.h; sourceTree = ""; }; - ECFDED001950E4450043F777 /* GADAdMobExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdMobExtras.h; sourceTree = ""; }; - ECFDED011950E4450043F777 /* GADAdNetworkExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdNetworkExtras.h; sourceTree = ""; }; - ECFDED021950E4450043F777 /* GADAdSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdSize.h; sourceTree = ""; }; - ECFDED031950E4450043F777 /* GADBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADBannerView.h; sourceTree = ""; }; - ECFDED041950E4450043F777 /* GADBannerViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADBannerViewDelegate.h; sourceTree = ""; }; - ECFDED051950E4450043F777 /* GADInAppPurchase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchase.h; sourceTree = ""; }; - ECFDED061950E4450043F777 /* GADInAppPurchaseDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchaseDelegate.h; sourceTree = ""; }; - ECFDED071950E4450043F777 /* GADInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInterstitial.h; sourceTree = ""; }; - ECFDED081950E4450043F777 /* GADInterstitialDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInterstitialDelegate.h; sourceTree = ""; }; - ECFDED091950E4450043F777 /* GADModules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADModules.h; sourceTree = ""; }; - ECFDED0A1950E4450043F777 /* GADRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADRequest.h; sourceTree = ""; }; - ECFDED0B1950E4450043F777 /* GADRequestError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADRequestError.h; sourceTree = ""; }; - ECFDED0C1950E4450043F777 /* libGoogleAdMobAds.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGoogleAdMobAds.a; sourceTree = ""; }; - ECFDED0D1950E4450043F777 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; ECFDED0E1950E4450043F777 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; ECFDED141950E4700043F777 /* ANBasicConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANBasicConfig.h; path = ../sdk/internal/ANBasicConfig.h; sourceTree = ""; }; /* End PBXFileReference section */ @@ -92,12 +92,82 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 8AA18EB719818D7100F937C4 /* GoogleAdMobSDK */ = { + isa = PBXGroup; + children = ( + 8AA18EB819818D7100F937C4 /* Add-ons */, + 8AA18ECB19818D7100F937C4 /* GADAdMobExtras.h */, + 8AA18ECC19818D7100F937C4 /* GADAdNetworkExtras.h */, + 8AA18ECD19818D7100F937C4 /* GADAdSize.h */, + 8AA18ECE19818D7100F937C4 /* GADBannerView.h */, + 8AA18ECF19818D7100F937C4 /* GADBannerViewDelegate.h */, + 8AA18ED019818D7100F937C4 /* GADInAppPurchase.h */, + 8AA18ED119818D7100F937C4 /* GADInAppPurchaseDelegate.h */, + 8AA18ED219818D7100F937C4 /* GADInterstitial.h */, + 8AA18ED319818D7100F937C4 /* GADInterstitialDelegate.h */, + 8AA18ED419818D7100F937C4 /* GADModules.h */, + 8AA18ED519818D7100F937C4 /* GADRequest.h */, + 8AA18ED619818D7100F937C4 /* GADRequestError.h */, + 8AA18ED719818D7100F937C4 /* libGoogleAdMobAds.a */, + 8AA18ED819818D7100F937C4 /* README.txt */, + ); + name = GoogleAdMobSDK; + path = ../mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK; + sourceTree = ""; + }; + 8AA18EB819818D7100F937C4 /* Add-ons */ = { + isa = PBXGroup; + children = ( + 8AA18EB919818D7100F937C4 /* DoubleClick */, + 8AA18EC119818D7100F937C4 /* Mediation */, + 8AA18EC819818D7100F937C4 /* Search */, + ); + path = "Add-ons"; + sourceTree = ""; + }; + 8AA18EB919818D7100F937C4 /* DoubleClick */ = { + isa = PBXGroup; + children = ( + 8AA18EBA19818D7100F937C4 /* DFPBannerView.h */, + 8AA18EBB19818D7100F937C4 /* DFPExtras.h */, + 8AA18EBC19818D7100F937C4 /* DFPInterstitial.h */, + 8AA18EBD19818D7100F937C4 /* DFPSwipeableBannerView.h */, + 8AA18EBE19818D7100F937C4 /* GADAdSizeDelegate.h */, + 8AA18EBF19818D7100F937C4 /* GADAppEventDelegate.h */, + 8AA18EC019818D7100F937C4 /* GADSwipeableBannerViewDelegate.h */, + ); + path = DoubleClick; + sourceTree = ""; + }; + 8AA18EC119818D7100F937C4 /* Mediation */ = { + isa = PBXGroup; + children = ( + 8AA18EC219818D7100F937C4 /* GADCustomEventBanner.h */, + 8AA18EC319818D7100F937C4 /* GADCustomEventBannerDelegate.h */, + 8AA18EC419818D7100F937C4 /* GADCustomEventExtras.h */, + 8AA18EC519818D7100F937C4 /* GADCustomEventInterstitial.h */, + 8AA18EC619818D7100F937C4 /* GADCustomEventInterstitialDelegate.h */, + 8AA18EC719818D7100F937C4 /* GADCustomEventRequest.h */, + ); + path = Mediation; + sourceTree = ""; + }; + 8AA18EC819818D7100F937C4 /* Search */ = { + isa = PBXGroup; + children = ( + 8AA18EC919818D7100F937C4 /* GADSearchBannerView.h */, + 8AA18ECA19818D7100F937C4 /* GADSearchRequest.h */, + ); + path = Search; + sourceTree = ""; + }; ECFDECA51950E2860043F777 = { isa = PBXGroup; children = ( ECFDED141950E4700043F777 /* ANBasicConfig.h */, - ECFDECE31950E4450043F777 /* GoogleAdMob */, ECFDECD71950E3F70043F777 /* ANSDK */, + ECFDECE31950E4450043F777 /* GoogleAdMob */, + 8AA18EB719818D7100F937C4 /* GoogleAdMobSDK */, ECFDECAF1950E2870043F777 /* Products */, ); sourceTree = ""; @@ -139,81 +209,12 @@ ECFDECE91950E4450043F777 /* ANAdAdapterInterstitialAdMob.m */, ECFDECEA1950E4450043F777 /* ANAdAdapterInterstitialDFP.h */, ECFDECEB1950E4450043F777 /* ANAdAdapterInterstitialDFP.m */, - ECFDECEC1950E4450043F777 /* GoogleAdMobSDK */, ECFDED0E1950E4450043F777 /* README.txt */, ); name = GoogleAdMob; path = ../mediation/mediatedviews/GoogleAdMob; sourceTree = ""; }; - ECFDECEC1950E4450043F777 /* GoogleAdMobSDK */ = { - isa = PBXGroup; - children = ( - ECFDECED1950E4450043F777 /* Add-ons */, - ECFDED001950E4450043F777 /* GADAdMobExtras.h */, - ECFDED011950E4450043F777 /* GADAdNetworkExtras.h */, - ECFDED021950E4450043F777 /* GADAdSize.h */, - ECFDED031950E4450043F777 /* GADBannerView.h */, - ECFDED041950E4450043F777 /* GADBannerViewDelegate.h */, - ECFDED051950E4450043F777 /* GADInAppPurchase.h */, - ECFDED061950E4450043F777 /* GADInAppPurchaseDelegate.h */, - ECFDED071950E4450043F777 /* GADInterstitial.h */, - ECFDED081950E4450043F777 /* GADInterstitialDelegate.h */, - ECFDED091950E4450043F777 /* GADModules.h */, - ECFDED0A1950E4450043F777 /* GADRequest.h */, - ECFDED0B1950E4450043F777 /* GADRequestError.h */, - ECFDED0C1950E4450043F777 /* libGoogleAdMobAds.a */, - ECFDED0D1950E4450043F777 /* README.txt */, - ); - path = GoogleAdMobSDK; - sourceTree = ""; - }; - ECFDECED1950E4450043F777 /* Add-ons */ = { - isa = PBXGroup; - children = ( - ECFDECEE1950E4450043F777 /* DoubleClick */, - ECFDECF61950E4450043F777 /* Mediation */, - ECFDECFD1950E4450043F777 /* Search */, - ); - path = "Add-ons"; - sourceTree = ""; - }; - ECFDECEE1950E4450043F777 /* DoubleClick */ = { - isa = PBXGroup; - children = ( - ECFDECEF1950E4450043F777 /* DFPBannerView.h */, - ECFDECF01950E4450043F777 /* DFPExtras.h */, - ECFDECF11950E4450043F777 /* DFPInterstitial.h */, - ECFDECF21950E4450043F777 /* DFPSwipeableBannerView.h */, - ECFDECF31950E4450043F777 /* GADAdSizeDelegate.h */, - ECFDECF41950E4450043F777 /* GADAppEventDelegate.h */, - ECFDECF51950E4450043F777 /* GADSwipeableBannerViewDelegate.h */, - ); - path = DoubleClick; - sourceTree = ""; - }; - ECFDECF61950E4450043F777 /* Mediation */ = { - isa = PBXGroup; - children = ( - ECFDECF71950E4450043F777 /* GADCustomEventBanner.h */, - ECFDECF81950E4450043F777 /* GADCustomEventBannerDelegate.h */, - ECFDECF91950E4450043F777 /* GADCustomEventExtras.h */, - ECFDECFA1950E4450043F777 /* GADCustomEventInterstitial.h */, - ECFDECFB1950E4450043F777 /* GADCustomEventInterstitialDelegate.h */, - ECFDECFC1950E4450043F777 /* GADCustomEventRequest.h */, - ); - path = Mediation; - sourceTree = ""; - }; - ECFDECFD1950E4450043F777 /* Search */ = { - isa = PBXGroup; - children = ( - ECFDECFE1950E4450043F777 /* GADSearchBannerView.h */, - ECFDECFF1950E4450043F777 /* GADSearchRequest.h */, - ); - path = Search; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ diff --git a/BinaryProjects/externalbundle.sh b/BinaryProjects/externalbundle.sh new file mode 100755 index 000000000..acd8422e8 --- /dev/null +++ b/BinaryProjects/externalbundle.sh @@ -0,0 +1,66 @@ +########## +# RUN `buildsdk.sh` FIRST! +########## + +##### +# This is a build script to build the external bundle +# Bundle Includes: +# +# AN SDK +# +# AN Mediation Adapters for: +# # GoogleAdMob +# # iAd +# # MillennialMedia +# +# External SDKs for: +# # GoogleAdMob SDK +# # MillennialMedia SDK +# +# Not Included: +# # Facebook Adapter + SDK +# # MoPub Adapter + SDK +# # iAd.framework +# +##### + +ROOTDIR=`pwd`/.. +OUTDIR=`pwd`/out +MEDDIR=$OUTDIR/ANMediationAdapters +EXTDIR=$ROOTDIR/mediation/mediatedviews +GOOGLESDK=$EXTDIR/GoogleAdMob/GoogleAdMobSDK +MMSDK=$EXTDIR/MillennialMedia/MillennialMediaSDK + +BUNDIR=$OUTDIR/ANSDKExternalBundle +BUNEXTDIR=$BUNDIR/ANExternalNetworks +BUNGOOGLEDIR=$BUNEXTDIR/GoogleAdMob +BUNMMDIR=$BUNEXTDIR/MillennialMedia + +#cleanup +rm -rf $BUNDIR + +mkdir -p $BUNGOOGLEDIR +mkdir -p $BUNMMDIR + +# Include Google and MM SDKs. +cp $GOOGLESDK/libGoogleAdMobAds.a $BUNGOOGLEDIR +cp $GOOGLESDK/README.txt $BUNGOOGLEDIR + +cp -r $MMSDK/MillennialMedia.framework $BUNMMDIR +cp $MMSDK/LICENSE.txt $BUNMMDIR + +# Grab all adapters +cp -r $MEDDIR $BUNDIR + +# Exclude FB + MP +rm -rf $BUNDIR/ANMediationAdapters/libANSDKFacebookAdapter.a +rm -rf $BUNDIR/ANMediationAdapters/libANSDKMoPubAdapter.a + +# Base AN SDK +cp -r $OUTDIR/ANSDK $BUNDIR + +# Zip it up +cd $OUTDIR +zip -r ANSDKExternalBundle.zip ANSDKExternalBundle + + diff --git a/BinaryProjects/old/ANSDKFull.xcodeproj/project.pbxproj b/BinaryProjects/old/ANSDKFull.xcodeproj/project.pbxproj new file mode 100755 index 000000000..e8087c853 --- /dev/null +++ b/BinaryProjects/old/ANSDKFull.xcodeproj/project.pbxproj @@ -0,0 +1,515 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 8A011F9219882CDD00D192C4 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 8A011F8B19882CDD00D192C4 /* README.txt */; }; + 8A98874D198830FF00C5C8A9 /* libGoogleAdMobAds.a in Resources */ = {isa = PBXBuildFile; fileRef = 8A011F8A19882CDD00D192C4 /* libGoogleAdMobAds.a */; }; + 8A98874E1988320C00C5C8A9 /* libGoogleAdMobAds.a in Copy Files */ = {isa = PBXBuildFile; fileRef = 8A011F8A19882CDD00D192C4 /* libGoogleAdMobAds.a */; }; + 8A98876A19884CEE00C5C8A9 /* MillennialMedia.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = 8A98876819884CD400C5C8A9 /* MillennialMedia.framework */; }; + EC3905FD1866948A0017959C /* ANTargetingParameters.h in Copy Files */ = {isa = PBXBuildFile; fileRef = EC3905FC1866947D0017959C /* ANTargetingParameters.h */; }; + EC3E5E0D1843ECF30070315E /* ANAdAdapterBannerAdMob.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5DE31843ECF20070315E /* ANAdAdapterBannerAdMob.m */; }; + EC3E5E0E1843ECF30070315E /* ANAdAdapterInterstitialAdMob.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5DE51843ECF20070315E /* ANAdAdapterInterstitialAdMob.m */; }; + EC3E5E0F1843ECF30070315E /* ANAdAdapterBanneriAd.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5DE81843ECF20070315E /* ANAdAdapterBanneriAd.m */; }; + EC3E5E101843ECF30070315E /* ANAdAdapterInterstitialiAd.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5DEA1843ECF20070315E /* ANAdAdapterInterstitialiAd.m */; }; + EC3E5E131843ECF30070315E /* ANAdAdapterBannerMillennialMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5E081843ECF30070315E /* ANAdAdapterBannerMillennialMedia.m */; }; + EC3E5E141843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5E0A1843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.m */; }; + EC3E5E151843ECF30070315E /* ANAdAdapterMillennialMediaBase.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3E5E0C1843ECF30070315E /* ANAdAdapterMillennialMediaBase.m */; }; + EC6AAED31885F52800CD2FDC /* ANAdAdapterBannerDFP.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6AAECE1885F34900CD2FDC /* ANAdAdapterBannerDFP.m */; }; + EC6AAED41885F52800CD2FDC /* ANAdAdapterInterstitialDFP.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6AAED01885F34900CD2FDC /* ANAdAdapterInterstitialDFP.m */; }; + EC7AB0881888814300C27B1E /* ANLogManager.h in Copy Files */ = {isa = PBXBuildFile; fileRef = EC7AB0871888813300C27B1E /* ANLogManager.h */; }; + ECF23E7618452AE100A94DE8 /* libANSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ECF23E7518452AE100A94DE8 /* libANSDK.a */; }; + ECF23E7718452AEF00A94DE8 /* ANAdProtocol.h in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E6D18452ACD00A94DE8 /* ANAdProtocol.h */; }; + ECF23E7818452AEF00A94DE8 /* ANAdView.h in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E6E18452ACD00A94DE8 /* ANAdView.h */; }; + ECF23E7918452AEF00A94DE8 /* ANBannerAdView.h in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E6F18452ACD00A94DE8 /* ANBannerAdView.h */; }; + ECF23E7A18452AEF00A94DE8 /* ANCustomAdapter.h in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E7018452ACD00A94DE8 /* ANCustomAdapter.h */; }; + ECF23E7B18452AEF00A94DE8 /* ANInterstitialAd.h in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E7118452ACD00A94DE8 /* ANInterstitialAd.h */; }; + ECF23E7C18452AEF00A94DE8 /* ANLocation.h in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E7218452ACD00A94DE8 /* ANLocation.h */; }; + ECF23E7D18452AEF00A94DE8 /* ANSDKResources.bundle in Copy Files */ = {isa = PBXBuildFile; fileRef = ECF23E7318452ACD00A94DE8 /* ANSDKResources.bundle */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + EC3E5DAE1843EB3E0070315E /* Copy Files */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 8A98874E1988320C00C5C8A9 /* libGoogleAdMobAds.a in Copy Files */, + EC7AB0881888814300C27B1E /* ANLogManager.h in Copy Files */, + EC3905FD1866948A0017959C /* ANTargetingParameters.h in Copy Files */, + ECF23E7718452AEF00A94DE8 /* ANAdProtocol.h in Copy Files */, + ECF23E7818452AEF00A94DE8 /* ANAdView.h in Copy Files */, + ECF23E7918452AEF00A94DE8 /* ANBannerAdView.h in Copy Files */, + ECF23E7A18452AEF00A94DE8 /* ANCustomAdapter.h in Copy Files */, + ECF23E7B18452AEF00A94DE8 /* ANInterstitialAd.h in Copy Files */, + ECF23E7C18452AEF00A94DE8 /* ANLocation.h in Copy Files */, + ECF23E7D18452AEF00A94DE8 /* ANSDKResources.bundle in Copy Files */, + 8A98876A19884CEE00C5C8A9 /* MillennialMedia.framework in Copy Files */, + ); + name = "Copy Files"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 8A011F6D19882CDD00D192C4 /* DFPBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPBannerView.h; sourceTree = ""; }; + 8A011F6E19882CDD00D192C4 /* DFPExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPExtras.h; sourceTree = ""; }; + 8A011F6F19882CDD00D192C4 /* DFPInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPInterstitial.h; sourceTree = ""; }; + 8A011F7019882CDD00D192C4 /* DFPSwipeableBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFPSwipeableBannerView.h; sourceTree = ""; }; + 8A011F7119882CDD00D192C4 /* GADAdSizeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdSizeDelegate.h; sourceTree = ""; }; + 8A011F7219882CDD00D192C4 /* GADAppEventDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAppEventDelegate.h; sourceTree = ""; }; + 8A011F7319882CDD00D192C4 /* GADSwipeableBannerViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADSwipeableBannerViewDelegate.h; sourceTree = ""; }; + 8A011F7519882CDD00D192C4 /* GADCustomEventBanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventBanner.h; sourceTree = ""; }; + 8A011F7619882CDD00D192C4 /* GADCustomEventBannerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventBannerDelegate.h; sourceTree = ""; }; + 8A011F7719882CDD00D192C4 /* GADCustomEventExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventExtras.h; sourceTree = ""; }; + 8A011F7819882CDD00D192C4 /* GADCustomEventInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventInterstitial.h; sourceTree = ""; }; + 8A011F7919882CDD00D192C4 /* GADCustomEventInterstitialDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventInterstitialDelegate.h; sourceTree = ""; }; + 8A011F7A19882CDD00D192C4 /* GADCustomEventRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADCustomEventRequest.h; sourceTree = ""; }; + 8A011F7C19882CDD00D192C4 /* GADSearchBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADSearchBannerView.h; sourceTree = ""; }; + 8A011F7D19882CDD00D192C4 /* GADSearchRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADSearchRequest.h; sourceTree = ""; }; + 8A011F7E19882CDD00D192C4 /* GADAdMobExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdMobExtras.h; sourceTree = ""; }; + 8A011F7F19882CDD00D192C4 /* GADAdNetworkExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdNetworkExtras.h; sourceTree = ""; }; + 8A011F8019882CDD00D192C4 /* GADAdSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdSize.h; sourceTree = ""; }; + 8A011F8119882CDD00D192C4 /* GADBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADBannerView.h; sourceTree = ""; }; + 8A011F8219882CDD00D192C4 /* GADBannerViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADBannerViewDelegate.h; sourceTree = ""; }; + 8A011F8319882CDD00D192C4 /* GADInAppPurchase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchase.h; sourceTree = ""; }; + 8A011F8419882CDD00D192C4 /* GADInAppPurchaseDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchaseDelegate.h; sourceTree = ""; }; + 8A011F8519882CDD00D192C4 /* GADInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInterstitial.h; sourceTree = ""; }; + 8A011F8619882CDD00D192C4 /* GADInterstitialDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInterstitialDelegate.h; sourceTree = ""; }; + 8A011F8719882CDD00D192C4 /* GADModules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADModules.h; sourceTree = ""; }; + 8A011F8819882CDD00D192C4 /* GADRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADRequest.h; sourceTree = ""; }; + 8A011F8919882CDD00D192C4 /* GADRequestError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADRequestError.h; sourceTree = ""; }; + 8A011F8A19882CDD00D192C4 /* libGoogleAdMobAds.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGoogleAdMobAds.a; sourceTree = ""; }; + 8A011F8B19882CDD00D192C4 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; + 8A98876819884CD400C5C8A9 /* MillennialMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MillennialMedia.framework; path = ../../mediation/mediatedviews/MillennialMedia/MillennialMediaSDK/MillennialMedia.framework; sourceTree = ""; }; + 8A9C610C19195928008CF74C /* ANBasicConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ANBasicConfig.h; path = ../../../sdk/internal/ANBasicConfig.h; sourceTree = ""; }; + EC3905FC1866947D0017959C /* ANTargetingParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTargetingParameters.h; sourceTree = ""; }; + EC3E5DB01843EB3E0070315E /* libANSDKFull.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANSDKFull.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EC3E5DE21843ECF20070315E /* ANAdAdapterBannerAdMob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterBannerAdMob.h; sourceTree = ""; }; + EC3E5DE31843ECF20070315E /* ANAdAdapterBannerAdMob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterBannerAdMob.m; sourceTree = ""; }; + EC3E5DE41843ECF20070315E /* ANAdAdapterInterstitialAdMob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterInterstitialAdMob.h; sourceTree = ""; }; + EC3E5DE51843ECF20070315E /* ANAdAdapterInterstitialAdMob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialAdMob.m; sourceTree = ""; }; + EC3E5DE71843ECF20070315E /* ANAdAdapterBanneriAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterBanneriAd.h; sourceTree = ""; }; + EC3E5DE81843ECF20070315E /* ANAdAdapterBanneriAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterBanneriAd.m; sourceTree = ""; }; + EC3E5DE91843ECF20070315E /* ANAdAdapterInterstitialiAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterInterstitialiAd.h; sourceTree = ""; }; + EC3E5DEA1843ECF20070315E /* ANAdAdapterInterstitialiAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialiAd.m; sourceTree = ""; }; + EC3E5E071843ECF30070315E /* ANAdAdapterBannerMillennialMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterBannerMillennialMedia.h; sourceTree = ""; }; + EC3E5E081843ECF30070315E /* ANAdAdapterBannerMillennialMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterBannerMillennialMedia.m; sourceTree = ""; }; + EC3E5E091843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterInterstitialMillennialMedia.h; sourceTree = ""; }; + EC3E5E0A1843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialMillennialMedia.m; sourceTree = ""; }; + EC3E5E0B1843ECF30070315E /* ANAdAdapterMillennialMediaBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterMillennialMediaBase.h; sourceTree = ""; }; + EC3E5E0C1843ECF30070315E /* ANAdAdapterMillennialMediaBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterMillennialMediaBase.m; sourceTree = ""; }; + EC6AAECD1885F34900CD2FDC /* ANAdAdapterBannerDFP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterBannerDFP.h; sourceTree = ""; }; + EC6AAECE1885F34900CD2FDC /* ANAdAdapterBannerDFP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterBannerDFP.m; sourceTree = ""; }; + EC6AAECF1885F34900CD2FDC /* ANAdAdapterInterstitialDFP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterInterstitialDFP.h; sourceTree = ""; }; + EC6AAED01885F34900CD2FDC /* ANAdAdapterInterstitialDFP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialDFP.m; sourceTree = ""; }; + EC7AB0871888813300C27B1E /* ANLogManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLogManager.h; sourceTree = ""; }; + ECF23E6D18452ACD00A94DE8 /* ANAdProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdProtocol.h; sourceTree = ""; }; + ECF23E6E18452ACD00A94DE8 /* ANAdView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdView.h; sourceTree = ""; }; + ECF23E6F18452ACD00A94DE8 /* ANBannerAdView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBannerAdView.h; sourceTree = ""; }; + ECF23E7018452ACD00A94DE8 /* ANCustomAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANCustomAdapter.h; sourceTree = ""; }; + ECF23E7118452ACD00A94DE8 /* ANInterstitialAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInterstitialAd.h; sourceTree = ""; }; + ECF23E7218452ACD00A94DE8 /* ANLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLocation.h; sourceTree = ""; }; + ECF23E7318452ACD00A94DE8 /* ANSDKResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = ANSDKResources.bundle; sourceTree = ""; }; + ECF23E7518452AE100A94DE8 /* libANSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libANSDK.a; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EC3E5DAD1843EB3E0070315E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ECF23E7618452AE100A94DE8 /* libANSDK.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 8A011F6A19882CDD00D192C4 /* GoogleAdMobSDK */ = { + isa = PBXGroup; + children = ( + 8A011F6B19882CDD00D192C4 /* Add-ons */, + 8A011F7E19882CDD00D192C4 /* GADAdMobExtras.h */, + 8A011F7F19882CDD00D192C4 /* GADAdNetworkExtras.h */, + 8A011F8019882CDD00D192C4 /* GADAdSize.h */, + 8A011F8119882CDD00D192C4 /* GADBannerView.h */, + 8A011F8219882CDD00D192C4 /* GADBannerViewDelegate.h */, + 8A011F8319882CDD00D192C4 /* GADInAppPurchase.h */, + 8A011F8419882CDD00D192C4 /* GADInAppPurchaseDelegate.h */, + 8A011F8519882CDD00D192C4 /* GADInterstitial.h */, + 8A011F8619882CDD00D192C4 /* GADInterstitialDelegate.h */, + 8A011F8719882CDD00D192C4 /* GADModules.h */, + 8A011F8819882CDD00D192C4 /* GADRequest.h */, + 8A011F8919882CDD00D192C4 /* GADRequestError.h */, + 8A011F8A19882CDD00D192C4 /* libGoogleAdMobAds.a */, + 8A011F8B19882CDD00D192C4 /* README.txt */, + ); + name = GoogleAdMobSDK; + path = ../../mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK; + sourceTree = ""; + }; + 8A011F6B19882CDD00D192C4 /* Add-ons */ = { + isa = PBXGroup; + children = ( + 8A011F6C19882CDD00D192C4 /* DoubleClick */, + 8A011F7419882CDD00D192C4 /* Mediation */, + 8A011F7B19882CDD00D192C4 /* Search */, + ); + path = "Add-ons"; + sourceTree = ""; + }; + 8A011F6C19882CDD00D192C4 /* DoubleClick */ = { + isa = PBXGroup; + children = ( + 8A011F6D19882CDD00D192C4 /* DFPBannerView.h */, + 8A011F6E19882CDD00D192C4 /* DFPExtras.h */, + 8A011F6F19882CDD00D192C4 /* DFPInterstitial.h */, + 8A011F7019882CDD00D192C4 /* DFPSwipeableBannerView.h */, + 8A011F7119882CDD00D192C4 /* GADAdSizeDelegate.h */, + 8A011F7219882CDD00D192C4 /* GADAppEventDelegate.h */, + 8A011F7319882CDD00D192C4 /* GADSwipeableBannerViewDelegate.h */, + ); + path = DoubleClick; + sourceTree = ""; + }; + 8A011F7419882CDD00D192C4 /* Mediation */ = { + isa = PBXGroup; + children = ( + 8A011F7519882CDD00D192C4 /* GADCustomEventBanner.h */, + 8A011F7619882CDD00D192C4 /* GADCustomEventBannerDelegate.h */, + 8A011F7719882CDD00D192C4 /* GADCustomEventExtras.h */, + 8A011F7819882CDD00D192C4 /* GADCustomEventInterstitial.h */, + 8A011F7919882CDD00D192C4 /* GADCustomEventInterstitialDelegate.h */, + 8A011F7A19882CDD00D192C4 /* GADCustomEventRequest.h */, + ); + path = Mediation; + sourceTree = ""; + }; + 8A011F7B19882CDD00D192C4 /* Search */ = { + isa = PBXGroup; + children = ( + 8A011F7C19882CDD00D192C4 /* GADSearchBannerView.h */, + 8A011F7D19882CDD00D192C4 /* GADSearchRequest.h */, + ); + path = Search; + sourceTree = ""; + }; + EC3E5DA71843EB3E0070315E = { + isa = PBXGroup; + children = ( + EC3E5DE11843ECF20070315E /* AdMob */, + ECF23E6C18452ACD00A94DE8 /* ANSDK */, + EC6AAECC1885F34900CD2FDC /* DFP */, + EC3E5DB21843EB3E0070315E /* Frameworks */, + EC3E5DE61843ECF20070315E /* iAd */, + EC3E5E061843ECF30070315E /* MillennialMedia */, + EC3E5DB11843EB3E0070315E /* Products */, + ); + sourceTree = ""; + }; + EC3E5DB11843EB3E0070315E /* Products */ = { + isa = PBXGroup; + children = ( + EC3E5DB01843EB3E0070315E /* libANSDKFull.a */, + ); + name = Products; + sourceTree = ""; + }; + EC3E5DB21843EB3E0070315E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8A011F6A19882CDD00D192C4 /* GoogleAdMobSDK */, + 8A98876819884CD400C5C8A9 /* MillennialMedia.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + EC3E5DE11843ECF20070315E /* AdMob */ = { + isa = PBXGroup; + children = ( + 8A9C610C19195928008CF74C /* ANBasicConfig.h */, + EC3E5DE21843ECF20070315E /* ANAdAdapterBannerAdMob.h */, + EC3E5DE31843ECF20070315E /* ANAdAdapterBannerAdMob.m */, + EC3E5DE41843ECF20070315E /* ANAdAdapterInterstitialAdMob.h */, + EC3E5DE51843ECF20070315E /* ANAdAdapterInterstitialAdMob.m */, + ); + name = AdMob; + path = ../../mediation/mediatedviews/GoogleAdMob; + sourceTree = ""; + }; + EC3E5DE61843ECF20070315E /* iAd */ = { + isa = PBXGroup; + children = ( + EC3E5DE71843ECF20070315E /* ANAdAdapterBanneriAd.h */, + EC3E5DE81843ECF20070315E /* ANAdAdapterBanneriAd.m */, + EC3E5DE91843ECF20070315E /* ANAdAdapterInterstitialiAd.h */, + EC3E5DEA1843ECF20070315E /* ANAdAdapterInterstitialiAd.m */, + ); + name = iAd; + path = ../../mediation/mediatedviews/iAd; + sourceTree = ""; + }; + EC3E5E061843ECF30070315E /* MillennialMedia */ = { + isa = PBXGroup; + children = ( + EC3E5E071843ECF30070315E /* ANAdAdapterBannerMillennialMedia.h */, + EC3E5E081843ECF30070315E /* ANAdAdapterBannerMillennialMedia.m */, + EC3E5E091843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.h */, + EC3E5E0A1843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.m */, + EC3E5E0B1843ECF30070315E /* ANAdAdapterMillennialMediaBase.h */, + EC3E5E0C1843ECF30070315E /* ANAdAdapterMillennialMediaBase.m */, + ); + name = MillennialMedia; + path = ../../mediation/mediatedviews/MillennialMedia; + sourceTree = ""; + }; + EC6AAECC1885F34900CD2FDC /* DFP */ = { + isa = PBXGroup; + children = ( + EC6AAECD1885F34900CD2FDC /* ANAdAdapterBannerDFP.h */, + EC6AAECE1885F34900CD2FDC /* ANAdAdapterBannerDFP.m */, + EC6AAECF1885F34900CD2FDC /* ANAdAdapterInterstitialDFP.h */, + EC6AAED01885F34900CD2FDC /* ANAdAdapterInterstitialDFP.m */, + ); + name = DFP; + path = ../../mediation/mediatedviews/GoogleAdMob; + sourceTree = ""; + }; + ECF23E6C18452ACD00A94DE8 /* ANSDK */ = { + isa = PBXGroup; + children = ( + ECF23E7518452AE100A94DE8 /* libANSDK.a */, + ECF23E6D18452ACD00A94DE8 /* ANAdProtocol.h */, + ECF23E6E18452ACD00A94DE8 /* ANAdView.h */, + ECF23E6F18452ACD00A94DE8 /* ANBannerAdView.h */, + ECF23E7018452ACD00A94DE8 /* ANCustomAdapter.h */, + ECF23E7118452ACD00A94DE8 /* ANInterstitialAd.h */, + ECF23E7218452ACD00A94DE8 /* ANLocation.h */, + EC7AB0871888813300C27B1E /* ANLogManager.h */, + EC3905FC1866947D0017959C /* ANTargetingParameters.h */, + ECF23E7318452ACD00A94DE8 /* ANSDKResources.bundle */, + ); + name = ANSDK; + path = out/ANSDK; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EC3E5DAF1843EB3E0070315E /* ANSDKFull */ = { + isa = PBXNativeTarget; + buildConfigurationList = EC3E5DD31843EB3E0070315E /* Build configuration list for PBXNativeTarget "ANSDKFull" */; + buildPhases = ( + EC3E5DAC1843EB3E0070315E /* Sources */, + EC3E5DAD1843EB3E0070315E /* Frameworks */, + EC3E5DAE1843EB3E0070315E /* Copy Files */, + EC8477B91844191500A8BC80 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ANSDKFull; + productName = ANSDK; + productReference = EC3E5DB01843EB3E0070315E /* libANSDKFull.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EC3E5DA81843EB3E0070315E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + ORGANIZATIONNAME = AppNexus; + }; + buildConfigurationList = EC3E5DAB1843EB3E0070315E /* Build configuration list for PBXProject "ANSDKFull" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = EC3E5DA71843EB3E0070315E; + productRefGroup = EC3E5DB11843EB3E0070315E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EC3E5DAF1843EB3E0070315E /* ANSDKFull */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EC8477B91844191500A8BC80 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A98874D198830FF00C5C8A9 /* libGoogleAdMobAds.a in Resources */, + 8A011F9219882CDD00D192C4 /* README.txt in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EC3E5DAC1843EB3E0070315E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC3E5E0D1843ECF30070315E /* ANAdAdapterBannerAdMob.m in Sources */, + EC3E5E0E1843ECF30070315E /* ANAdAdapterInterstitialAdMob.m in Sources */, + EC6AAED31885F52800CD2FDC /* ANAdAdapterBannerDFP.m in Sources */, + EC6AAED41885F52800CD2FDC /* ANAdAdapterInterstitialDFP.m in Sources */, + EC3E5E0F1843ECF30070315E /* ANAdAdapterBanneriAd.m in Sources */, + EC3E5E131843ECF30070315E /* ANAdAdapterBannerMillennialMedia.m in Sources */, + EC3E5E141843ECF30070315E /* ANAdAdapterInterstitialMillennialMedia.m in Sources */, + EC3E5E101843ECF30070315E /* ANAdAdapterInterstitialiAd.m in Sources */, + EC3E5E151843ECF30070315E /* ANAdAdapterMillennialMediaBase.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + EC3E5DD11843EB3E0070315E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + EC3E5DD21843EB3E0070315E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC3E5DD41843EB3E0070315E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/ANSDKFull.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/../../mediation/mediatedviews/MillennialMedia/MillennialMediaSDK", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/out/ANSDK", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = ANSDKFull; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + EC3E5DD51843EB3E0070315E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/ANSDKFull.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/../../mediation/mediatedviews/MillennialMedia/MillennialMediaSDK", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/out/ANSDK", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = ANSDKFull; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EC3E5DAB1843EB3E0070315E /* Build configuration list for PBXProject "ANSDKFull" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC3E5DD11843EB3E0070315E /* Debug */, + EC3E5DD21843EB3E0070315E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EC3E5DD31843EB3E0070315E /* Build configuration list for PBXNativeTarget "ANSDKFull" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC3E5DD41843EB3E0070315E /* Debug */, + EC3E5DD51843EB3E0070315E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EC3E5DA81843EB3E0070315E /* Project object */; +} diff --git a/BinaryProjects/old/ANSDKFull.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/BinaryProjects/old/ANSDKFull.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100755 index 000000000..5ee86d4a6 --- /dev/null +++ b/BinaryProjects/old/ANSDKFull.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/BinaryProjects/old/ANSDKFull.xcodeproj/xcshareddata/xcschemes/ANSDKFull.xcscheme b/BinaryProjects/old/ANSDKFull.xcodeproj/xcshareddata/xcschemes/ANSDKFull.xcscheme new file mode 100755 index 000000000..d381964b3 --- /dev/null +++ b/BinaryProjects/old/ANSDKFull.xcodeproj/xcshareddata/xcschemes/ANSDKFull.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BinaryProjects/old/buildsdk.sh b/BinaryProjects/old/buildsdk.sh new file mode 100755 index 000000000..60da2c185 --- /dev/null +++ b/BinaryProjects/old/buildsdk.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# +# Simple script to built the AppNexus Advertising SDK binary packages +# +OUTDIR=`pwd`/out +OUTDIR_DEVICE=`pwd`/out_device +OUTDIR_SIMULATOR=`pwd`/out_simulator +LOGDIR=$OUTDIR/log +BUILDDIR=$OUTDIR/build + +rm -fr $OUTDIR > /dev/null 2>&1 +rm -fr $OUTDIR_DEVICE > /dev/null 2>&1 +rm -fr $OUTDIR_SIMULATOR > /dev/null 2>&1 +mkdir -p $LOGDIR + +### device + +echo "Started building of AN SDK" +LOGFILE=$LOGDIR/ANSDK.log +xcodebuild -project '../ANSDK.xcodeproj/' -scheme 'ANSDK' -configuration 'Release' -sdk iphoneos7.1 CONFIGURATION_BUILD_DIR=$OUTDIR SYMROOT=$BUILDDIR OBJROOT=$BUILDDIR > $LOGFILE 2>&1 || { echo "Error in build check log $LOGFILE"; exit;} +mv $OUTDIR/libANSDK.a $OUTDIR/ANSDK/libANSDK.a + +echo "Started building of Full AN SDK" +LOGFILE=$LOGDIR/ANSDKFull.log +xcodebuild -project 'ANSDKFull.xcodeproj/' -scheme 'ANSDKFull' -configuration 'Release' -sdk iphoneos7.1 CONFIGURATION_BUILD_DIR=$OUTDIR > $LOGFILE 2>&1 || { echo "Error in build check log $LOGFILE"; exit;} +mv $OUTDIR/libANSDKFull.a $OUTDIR/ANSDKFull/libANSDKFull.a + +rm -rf $OUTDIR/Intermediates +rm -rf $BUILDDIR + +mv $OUTDIR $OUTDIR_DEVICE + +### simulator + +mkdir -p $LOGDIR + +echo "Started building of AN SDK" +LOGFILE=$LOGDIR/ANSDK.log +xcodebuild -project '../ANSDK.xcodeproj/' -scheme 'ANSDK' -configuration 'Release' -sdk "iphonesimulator" CONFIGURATION_BUILD_DIR=$OUTDIR SYMROOT=$BUILDDIR OBJROOT=$BUILDDIR > $LOGFILE 2>&1 || { echo "Error in build check log $LOGFILE"; exit;} +mv $OUTDIR/libANSDK.a $OUTDIR/ANSDK/libANSDK.a + +echo "Started building of Full AN SDK" +LOGFILE=$LOGDIR/ANSDKFull.log +xcodebuild -project 'ANSDKFull.xcodeproj/' -scheme 'ANSDKFull' -configuration 'Release' -sdk "iphonesimulator" CONFIGURATION_BUILD_DIR=$OUTDIR > $LOGFILE 2>&1 || { echo "Error in build check log $LOGFILE"; exit;} +mv $OUTDIR/libANSDKFull.a $OUTDIR/ANSDKFull/libANSDKFull.a + +rm -rf $OUTDIR/Intermediates +rm -rf $BUILDDIR + +mv $OUTDIR $OUTDIR_SIMULATOR + +### combine + +mkdir -p $OUTDIR/ANSDK +mkdir -p $OUTDIR/ANSDKFull + +echo "Combining architectures into one" +lipo -create $OUTDIR_DEVICE/ANSDK/libANSDK.a $OUTDIR_SIMULATOR/ANSDK/libANSDK.a -output $OUTDIR/ANSDK/libANSDK.a +lipo -create $OUTDIR_DEVICE/ANSDKFull/libANSDKFull.a $OUTDIR_SIMULATOR/ANSDKFull/libANSDKFull.a -output $OUTDIR/ANSDKFull/libANSDKFull.a + +rm -rf $OUTDIR_DEVICE/ANSDK/libANSDK.a +rm -rf $OUTDIR_DEVICE/ANSDKFull/libANSDKFull.a + +echo "Copy header and resource files" +cp -a $OUTDIR_DEVICE/ANSDK $OUTDIR +cp -a $OUTDIR_DEVICE/ANSDKFull $OUTDIR + +rm -fr $OUTDIR_DEVICE > /dev/null 2>&1 +rm -fr $OUTDIR_SIMULATOR > /dev/null 2>&1 + +cd $OUTDIR + +echo "Zipping up Full AN SDK" +zip -r ANSDKFull.zip ANSDKFull \ No newline at end of file diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdImage.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdImage.h new file mode 100644 index 000000000..1f3363410 --- /dev/null +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdImage.h @@ -0,0 +1,65 @@ +/* + * Copyright 2010-present Facebook. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*! + @class FBAdStarRating + + @abstract + Represents the Facebook ad star rating, which contains the rating value and rating scale. + */ +extern const struct FBAdStarRating { + float value; + int scale; +} FBAdStarRating; + +/*! + @class FBAdImage + + @abstract Represents an image creative. + */ +@interface FBAdImage : NSObject + +/*! + @property + @abstract Typed access to the image url. + */ +@property (nonatomic, copy, readonly) NSURL *url; +/*! + @property + @abstract Typed access to the image width. + */ +@property (nonatomic, assign, readonly) int width; +/*! + @property + @abstract Typed access to the image height. + */ +@property (nonatomic, assign, readonly) int height; + +/*! + @method + + @abstract + This is a method to initialize an FBAdImage. + + @param url the image url. + @param width the image width. + @param height the image height. + */ +- (id)initWithURL:(NSURL *)url width:(int)width height:(int)height; + +@end + + diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdSettings.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdSettings.h new file mode 100644 index 000000000..33eb9efb6 --- /dev/null +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdSettings.h @@ -0,0 +1,84 @@ +/* + * Copyright 2010-present Facebook. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#import + +extern NSString *const FacebookAdsSDKErrorDomain; + +/*! + @class FBAdSettings + + @abstract AdSettings contains global settings for all ad controls. + */ +@interface FBAdSettings : NSObject + +/*! +@method + +@abstract + Adds a test device. + +@param deviceHash The id of the device to use test mode, can be obtained from debug log + +@discussion + Copy the current device Id from debug log and add it as a test device to get test ads. Apps + running on emulator will automatically get test ads. Test devices should be added before loadAd is called. +*/ ++ (void)addTestDevice:(NSString *)deviceHash; + +/*! + @method + + @abstract + Add a collection of test devices. See `+addTestDevices:` for details. + + @param deviceHash The array of the device id to use test mode, can be obtained from debug log + */ ++ (void)addTestDevices:(NSArray *)devicesHash; + +/*! + @method + + @abstract + Clear all the added test devices + */ ++ (void)clearTestDevices; + +/*! + @method + + @abstract + Configures the ad control for treatment as child-directed. + + @param isChildDirected Indicates whether you would like your ad control to be treated as child-directed + + @discussion + 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; + +/*! + @method + + @abstract + Sets the url prefix to use when making ad requests. + + @discussion + This method should never be used in production. + */ ++ (void)setUrlPrefix:(NSString *) urlPrefix; + +@end diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdView.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdView.h new file mode 100644 index 000000000..70926635c --- /dev/null +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAdView.h @@ -0,0 +1,145 @@ +/* + * Copyright 2010-present Facebook. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import + +@protocol FBAdViewDelegate; + +/*! + @typedef FBAdSize + + @abstract + Represents the ad size. + */ +typedef struct FBAdSize { + CGSize size; +} FBAdSize; + +/*! + @abstract Represents the banner ad size. + */ +extern FBAdSize const kFBAdSize320x50; + +/*! + @abstract Represents the interstitial ad size. + */ +extern FBAdSize const kFBAdSizeInterstital; + +/*! + @class FBAdView + + @abstract A customized UIView to represent a Facebook ad (a.k.a. banner ad). + */ +@interface FBAdView : UIView + +/*! + @method + + @abstract + This is a method to initialize an FBAdView matching the given placement id. + + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. + @param adSize The size of the ad; for example, kFBAdSize320x50. + @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:(UIViewController *)viewController; + +/*! + @method + + @abstract + Begins loading the FBAdView content. + + @discussion You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods + of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. + */ +- (void)loadAd; + +/*! + @property + @abstract Typed access to the id of the ad placement. + */ +@property (nonatomic, copy, readonly) NSString *placementID; +/*! + @property + @abstract Typed access to the app's root view controller. + */ +@property (nonatomic, weak, readonly) UIViewController *rootViewController; +/*! + @property + @abstract the delegate + */ +@property (nonatomic, weak) id delegate; + +@end + +/*! + @protocol + + @abstract + The methods declared by the FBAdViewDelegate protocol allow the adopting delegate to respond + to messages from the FBAdView class and thus respond to operations such as whether the ad has + been loaded, the person has clicked the ad. + */ +@protocol FBAdViewDelegate + +@optional + +/*! + @method + + @abstract + Sent after an ad has been clicked by the person. + + @param adView An FBAdView object sending the message. + */ +- (void)adViewDidClick:(FBAdView *)adView; +/*! + @method + + @abstract + When an ad is clicked, the modal view will be presented. And when the user finishes the + interaction with the modal view and dismiss it, this message will be sent, returning control + to the application. + + @param adView An FBAdView object sending the message. + */ +- (void)adViewDidFinishHandlingClick:(FBAdView *)adView; +/*! + @method + + @abstract + Sent when an ad has been successfully loaded. + + @param adView An FBAdView object sending the message. + */ +- (void)adViewDidLoad:(FBAdView *)adView; +/*! + @method + + @abstract + Sent after an FBAdView fails to load the ad. + + @param adView An FBAdView object sending the message. + @param error An error object containing details of the error. + */ +- (void)adView:(FBAdView *)adView didFailWithError:(NSError *)error; + +@end + diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAudienceNetwork.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAudienceNetwork.h new file mode 100644 index 000000000..6584b241d --- /dev/null +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBAudienceNetwork.h @@ -0,0 +1,23 @@ +/* + * Copyright 2010-present Facebook. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FBAdSettings.h" +#import "FBAdView.h" +#import "FBInterstitialAd.h" +#import "FBNativeAd.h" +#import "FBAdImage.h" + +#define FB_AD_SDK_VERSION @"3.15.1" diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBInterstitialAd.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBInterstitialAd.h new file mode 100644 index 000000000..3677eb684 --- /dev/null +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBInterstitialAd.h @@ -0,0 +1,148 @@ +/* + * Copyright 2010-present Facebook. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import + +#import "FBAdView.h" + +@protocol FBInterstitialAdDelegate; + +/*! + @class FBInterstitialAd + + @abstract A modal view controller to represent a Facebook interstitial ad. This + is a full-screen ad shown in your application. + + */ +@interface FBInterstitialAd : UIViewController + +/*! + @property + @abstract Typed access to the id of the ad placement. + */ +@property (nonatomic, copy, readonly) NSString *placementID; +/*! + @property + @abstract the delegate + */ +@property (nonatomic, weak) id delegate; + +/*! + @method + + @abstract + This is a method to initialize an FBInterstitialAd matching the given placement id. + + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. + */ +- (instancetype)initWithPlacementID:(NSString *)placementID; +/*! + @method + + @abstract + Returns true if the interstitial ad has been successfully loaded. + + @discussion You should check `isAdValid` before trying to show the ad. + */ +- (BOOL)isAdValid; +/*! + @method + + @abstract + Begins loading the FBInterstitialAd content. + + @discussion You can implement `interstitialAdDidLoad:` and `interstitialAd:didFailWithError:` methods + of `FBInterstitialAdDelegate` if you would like to be notified as loading succeeds or fails. + */ +- (void)loadAd; +/*! + @method + + @abstract + Presents the interstitial ad modally from the specified view controller. + + @param rootViewController The view controller that will be used to present the interstitial ad. + + @discussion You can implement `interstitialAdDidClick:`, `interstitialAdWillClose:` and `interstitialAdWillClose` + methods of `FBInterstitialAdDelegate` if you would like to stay informed for thoses events + */ +- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController; + +@end + +/*! + @protocol + + @abstract + The methods declared by the FBInterstitialAdDelegate protocol allow the adopting delegate to respond + to messages from the FBInterstitialAd class and thus respond to operations such as whether the + interstitial ad has been loaded, user has clicked or closed the interstitial. + */ +@protocol FBInterstitialAdDelegate + +@optional + +/*! + @method + + @abstract + Sent after an ad in the FBInterstitialAd object is clicked. The appropriate app store view or + app browser will be launched. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ +- (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent after an FBInterstitialAd object has been dismissed from the screen, returning control + to your application. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ +- (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent immediately before an FBInterstitialAd object will be dismissed from the screen. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ +- (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent when an FBInterstitialAd successfully loads an ad. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ +- (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent when an FBInterstitialAd failes to load an ad. + + @param interstitialAd An FBInterstitialAd object sending the message. + @param error An error object containing details of the error. + */ +- (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error; + +@end diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBNativeAd.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBNativeAd.h new file mode 100644 index 000000000..1ee5bb557 --- /dev/null +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/DeprecatedHeaders/FBNativeAd.h @@ -0,0 +1,212 @@ +/* + * Copyright 2010-present Facebook. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "FBAdImage.h" +#import "FBAdView.h" + +@class FBAdRequest; +@protocol FBNativeAdDelegate; + +/*! + @class FBNativeAd + + @abstract + The FBNativeAd represents ad metadata to allow you to construct custom ad views. + See the NativeAdSample in the sample apps section of the Audience Network framework. + */ +@class FBNativeAd; + +/*! + @typedef FBNativeAdCompletionHandler + + @abstract + The completion handler invoked when the ad is clicked. + */ +typedef void (^FBNativeAdCompletionHandler)(FBNativeAd *nativeAd); + +@interface FBNativeAd : NSObject + +/*! + @property + @abstract Typed access to the id of the ad placement. + */ +@property (nonatomic, copy, readonly) NSString *placementID; +/*! + @property + @abstract Typed access to the ad star rating. See `FBAdStarRating` for details. + */ +@property (nonatomic, assign, readonly) struct FBAdStarRating starRating; +/*! + @property + @abstract Typed access to the ad title. + */ +@property (nonatomic, copy, readonly) NSString *title; +/*! + @property + @abstract Typed access to the ad social context, for example "Over half a million users". + */ +@property (nonatomic, copy, readonly) NSString *socialContext; +/*! + @property + @abstract Typed access to the call to action phrase of the ad, for example "Install Now". + */ +@property (nonatomic, copy, readonly) NSString *callToAction; +/*! + @property + @abstract Typed access to the ad icon. See `FBAdImage` for details. + */ +@property (nonatomic, strong, readonly) FBAdImage *icon; +/*! + @property + @abstract Typed access to the ad cover image creative. See `FBAdImage` for details. + */ +@property (nonatomic, strong, readonly) FBAdImage *coverImage; +/*! + @property + @abstract Typed access to the body text, usually a longer description of the ad. + */ +@property (nonatomic, copy, readonly) NSString *body; +/*! + @property + @abstract the delegate + */ +@property (nonatomic, weak) id delegate; + +/* initialize an instance of FBNative Ad with a placement ID and a view controller */ +/*! + @method + + @abstract + This is a method to initialize a FBNativeAd object matching the given placement id. + + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. + */ +- (instancetype)initWithPlacementID:(NSString *)placementID; + +/*! + @method + + @abstract + 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 viewController The UIViewController that will be used to present SKStoreProductViewController + (iTunes Store product information). + + @discussion The whole area of the UIView will be clickable. + */ +- (void)registerViewForInteraction:(UIView *)view + withViewController:(UIViewController *)viewController; + +/*! + @method + + @abstract + 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 viewController The UIViewController that will be used to present SKStoreProductViewController + (iTunes Store product information). + @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 + withViewController:(UIViewController *)viewController + withClickableViews:(NSArray *)clickableViews; + +/*! + @method + + @abstract + This is a method to disconnect a FBNativeAd with the UIView you used to display the native ads. + */ +- (void)unregisterView; + +/*! + @method + + @abstract + Begins loading the FBNativeAd content. + + @discussion You can implement `nativeAdDidLoad:` and `nativeAd:didFailWithError:` methods + of `FBNativeAdDelegate` if you would like to be notified as loading succeeds or fails. + */ +- (void)loadAd; + +/*! + @method + + @abstract + 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 + */ +- (BOOL)isAdValid; + +@end + +/*! + @protocol + + @abstract + 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 + +/*! + @method + + @abstract + Sent when an FBNativeAd has been successfully loaded. + + @param nativeAd An FBNativeAd object sending the message. + */ +- (void)nativeAdDidLoad:(FBNativeAd *)nativeAd; +/*! + @method + + @abstract + 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; + +/*! + @method + + @abstract + Sent after an ad has been clicked by the person. + + @param nativeAd An FBNativeAd object sending the message. + */ +- (void)nativeAdDidClick:(FBNativeAd *)nativeAd; +/*! + @method + + @abstract + 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 + diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/FBAudienceNetwork b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/FBAudienceNetwork index 237b66d0f..e6fa2229a 100644 Binary files a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/FBAudienceNetwork and b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/FBAudienceNetwork differ diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdImage.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdImage.h index f876cf3f1..1f3363410 100644 --- a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdImage.h +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdImage.h @@ -14,17 +14,50 @@ * limitations under the License. */ +/*! + @class FBAdStarRating + + @abstract + Represents the Facebook ad star rating, which contains the rating value and rating scale. + */ extern const struct FBAdStarRating { float value; int scale; } FBAdStarRating; +/*! + @class FBAdImage + + @abstract Represents an image creative. + */ @interface FBAdImage : NSObject +/*! + @property + @abstract Typed access to the image url. + */ @property (nonatomic, copy, readonly) NSURL *url; +/*! + @property + @abstract Typed access to the image width. + */ @property (nonatomic, assign, readonly) int width; +/*! + @property + @abstract Typed access to the image height. + */ @property (nonatomic, assign, readonly) int height; +/*! + @method + + @abstract + This is a method to initialize an FBAdImage. + + @param url the image url. + @param width the image width. + @param height the image height. + */ - (id)initWithURL:(NSURL *)url width:(int)width height:(int)height; @end diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdSettings.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdSettings.h index 09b44b2ab..33eb9efb6 100644 --- a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdSettings.h +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdSettings.h @@ -17,30 +17,67 @@ extern NSString *const FacebookAdsSDKErrorDomain; -@interface FBAdSettings : NSObject +/*! + @class FBAdSettings -/** - * Add a test device to server ad in test mode only + @abstract AdSettings contains global settings for all ad controls. */ +@interface FBAdSettings : NSObject + +/*! +@method + +@abstract + Adds a test device. + +@param deviceHash The id of the device to use test mode, can be obtained from debug log + +@discussion + Copy the current device Id from debug log and add it as a test device to get test ads. Apps + running on emulator will automatically get test ads. Test devices should be added before loadAd is called. +*/ + (void)addTestDevice:(NSString *)deviceHash; -/** - * Add a collection test device to server ad in test mode only +/*! + @method + + @abstract + Add a collection of test devices. See `+addTestDevices:` for details. + + @param deviceHash The array of the device id to use test mode, can be obtained from debug log */ + (void)addTestDevices:(NSArray *)devicesHash; -/** - * Clear all the added test devices +/*! + @method + + @abstract + Clear all the added test devices */ + (void)clearTestDevices; -/** - * Set whether the ad control is targeting a child. +/*! + @method + + @abstract + Configures the ad control for treatment as child-directed. + + @param isChildDirected Indicates whether you would like your ad control to be treated as child-directed + + @discussion + 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; -/** - * Sets the url prefix to use when making requests. This method should never be used in production. +/*! + @method + + @abstract + Sets the url prefix to use when making ad requests. + + @discussion + This method should never be used in production. */ + (void)setUrlPrefix:(NSString *) urlPrefix; diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdView.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdView.h index 3b5b2991b..70926635c 100644 --- a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdView.h +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAdView.h @@ -19,37 +19,126 @@ @protocol FBAdViewDelegate; -// Ad Sizes +/*! + @typedef FBAdSize + + @abstract + Represents the ad size. + */ typedef struct FBAdSize { CGSize size; } FBAdSize; -// 320x50 +/*! + @abstract Represents the banner ad size. + */ extern FBAdSize const kFBAdSize320x50; -// Interstital +/*! + @abstract Represents the interstitial ad size. + */ extern FBAdSize const kFBAdSizeInterstital; +/*! + @class FBAdView + + @abstract A customized UIView to represent a Facebook ad (a.k.a. banner ad). + */ @interface FBAdView : UIView +/*! + @method + + @abstract + This is a method to initialize an FBAdView matching the given placement id. + + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. + @param adSize The size of the ad; for example, kFBAdSize320x50. + @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:(UIViewController *)viewController; +/*! + @method + + @abstract + Begins loading the FBAdView content. + + @discussion You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods + of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. + */ - (void)loadAd; +/*! + @property + @abstract Typed access to the id of the ad placement. + */ @property (nonatomic, copy, readonly) NSString *placementID; +/*! + @property + @abstract Typed access to the app's root view controller. + */ @property (nonatomic, weak, readonly) UIViewController *rootViewController; +/*! + @property + @abstract the delegate + */ @property (nonatomic, weak) id delegate; @end +/*! + @protocol + + @abstract + The methods declared by the FBAdViewDelegate protocol allow the adopting delegate to respond + to messages from the FBAdView class and thus respond to operations such as whether the ad has + been loaded, the person has clicked the ad. + */ @protocol FBAdViewDelegate @optional +/*! + @method + + @abstract + Sent after an ad has been clicked by the person. + + @param adView An FBAdView object sending the message. + */ - (void)adViewDidClick:(FBAdView *)adView; +/*! + @method + + @abstract + When an ad is clicked, the modal view will be presented. And when the user finishes the + interaction with the modal view and dismiss it, this message will be sent, returning control + to the application. + + @param adView An FBAdView object sending the message. + */ +- (void)adViewDidFinishHandlingClick:(FBAdView *)adView; +/*! + @method + + @abstract + Sent when an ad has been successfully loaded. + + @param adView An FBAdView object sending the message. + */ - (void)adViewDidLoad:(FBAdView *)adView; +/*! + @method + + @abstract + Sent after an FBAdView fails to load the ad. + + @param adView An FBAdView object sending the message. + @param error An error object containing details of the error. + */ - (void)adView:(FBAdView *)adView didFailWithError:(NSError *)error; @end diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAudienceNetwork.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAudienceNetwork.h index 56416da5f..6584b241d 100644 --- a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAudienceNetwork.h +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBAudienceNetwork.h @@ -20,4 +20,4 @@ #import "FBNativeAd.h" #import "FBAdImage.h" -#define FB_AD_SDK_VERSION @"3.14.1" +#define FB_AD_SDK_VERSION @"3.15.1" diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBInterstitialAd.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBInterstitialAd.h index f7aa85826..3677eb684 100644 --- a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBInterstitialAd.h +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBInterstitialAd.h @@ -21,30 +21,128 @@ @protocol FBInterstitialAdDelegate; -/* A modal view controller to represent an Facebook Interstitial ad view */ +/*! + @class FBInterstitialAd + + @abstract A modal view controller to represent a Facebook interstitial ad. This + is a full-screen ad shown in your application. + + */ @interface FBInterstitialAd : UIViewController +/*! + @property + @abstract Typed access to the id of the ad placement. + */ @property (nonatomic, copy, readonly) NSString *placementID; +/*! + @property + @abstract the delegate + */ @property (nonatomic, weak) id delegate; +/*! + @method + + @abstract + This is a method to initialize an FBInterstitialAd matching the given placement id. + + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. + */ - (instancetype)initWithPlacementID:(NSString *)placementID; +/*! + @method + + @abstract + Returns true if the interstitial ad has been successfully loaded. + + @discussion You should check `isAdValid` before trying to show the ad. + */ - (BOOL)isAdValid; +/*! + @method + + @abstract + Begins loading the FBInterstitialAd content. + + @discussion You can implement `interstitialAdDidLoad:` and `interstitialAd:didFailWithError:` methods + of `FBInterstitialAdDelegate` if you would like to be notified as loading succeeds or fails. + */ - (void)loadAd; +/*! + @method + + @abstract + Presents the interstitial ad modally from the specified view controller. + + @param rootViewController The view controller that will be used to present the interstitial ad. + + @discussion You can implement `interstitialAdDidClick:`, `interstitialAdWillClose:` and `interstitialAdWillClose` + methods of `FBInterstitialAdDelegate` if you would like to stay informed for thoses events + */ - (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController; @end -/* The methods declared by the FBInterstitialAdDelegate protocol allow the adopting delegate to respond - to messages from the FBInterstitialAd class and thus respond to operations such - as whether the interstitial has loaded, user has clicked or closed the interstitial. */ +/*! + @protocol + + @abstract + The methods declared by the FBInterstitialAdDelegate protocol allow the adopting delegate to respond + to messages from the FBInterstitialAd class and thus respond to operations such as whether the + interstitial ad has been loaded, user has clicked or closed the interstitial. + */ @protocol FBInterstitialAdDelegate @optional +/*! + @method + + @abstract + Sent after an ad in the FBInterstitialAd object is clicked. The appropriate app store view or + app browser will be launched. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ - (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent after an FBInterstitialAd object has been dismissed from the screen, returning control + to your application. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ - (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent immediately before an FBInterstitialAd object will be dismissed from the screen. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ - (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent when an FBInterstitialAd successfully loads an ad. + + @param interstitialAd An FBInterstitialAd object sending the message. + */ - (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd; +/*! + @method + + @abstract + Sent when an FBInterstitialAd failes to load an ad. + + @param interstitialAd An FBInterstitialAd object sending the message. + @param error An error object containing details of the error. + */ - (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error; @end diff --git a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBNativeAd.h b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBNativeAd.h index 9b0ba665c..1ee5bb557 100644 --- a/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBNativeAd.h +++ b/mediation/mediatedviews/Facebook/FBAudienceNetwork.framework/Versions/A/Headers/FBNativeAd.h @@ -20,49 +20,193 @@ @class FBAdRequest; @protocol FBNativeAdDelegate; -/* The class represents a native FB Ad. Raw metadata of ad is returned */ +/*! + @class FBNativeAd + + @abstract + The FBNativeAd represents ad metadata to allow you to construct custom ad views. + See the NativeAdSample in the sample apps section of the Audience Network framework. + */ @class FBNativeAd; +/*! + @typedef FBNativeAdCompletionHandler + + @abstract + The completion handler invoked when the ad is clicked. + */ typedef void (^FBNativeAdCompletionHandler)(FBNativeAd *nativeAd); @interface FBNativeAd : NSObject +/*! + @property + @abstract Typed access to the id of the ad placement. + */ @property (nonatomic, copy, readonly) NSString *placementID; +/*! + @property + @abstract Typed access to the ad star rating. See `FBAdStarRating` for details. + */ @property (nonatomic, assign, readonly) struct FBAdStarRating starRating; +/*! + @property + @abstract Typed access to the ad title. + */ @property (nonatomic, copy, readonly) NSString *title; +/*! + @property + @abstract Typed access to the ad social context, for example "Over half a million users". + */ @property (nonatomic, copy, readonly) NSString *socialContext; +/*! + @property + @abstract Typed access to the call to action phrase of the ad, for example "Install Now". + */ @property (nonatomic, copy, readonly) NSString *callToAction; +/*! + @property + @abstract Typed access to the ad icon. See `FBAdImage` for details. + */ @property (nonatomic, strong, readonly) FBAdImage *icon; +/*! + @property + @abstract Typed access to the ad cover image creative. See `FBAdImage` for details. + */ @property (nonatomic, strong, readonly) FBAdImage *coverImage; +/*! + @property + @abstract Typed access to the body text, usually a longer description of the ad. + */ @property (nonatomic, copy, readonly) NSString *body; +/*! + @property + @abstract the delegate + */ @property (nonatomic, weak) id delegate; /* initialize an instance of FBNative Ad with a placement ID and a view controller */ +/*! + @method + + @abstract + This is a method to initialize a FBNativeAd object matching the given placement id. + + @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. + */ - (instancetype)initWithPlacementID:(NSString *)placementID; -/* Call loadAd and sign up for a delegate determine whether it succeed or fails */ -- (void)loadAd; +/*! + @method + + @abstract + 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 viewController The UIViewController that will be used to present SKStoreProductViewController + (iTunes Store product information). + + @discussion The whole area of the UIView will be clickable. + */ +- (void)registerViewForInteraction:(UIView *)view + withViewController:(UIViewController *)viewController; + +/*! + @method + + @abstract + 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 viewController The UIViewController that will be used to present SKStoreProductViewController + (iTunes Store product information). + @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 + withViewController:(UIViewController *)viewController + withClickableViews:(NSArray *)clickableViews; + +/*! + @method + + @abstract + This is a method to disconnect a FBNativeAd with the UIView you used to display the native ads. + */ +- (void)unregisterView; + +/*! + @method + + @abstract + Begins loading the FBNativeAd content. -/* call handleClick when a user click on the ad to launch the appropriate app store view or in app browser. You can supply an optional callback */ -- (void)handleClickWithViewController:(UIViewController *)viewController - callback:(FBNativeAdCompletionHandler)completionHandler; + @discussion You can implement `nativeAdDidLoad:` and `nativeAd:didFailWithError:` methods + of `FBNativeAdDelegate` if you would like to be notified as loading succeeds or fails. + */ +- (void)loadAd; -/* Call logImpression whenever a native ad is made visible to the user */ -- (void)logImpression; +/*! + @method -/* 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 */ + @abstract + 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 + */ - (BOOL)isAdValid; @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 loaded or user has clicked */ +/*! + @protocol + + @abstract + 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 +/*! + @method + + @abstract + Sent when an FBNativeAd has been successfully loaded. + + @param nativeAd An FBNativeAd object sending the message. + */ - (void)nativeAdDidLoad:(FBNativeAd *)nativeAd; +/*! + @method + + @abstract + 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; +/*! + @method + + @abstract + Sent after an ad has been clicked by the person. + + @param nativeAd An FBNativeAd object sending the message. + */ +- (void)nativeAdDidClick:(FBNativeAd *)nativeAd; +/*! + @method + + @abstract + 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 diff --git a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/DoubleClick/DFPSwipeableBannerView.h b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/DoubleClick/DFPSwipeableBannerView.h index f1f7b7ebd..571ca2e0f 100644 --- a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/DoubleClick/DFPSwipeableBannerView.h +++ b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/DoubleClick/DFPSwipeableBannerView.h @@ -7,12 +7,12 @@ #import "DFPBannerView.h" -@protocol GADSwipeableBannerViewDelegate; - -@interface DFPSwipeableBannerView : DFPBannerView +/// Deprecated swipeable banner view. Use DFPBannerView. +__attribute__((deprecated("Use DFPBannerView."))) +@interface DFPSwipeableBannerView : DFPBannerView /// Set a delegate to be notified when the user activates and deactivates an ad. Remember to nil out /// the delegate before releasing this banner. -@property(nonatomic, weak) id swipeDelegate; +@property(nonatomic, weak) id swipeDelegate __attribute__((deprecated("Use DFPBannerView."))); @end diff --git a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/Mediation/GADCustomEventBannerDelegate.h b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/Mediation/GADCustomEventBannerDelegate.h index 6781fdca5..fef463fd8 100644 --- a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/Mediation/GADCustomEventBannerDelegate.h +++ b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/Add-ons/Mediation/GADCustomEventBannerDelegate.h @@ -25,7 +25,7 @@ - (void)customEventBanner:(id)customEvent didFailAd:(NSError *)error; /// Your Custom Event object should call this when the user touches or "clicks" the ad to initiate -/// an action. When the SDK receives this callback, it reports the click back to the Mediation +/// an action. When the SDK receives this callback, it reports the click back to the mediation /// server. This callback is optional. - (void)customEventBanner:(id)customEvent clickDidOccurInAd:(UIView *)view; diff --git a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADBannerView.h b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADBannerView.h index 8b3286780..2a94fe2bf 100644 --- a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADBannerView.h +++ b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADBannerView.h @@ -36,14 +36,12 @@ #pragma mark Initialization /// Initializes a GADBannerView and sets it to the specified size, and specifies its placement -/// within its superview bounds. If |size| is invalid, an instance of GADBannerView is not created -/// and nil is returned instead. -- (id)initWithAdSize:(GADAdSize)size origin:(CGPoint)origin; +/// within its superview bounds. Returns nil if |adSize| is an invalid ad size. +- (instancetype)initWithAdSize:(GADAdSize)adSize origin:(CGPoint)origin; /// Initializes a GADBannerView and sets it to the specified size, and specifies its placement at -/// the top left of its superview. If |size| is invalid, an instance of GADBannerView is not created -/// and nil is returned instead. -- (id)initWithAdSize:(GADAdSize)size; +/// the top left of its superview. Returns nil if |adSize| is an invalid ad size. +- (instancetype)initWithAdSize:(GADAdSize)adSize; #pragma mark Pre-Request diff --git a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADInAppPurchase.h b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADInAppPurchase.h index 63651add6..91ca8559b 100644 --- a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADInAppPurchase.h +++ b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADInAppPurchase.h @@ -6,6 +6,7 @@ // #import +#import #import "GADModules.h" diff --git a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADRequest.h b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADRequest.h index 1edb04ad8..abc08497b 100644 --- a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADRequest.h +++ b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/GADRequest.h @@ -12,7 +12,7 @@ @protocol GADAdNetworkExtras; -/// Constant for getting test ads on the simulator using the testDevices method. +/// Add this constant to the testDevices property's array to receive test ads on the simulator. #define GAD_SIMULATOR_ID @"Simulator" /// Genders to help deliver more relevant ads. @@ -38,14 +38,14 @@ typedef NS_ENUM(NSInteger, GADGender) { /// registered before, the previous extras will be overwritten. - (void)registerAdNetworkExtras:(id)extras; -/// Get the network extras defined for an ad network. +/// Returns the network extras defined for an ad network. - (id)adNetworkExtrasFor:(Class)aClass; -/// Unsets the extras for an ad network. |clazz| is the class which represents that network's extras -/// type. +/// Removes the extras for an ad network. |aClass| is the class which represents that network's +/// extras type. - (void)removeAdNetworkExtrasFor:(Class)aClass; -/// Extras sent to the mediation server (if using Mediation). For future use. +/// Extras sent to the mediation server if using mediation. For future use. @property(nonatomic, copy) NSDictionary *mediationExtras; #pragma mark Collecting SDK Information @@ -55,7 +55,7 @@ typedef NS_ENUM(NSInteger, GADGender) { #pragma mark Testing -/// Add the device's identifier into this array for testing purposes. +/// Test ads will be returned for devices with device IDs specified in this array. @property(nonatomic, copy) NSArray *testDevices; #pragma mark User Information diff --git a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/libGoogleAdMobAds.a b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/libGoogleAdMobAds.a index 40690baf2..0f61d4381 100644 Binary files a/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/libGoogleAdMobAds.a and b/mediation/mediatedviews/GoogleAdMob/GoogleAdMobSDK/libGoogleAdMobAds.a differ diff --git a/mediation/mediatedviews/GoogleAdMob/README.txt b/mediation/mediatedviews/GoogleAdMob/README.txt index 201290a90..cf9a08577 100644 --- a/mediation/mediatedviews/GoogleAdMob/README.txt +++ b/mediation/mediatedviews/GoogleAdMob/README.txt @@ -1,3 +1,3 @@ -Update 6/13/14 -AdMob SDK Version 6.9.3 +Update 7/24/14 +AdMob SDK Version 6.10.0 diff --git a/mediation/mediatedviews/inMobi/Libs/IMBanner.h b/mediation/mediatedviews/inMobi/Libs/IMBanner.h new file mode 100644 index 000000000..b81584e34 --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMBanner.h @@ -0,0 +1,160 @@ +// +// IMBanner.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import +#import +#import "InMobi.h" +#import "IMBannerDelegate.h" + +#define REFRESH_INTERVAL_OFF (-1) + +#pragma mark - Ad Sizes +/** + * The ad size equivalent to CGSizeMake(320, 48). + * @deprecated Will be removed in a future release. Use IM_UNIT_320x50 instead. + */ +#define IM_UNIT_320x48 9 +/** + * Medium Rectangle size for the iPad (especially in a UISplitView's left pane). + * The ad size equivalent to CGSizeMake(300, 250). + */ +#define IM_UNIT_300x250 10 +/** + * Leaderboard size for the iPad. + * The ad size equivalent to CGSizeMake(728,90). + */ +#define IM_UNIT_728x90 11 +/** + * Full Banner size for the iPad (especially in a UIPopoverController or in + * UIModalPresentationFormSheet). + * The ad size equivalent to CGSizeMake(468x60). + */ +#define IM_UNIT_468x60 12 +/** + * Skyscraper size, designed for iPad's screen size. + * The ad size equivalent to CGSizeMake(120x600). + */ +#define IM_UNIT_120x600 13 +/** + * Default ad size for iPhone and iPod Touch. + * The ad size equivalent to CGSizeMake(320, 48). + */ +#define IM_UNIT_320x50 15 + +/** + This is a UIView class that displays banner ads. A minimum implementation to + get an ad is: + + - Initialize an IMBanner instance either by providing appid and adsize or + by providing slot id. + - Load the Banner. + - Place the banner on the screen. + + Below is a sample example: + banner = [[IMBanner alloc] initWithFrame:CGRectMake(0,0,320,50) + appId:@"YOUR_APP_ID" + adSize:IM_UNIT_320x50]; + banner.delegate = self; + [banner loadBanner]; + + You may use InMobi class for additional targetting options. + */ +@interface IMBanner : UIView + +#pragma mark - Initialization +/** + * Initializes an IMBanner instance with the specified appId and adSize. + * @param frame CGRect for this view, typically according to the requested size. + * @param appId Application Id registered on the InMobi portal. + * @param adSize Ad size id to request the specific banner size. + * @note |appId| is required to be non empty, else the instance of IMBanner is + * not created and nil is returned instead. + */ +- (id)initWithFrame:(CGRect)frame appId:(NSString *)appId adSize:(int)adSize; +/** + * Initializes an IMBanner instance with the specified slot id. + * @param frame CGRect for this view, typically according to the requested size. + * @param slotId Slot id to uniquely identify a placement in your app. + */ +- (id)initWithFrame:(CGRect)frame slotId:(long long)slotId; + +#pragma mark - Initialization for IB Integration +/** + * Ad size id for the request. + * @note Check the ad size macros for the available values of ad-size. + */ +@property (nonatomic) int adSize; +/** + * Application Id for the request. + * @note Use the application id registered on the InMobi portal. + */ +@property (nonatomic, copy) NSString *appId; +/** + * Slot id is the specific placement id for the request. + * @note Use the slot id registered on the InMobi portal. + */ +@property (nonatomic) long long slotId; + +#pragma mark - Loading Banner +/** + * Loads the Banner. Additional targetting options may be provided using the + * InMobi class. + */ +- (void)loadBanner; +/** + * Stops the current loading of the Banner if in progress. + */ +- (void)stopLoading; + +#pragma mark - Optional properties +/** + * Delegate object that receives state change notifications from this view. + * Typically, this is a UIViewController instance. + * @note Whenever you're releasing the Banner, make sure you set its delegate + * to nil and remove it from its superview to prevent any chance of your + * application crashing. + */ +@property (nonatomic, unsafe_unretained) IBOutlet NSObject *delegate; +/** + * Starts or stops the auto refresh of ads. + * The refresh interval is measured between the completion(success or failure) + * of the previous ad request and start of the next ad request. By default, + * the refresh interval is set to 60 seconds. Setting a new valid refresh + * interval value will start the auto refresh of ads if not already started. + * Use REFRESH_INTERVAL_OFF as the parameter to switch off auto refresh. + * When auto refresh is turned off, use the loadBanner method to manually load + * new ads. The SDK will not refresh ads if the screen is in the background or + * if the phone is locked. + */ +@property (nonatomic) int refreshInterval; +/** + * The animation transition, when a banner ad is refresh. + * @note: Applicable for banner ads only. + */ +@property (nonatomic,assign) UIViewAnimationTransition refreshAnimation; + +/** + * A free form NSDictionary for any demographic information, + * not available via InMobi class. + */ +@property (nonatomic,strong) NSDictionary *additionaParameters; +/** + * A free form set of keywords, separated by ',' + * E.g: "sports,cars,bikes" + */ +@property (nonatomic,copy) NSString *keywords; + +/** + * Ref-tag key to be passed to an ad instance. + */ +@property (nonatomic,copy) NSString *refTagKey; +/** + * Ref-tag value to be passed to an ad instance. + */ +@property (nonatomic,copy) NSString *refTagValue; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/IMBannerDelegate.h b/mediation/mediatedviews/inMobi/Libs/IMBannerDelegate.h new file mode 100644 index 000000000..01659e04f --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMBannerDelegate.h @@ -0,0 +1,75 @@ +// +// IMBannerDelegate.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import +#import "IMError.h" + +@class IMBanner; + +/** + * This is the delegate for receiving state change messages from an IMBanner. + * Use this to receive callbacks for banner ad request succeeding, failing or + * for the events after the banner ad is clicked. + */ +@protocol IMBannerDelegate + +@optional + +#pragma mark Banner Request Notifications +/** + * Callback sent when an ad request loaded an ad. This is a good opportunity + * to add this view to the hierarchy if it has not yet been added. + * @param banner The IMBanner instance which finished loading the ad request. + */ +- (void)bannerDidReceiveAd:(IMBanner *)banner; +/** + * Callback sent when an ad request failed. Normally this is because no network + * connection was available or no ads were available (i.e. no fill). + * @param banner The IMBanner instance that failed to load the ad request. + * @param error The error that occurred during loading. + */ +- (void)banner:(IMBanner *)banner didFailToReceiveAdWithError:(IMError *)error; + +#pragma mark Banner Interaction Notifications +/** + * Called when the banner is tapped or interacted with by the user + * Optional data is available to publishers to act on when using + * monetization platform to render promotional ads. + * @param banner The IMBanner instance that presents the screen. + * @param dictionary The NSDictionary containing the parameters as passed by the creative + */ +-(void)bannerDidInteract:(IMBanner *)banner withParams:(NSDictionary *)dictionary; +/** + * Callback sent just before when the banner is presenting a full screen view + * to the user. Use this opportunity to stop animations and save the state of + * your application in case the user leaves while the full screen view is on + * screen (e.g. to visit the App Store from a link on the full screen view). + * @param banner The IMBanner instance that presents the screen. + */ +- (void)bannerWillPresentScreen:(IMBanner *)banner; +/** + * Callback sent just before dismissing the full screen view. + * @param banner The IMBanner instance that dismisses the screen. + */ +- (void)bannerWillDismissScreen:(IMBanner *)banner; +/** + * Callback sent just after dismissing the full screen view. + * Use this opportunity to restart anything you may have stopped as part of + * bannerWillPresentScreen: callback. + * @param banner The IMBanner instance that dismissed the screen. + */ +- (void)bannerDidDismissScreen:(IMBanner *)banner; +/** + * Callback sent just before the application goes into the background because + * the user clicked on a link in the ad that will launch another application + * (such as the App Store). The normal UIApplicationDelegate methods like + * applicationDidEnterBackground: will immediately be called after this. + * @param banner The IMBanner instance that is launching another application. + */ +- (void)bannerWillLeaveApplication:(IMBanner *)banner; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/IMConstants.h b/mediation/mediatedviews/inMobi/Libs/IMConstants.h new file mode 100644 index 000000000..a9a25ef65 --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMConstants.h @@ -0,0 +1,162 @@ +// +// IMConstants.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + + + +#import +#import + +/** + * Console log levels + */ +typedef enum { + // No logs. + IMLogLevelNone = 0, + + // Minimal set of logs for debugging. + IMLogLevelDebug = 1, + + // Log everything + // @note: Please turn off verbose mode before wide distribution like + // AppStore. Keeping the verbose mode turned on might impact performance. + IMLogLevelVerbose = 2, +} IMLogLevel; + +/** + * Device Id collection masks + */ +typedef enum { + // Use default ids for sdk device id collection. (default) + IMDeviceIdMaskIncludeDefaultIds = 0, + + // Exclude odin1 identifier from sdk device id collection. + IMDeviceIdMaskExcludeODIN1 = 1<<0, + + // Exclude advertiser identifier from sdk device id collection. (iOS 6+) + IMDeviceIdMaskExcludeAdvertisingId = 1<<1, + + // Exclude vendor identifier from sdk device id collection. (iOS 6+) + IMDeviceIdMaskExcludeVendorId = 1<<2, + + // @deprecated + // @note: This flag is deprecated as sdk does not collect UDID any more. + // Exclude udid identifier from sdk device id collection. + IMDeviceIdMaskExcludeUDID = 1<<3, + + // Exclude facebook's attribution id from sdk device id collection. + IMDeviceIdMaskExcludeFacebookAttributionId = 1<<4, +} IMDeviceIdMask; + +/** + * User ids to help deliver more relevant ads. + */ +typedef enum { + // User login id such as facebook, twitter, etc. + kIMUserIdLogin, + + // For maintaining different sessions within the same login id. + kIMUserIdSession, +} IMUserId; + +/** + * User Gender + */ +typedef enum { + kIMGenderMale = 1, + kIMGenderFemale, + kIMGenderUnknown, +} IMGender; + +/** + * User Ethnicity + */ +typedef enum { + kIMEthnicityHispanic = 1, + kIMEthnicityCaucasian, + kIMEthnicityAsian, + kIMEthnicityAfricanAmerican, + kIMEthnicityOther, + kIMEthnicityUnknown, +} IMEthnicity; + +/** + * User Education + */ +typedef enum { + kIMEducationHighSchoolOrLess = 1, + kIMEducationCollegeOrGraduate, + kIMEducationPostGraduateOrAbove, + kIMEducationUnknown, +} IMEducation; + +/** + * Different Interstitial states + */ +typedef enum { + // The state of interstitial cannot be determined. + kIMInterstitialStateUnknown = 0, + + // The default state of an interstitial. + // If an interstitial ad request fails, or if the user dismisses the + // interstitial, the state will be changed back to init. + kIMInterstitialStateInit, + + // Indicates that an interstitial ad request is in progress. + kIMInterstitialStateLoading, + + // Indicates that an interstitial ad is ready to be displayed. + // An interstitial ad can be displayed only if the state is ready. + // You can call presentFromRootViewController: to display this ad. + kIMInterstitialStateReady, + + // Indicates that an interstitial ad is displayed on the user's screen. + kIMInterstitialStateActive + +} IMInterstitialState; + +/** + * Interstitial ad mode + */ +typedef enum { + // Interstitial for AdNetwork. + IMAdModeNetwork, + + // Interstitial for App Gallery. + IMAdModeAppGallery +} IMAdMode; + +/** + * User HasChildren + */ +typedef enum { + kIMHasChildrenTrue = 1, + kIMHasChildrenFalse, + kIMHasChildrenUnknown, +} IMHasChildren; + +/** + * User Marital Status + */ +typedef enum { + kIMMaritalStatusSingle = 1, + kIMMaritalStatusDivorced, + kIMMaritalStatusEngaged, + kIMMaritalStatusRelationship, + kIMMaritalStatusUnknown, +} IMMaritalStatus; + +/** + * User Sexual Orientation + */ +typedef enum { + kIMSexualOrientationStraight = 1, + kIMSexualOrientationBisexual, + kIMSexualOrientationGay, + kIMSexualOrientationUnknown, +} IMSexualOrientation; + + diff --git a/mediation/mediatedviews/inMobi/Libs/IMError.h b/mediation/mediatedviews/inMobi/Libs/IMError.h new file mode 100644 index 000000000..e0c75922c --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMError.h @@ -0,0 +1,51 @@ +// +// IMError.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import + +/** + * Constant Error Domain for all the InMobi specific errors. + */ +extern NSString *const kInMobiErrorDomain; + +/** + * NSError codes for InMobi error domain + */ +typedef enum { + // The ad request is invalid, refer to localizedDescription for more info. + kIMErrorInvalidRequest = 0, + + // No ads were returned from the Ad Network + kIMErrorNoFill, + + // InMobi encountered an Internal error + kIMErrorInternal, + + // Ad Format Not Supported + kIMErrorAdFormatNotSupported, + + // Ad request/rendering timed out. + kIMErrorTimeout, + + // Ad request was cancelled. + kIMErrorRequestCancelled, + + // Do ad monetization. + kIMErrorDoMonetization, + + // Do nothing + kIMErrorDoNothing, + +} IMErrorCode; + +/** + * This class represents the error generated due to invalid request parameters + * or when the request fails to load. + */ +@interface IMError : NSError + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/IMIncentivisedDelegate.h b/mediation/mediatedviews/inMobi/Libs/IMIncentivisedDelegate.h new file mode 100644 index 000000000..26442b644 --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMIncentivisedDelegate.h @@ -0,0 +1,22 @@ +// +// IMIncentivisedDelegate.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import +@class IMInterstitial; +@protocol IMIncentivisedDelegate + +#pragma mark Incentivised action complete notification + +/** + * Sent when an incentivised ad action is complete. + * @param ad The IMInterstitial instance which completed the incentivised action. + * @param params The params returned to the publisher. These are setup by the publisher to be received when an incent action completes. + */ +- (void)incentivisedAd:(IMInterstitial *)ad didCompleteWithParams:(NSDictionary*)params; + + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/IMInterstitial.h b/mediation/mediatedviews/inMobi/Libs/IMInterstitial.h new file mode 100644 index 000000000..38963004d --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMInterstitial.h @@ -0,0 +1,117 @@ +// +// IMInterstitial.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import +#import +#import "InMobi.h" +#import "IMInterstitialDelegate.h" +#import "IMIncentivisedDelegate.h" +@protocol IMNetworkExtras; + +/** + * Class to display an Interstitial Ad. + * Interstitials are full screen advertisements that are shown at natural + * transition points in your application such as between game levels, when + * switching news stories, in general when transitioning from one view controller + * to another. It is best to request for an interstitial several seconds before + * when it is actually needed, so that it can preload its content and become + * ready to present, and when the time comes, it can be immediately presented to + * the user with a smooth experience. + */ +@interface IMInterstitial : NSObject + +#pragma mark - Initialization +/** + * Initializes an IMInterstitial instance with the specified appId. + * @param appId Application Id registered on the InMobi portal. + * @note |appId| is required to be non empty, else the instance of + * IMInterstitial is not created and nil is returned instead. + */ +- (id)initWithAppId:(NSString *)appId; +/** + * Initializes an IMInterstitial instance, and sets the specified slot id. + * @param slotId Slot id to uniquely identify a placement in your app. + */ +- (id)initWithSlotId:(long long)slotId; + +#pragma mark - Initialization for IB Integration +/** + * Application Id for the request. + * @note Use the application id registered on the InMobi portal. + */ +@property (nonatomic, copy) NSString *appId; +/** + * Slot id is the specific placement id for the request. + * @note Use the slot id registered on the InMobi portal. + */ +@property (nonatomic) long long slotId; + +#pragma mark - Loading Interstitial +/** + * Loads the Interstitial. Additional targetting options may be provided using + * the InMobi class. + * It is best to call this method several seconds before the interstitial is + * needed to preload its content. Once, it is fetched and is ready to display, + * you can present it using presentInterstitialAnimated: method. + */ +- (void)loadInterstitial; +/** + * Stops the current loading of the Interstitial if in progress. + */ +- (void)stopLoading; + +#pragma mark - Presenting Interstitial +/** + * This presents the interstitial ad that takes over the entire screen until + * the user dismisses it. This has no effect unless the interstitial state is + * kIMInterstitialStateReady and/or the delegate's interstitialDidReceiveAd: + * has been received. After the interstitial has been dismissed by the user, + * the delegate's interstitialDidDismissScreen: will be called. + * @param animated Display the interstitial by using an animation. This is + * similar to presenting a Modal-View-Controller like animation, from the bottom. + */ +- (void)presentInterstitialAnimated:(BOOL)animated; + +#pragma mark - Optional properties +/** + * Delegate object that receives state change notifications from this + * interstitial object. Typically, this is a UIViewController instance. + * @warning Whenever you release the Interstitial object, make sure to set its + * delegate to nil to prevent any chance of your application crashing. + */ +@property (nonatomic, unsafe_unretained) NSObject *delegate; + +/** + * Delegate object that receives the params when an incentivised action is complete. + * @warning Whenever you release the Interstitial object, make sure to set its + * incentivisedDelegate to nil to prevent any chance of your application crashing. + */ +@property (nonatomic, unsafe_unretained) NSObject *incentivisedDelegate; +/** + * Returns the state of the interstitial ad. The delegate's + * interstitialDidFinishRequest: will be called when this switches from the + * kIMInterstitialStateInit state to the kIMInterstitialStateReady state. + */ +@property (readonly) IMInterstitialState state; +/** + * Set the adMode property to switch to app gallery mode. + * The default value is network. + */ +@property (nonatomic) IMAdMode adMode; + +/** + * A free form NSDictionary for any demographic information, + * not available via InMobi class. + */ +@property (nonatomic,strong) NSDictionary *additionaParameters; +/** + * A free form set of keywords, separated by ',' + * E.g: "sports,cars,bikes" + */ +@property (nonatomic,copy) NSString *keywords; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/IMInterstitialDelegate.h b/mediation/mediatedviews/inMobi/Libs/IMInterstitialDelegate.h new file mode 100644 index 000000000..57595792c --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMInterstitialDelegate.h @@ -0,0 +1,83 @@ +// +// IMInterstitialDelegate.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import +#import "IMError.h" + +@class IMInterstitial; + +/** + * Delegate to receive state change message from IMInterstitial. + */ +@protocol IMInterstitialDelegate + +@optional + +#pragma mark Interstitial Request Notifications + +/** + * Sent when an interstitial ad request succeeded. + * @param ad The IMInterstitial instance which finished loading. + */ +- (void)interstitialDidReceiveAd:(IMInterstitial *)ad; + +/** + * Sent when an interstitial ad request failed + * @param ad The IMInterstitial instance which failed to load. + * @param error The IMError associated with the failure. + */ +- (void)interstitial:(IMInterstitial *)ad + didFailToReceiveAdWithError:(IMError *)error; + +#pragma mark Interstitial Interaction Notifications + +/** + * Sent just before presenting an interstitial. After this method finishes the + * interstitial will animate onto the screen. Use this opportunity to stop + * animations and save the state of your application in case the user leaves + * while the interstitial is on screen (e.g. to visit the App Store from a link + * on the interstitial). + * @param ad The IMInterstitial instance which will present the screen. + */ +- (void)interstitialWillPresentScreen:(IMInterstitial *)ad; + +/** + * Sent before the interstitial is to be animated off the screen. + * @param ad The IMInterstitial instance which will dismiss the screen. + */ +- (void)interstitialWillDismissScreen:(IMInterstitial *)ad; + +/** + * Sent just after dismissing an interstitial and it has animated off the screen. + * @param ad The IMInterstitial instance which was responsible for dismissing the screen. + */ +- (void)interstitialDidDismissScreen:(IMInterstitial *)ad; +/** + * Callback sent just before the application goes into the background because + * the user clicked on a link in the ad that will launch another application + * (such as the App Store). The normal UIApplicationDelegate methods like + * applicationDidEnterBackground: will immediately be called after this. + * @param ad The IMInterstitial instance that is launching another application. + */ +- (void)interstitialWillLeaveApplication:(IMInterstitial *)ad; +/** + * Called when the interstitial is tapped or interacted with by the user + * Optional data is available to publishers to act on when using + * monetization platform to render promotional ads. + * @param ad The IMInterstitial instance which was responsible for this action. + * @param dictionary The NSDictionary object which was passed from the ad. + */ +-(void)interstitialDidInteract:(IMInterstitial *)ad withParams:(NSDictionary *)dictionary; +/** + * Called when the interstitial failed to display. + * This should normally occur if the state != kIMInterstitialStateReady. + * @param ad The IMInterstitial instance responsible for this error. + * @param error The IMError associated with this failure. + */ +- (void)interstitial:(IMInterstitial *)ad didFailToPresentScreenWithError:(IMError *)error; +@end + diff --git a/mediation/mediatedviews/inMobi/Libs/IMNative.h b/mediation/mediatedviews/inMobi/Libs/IMNative.h new file mode 100644 index 000000000..d4a6e5519 --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMNative.h @@ -0,0 +1,90 @@ +// +// IMNative.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// +// +/** + This class represents a Native ad. A minimum implementation to + get an ad is: + + - Initialize an IMNative instance by providing appid + - Load the Native ad. + - Implement the IMNativeDelegate methods to know when to get the ad content. + + Below is a sample example: + + IMNative* nativeAd = [[IMNative alloc] initWithAppId:@"YOUR_APP_ID"]; + nativeAd.delegate = self; + [nativeAd loadAd]; + + * You may use InMobi class for additional targetting options. + */ + +#import +#import +#import "IMNativeDelegate.h" +@interface IMNative : NSObject +/** + * Publisher specific ad content in the format specified by the publisher. + * Use this content to render the ad. + */ +@property (atomic, strong) NSString* content; +/** + * Native delegate to get success/failure response for the native ad. + */ +@property (nonatomic, unsafe_unretained) id delegate; + +/** + * Initializes the native ad instance with the appId provided + * @param appId Application Id registered on the InMobi portal. + */ +-(id)initWithAppId:(NSString*)appId; +/** + * This method loads a native ad. This will automatically detach any previously attached view and invalidate the native instance. + * Until the load is complete, no operations can be performed on this instance. + */ +-(void)loadAd; +/** + * Once the rendering is done, this method attaches the native ad to the provided view. + * The view passed to this method is the view that renders the ad from the native ad instance's content. + * It is necessary to attach a view before any clicks can be reported to the native ad instance. + * @param view The view rendered from content of the native ad. + */ +-(void)attachToView:(UIView*)view; +/** + * This method detaches the native ad instance from the view it was attached to. + * Once detached, The native instance gets invalidated until it is loaded again. + * Only detach the view when you are completely done with it, like moving to a different page, not showing the ad anymore or + * releasing the view that rendered the ad etc. + */ +-(void)detachFromView; +/** + * This method reports a click to the native ad. + * When the publisher considers an action on the view as a click, + * call this method to report the click to InMobi. + * @param params Any additional params to be passed for better reporting. + */ +-(void)handleClick:(NSDictionary*)params; + +/** + * A free form NSDictionary for any demographic information, + * not available via InMobi class. + */ +@property (nonatomic,strong) NSDictionary *additionaParameters; +/** + * A free form set of keywords, separated by ',' + * E.g: "sports,cars,bikes" + */ +@property (nonatomic,copy) NSString *keywords; +/** + * Ref-tag key to be passed to an ad instance. + */ +@property (nonatomic,copy) NSString *refTagKey; +/** + * Ref-tag value to be passed to an ad instance. + */ +@property (nonatomic,copy) NSString *refTagValue; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/IMNativeDelegate.h b/mediation/mediatedviews/inMobi/Libs/IMNativeDelegate.h new file mode 100644 index 000000000..27a12ef89 --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/IMNativeDelegate.h @@ -0,0 +1,26 @@ +// +// IMNativeDelegate.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// +/** + * Implement these methods to get notified about the status of a native ad. These will be reported on the main thread. + */ +#import +#import "IMError.h" +@class IMNative; +@protocol IMNativeDelegate + +@required +/** + * Once a native ad successfully finishes loading, the delegate will be notified with this method. + * At this point, the content of the native ad is filled and is usable by the publisher. + */ +-(void)nativeAdDidFinishLoading:(IMNative*)native; +/** + * Upon error, the native ad delegate will be notified by this method. + */ +-(void)nativeAd:(IMNative*)native didFailWithError:(IMError*)error; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/InMobi.h b/mediation/mediatedviews/inMobi/Libs/InMobi.h new file mode 100644 index 000000000..cf0bb1e5a --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/InMobi.h @@ -0,0 +1,179 @@ +// +// InMobi.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + + +#import "IMConstants.h" + + +/** + * General functions common to all InMobi SDKs + */ +@interface InMobi : NSObject + +/** + * Initialize InMobi SDKs with the Publisher App Id obtained from InMobi portal. + * @param publisherAppId publisher's app id + */ ++ (void)initialize:(NSString *)publisherAppId; + +#pragma mark Console Log Levels + +/** + * Set the console logging level. + * @param logLevel Log level to be set. + */ ++ (void)setLogLevel:(IMLogLevel)logLevel; + +#pragma mark Device ID Mask + +/** + * This sets the Device Id Mask to restrict the Device Tracking not to be + * based on certain Device Ids. + * @param deviceIdMask Device id mask to be set. + */ ++ (void)setDeviceIdMask:(IMDeviceIdMask)deviceIdMask; + +#pragma mark SDK Information + +/** + * Returns the sdk version. + * @return the sdk version + */ ++ (NSString *)getVersion; + +#pragma mark User Information + +/** + * Set user's gender. + * @param gender Gender of the user + */ ++ (void)setGender:(IMGender)gender; + +/** + * Set user's educational qualification. + * @param education Educational qualification of the user + */ ++ (void)setEducation:(IMEducation)education; + +/** + * Set user's ethnicity. + * @param ethnicity Ethnicity of the user + */ ++ (void)setEthnicity:(IMEthnicity)ethnicity; + +/** + * Set user's date of birth. + * @param dateOfBirth Date of Birth of the user as NSDate object + */ ++ (void)setDateOfBirth:(NSDate *)dateOfBirth; + +/** + * Set user's date of birth + * @param month Birth month of the user + * @param day Birth day of the user + * @param year Birth year of the user + */ ++ (void)setDateOfBirthWithMonth:(NSUInteger)month + day:(NSUInteger)day + year:(NSUInteger)year; + +/** + * Set user's annual income. + * @param income Annual income of the user in USD + */ ++ (void)setIncome:(NSInteger)income; + +/** + * Set user's age. + * @param age Age of the user + */ ++ (void)setAge:(NSInteger)age; + +/** + * Set user's marital status. + * @param status Marital status of the user + */ ++ (void)setMaritalStatus:(IMMaritalStatus)status; + +/** + * Set whether the user has any children. + * @param children Boolean for whether the user has any children + */ ++ (void)setHasChildren:(IMHasChildren)children; + +/** + * Set user's sexual orientation. + * @param sexualOrientation Sexual orientation of the user + */ ++ (void)setSexualOrientation:(IMSexualOrientation)sexualOrientation; + +/** + * Set user's language preference. + * @param langugage Preferred language of the user + */ ++ (void)setLanguage:(NSString *)langugage; + +/** + * Set user's postal code. + * @param postalCode Postal code of the user + */ ++ (void)setPostalCode:(NSString *)postalCode; + +/** + * Set user's area code. + * @param areaCode Area code of the user + */ ++ (void)setAreaCode:(NSString *)areaCode; + +/** + * Set user's interests (contextually relevant strings comma separated). + * @param interests Interests of the user. E.g: @"cars,bikes,racing" + */ ++ (void)setInterests:(NSString *)interests; + +#pragma mark User Location + +/** + * Use this to set the user's current location to deliver more relevant ads. + * However do not use Core Location just for advertising, make sure it is used + * for more beneficial reasons as well. It is both a good idea and part of + * Apple's guidelines. + * @param latitude Location latitude + * @param longitude Location longitude + * @param accuracyInMeters Location accuracy in meters + */ ++ (void)setLocationWithLatitude:(CGFloat)latitude + longitude:(CGFloat)longitude + accuracy:(CGFloat)accuracyInMeters; + +/** + * Provide user location for city level targeting. + * @param city User's city + * @param state User's state + * @param country User's country + */ ++ (void)setLocationWithCity:(NSString *)city + state:(NSString *)state + country:(NSString *)country; + +#pragma mark User IDs + +/** + * Set user ids such as facebook, twitter etc to deliver more relevant ads. + * @param userId User id type + * @param idValue User id value + */ ++ (void)addUserID:(IMUserId)userId withValue:(NSString *)idValue; + +/** + * Remove the user ids which was set before. This fails silently if the id type + * was not set before. + * @param userId User id type to remove + */ ++ (void)removeUserID:(IMUserId)userId; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/InMobiAnalytics.h b/mediation/mediatedviews/inMobi/Libs/InMobiAnalytics.h new file mode 100644 index 000000000..a9a76ce1a --- /dev/null +++ b/mediation/mediatedviews/inMobi/Libs/InMobiAnalytics.h @@ -0,0 +1,91 @@ +// +// InMobiAnalytics.h +// InMobi Monetization SDK +// +// Copyright (c) 2013 InMobi. All rights reserved. +// + +#import + +/** + * This class collects analytics for a publisher's application. + */ +@interface InMobiAnalytics : NSObject + +/** + * Use this method if and only if you want to manually track sessions + * This method is idempotent, meaning, if automatic track sessions is enabled + * or startSession was called before, this method does nothing. + */ ++ (void)startSessionManually; + +/** + * Use this method if and only if you want to manually end sessions + * This method will also terminate automatically tracked sessions if enabled + */ ++ (void)endSessionManually; + +/** + * Call this method when the user has started or re-started a section. + * @param sectionName A name string for the beginning section. + * @param additionalParams Optional NSDictionary object. This dictionary can + * have value type as (NSNumber,NSString) only. + */ ++ (void)beginSection:(NSString *)sectionName withParams:(NSDictionary *)additionalParams; + +/** + * Call this method when the user has started or re-started a section. + * @param sectionName A name string for the beginning section. + */ ++ (void)beginSection:(NSString *)sectionName; + +/** + * Call this method when the user has completed,failed or finished a section. + * @param sectionName A name string for the ending session. + * @param additionalParams Optional NSDictionary object. This dictionary can + * have value type as (NSNumber,NSString) only. + */ ++ (void)endSection:(NSString *)sectionName withParams:(NSDictionary *)additionalParams; + +/** + * Call this method when the user has completed,failed or finished a section. + * @param sectionName A name string for the ending session. + */ ++ (void)endSection:(NSString *)sectionName; + +/** + * Call this method if you want to track custom events as happening during a + * section. + * @param eventName The custom event name. + * @param additionalParams Optional NSDictionary to be provided by you. + */ ++ (void)tagEvent:(NSString *)eventName withParams:(NSDictionary *)additionalParams; + +/** + * Call this method if you want to track custom events as happening during a + * section. + * @param eventName The custom event name. + */ ++ (void)tagEvent:(NSString *)eventName; + +/** + * Call this method with the SKPaymentTransaction object, for manually tagging + * the transaction. + * @param skTransaction The SKPaymentTransaction object. + */ ++ (void)tagTransactionManually:(id)skTransaction; + +/** + * Reports the Application Custom Goals to InMobi Ad Tracker. + * This is a non blocking API (returns immediately), and performs the + * reporting job in the background. + * When a goal is reported, it is made sure that it reaches InMobi Ad Tracker + * server whenever the device is connected to internet. Different goals can be + * reported without worrying about the internet connection. + * + * @deprecated Please start using tagEvent to manage goals + * @param goalName Your custom goal name. + */ ++ (void)reportCustomGoal:(NSString *)goalName; + +@end diff --git a/mediation/mediatedviews/inMobi/Libs/libInMobi-4.4.0.a b/mediation/mediatedviews/inMobi/Libs/libInMobi-4.4.0.a new file mode 100644 index 000000000..52371a8ee Binary files /dev/null and b/mediation/mediatedviews/inMobi/Libs/libInMobi-4.4.0.a differ diff --git a/sdk/ANBannerAdView.h b/sdk/ANBannerAdView.h index 3e9aef07e..ae464691f 100644 --- a/sdk/ANBannerAdView.h +++ b/sdk/ANBannerAdView.h @@ -17,6 +17,23 @@ @protocol ANBannerAdViewDelegate; +typedef NS_ENUM(NSUInteger, ANBannerViewAdTransitionType) { + ANBannerViewAdTransitionTypeNone = 0, + ANBannerViewAdTransitionTypeFade, + ANBannerViewAdTransitionTypePush, + ANBannerViewAdTransitionTypeMoveIn, + ANBannerViewAdTransitionTypeReveal, + ANBannerViewAdTransitionTypeFlip, +}; + +typedef NS_ENUM(NSUInteger, ANBannerViewAdTransitionDirection) { + ANBannerViewAdTransitionDirectionUp = 0, + ANBannerViewAdTransitionDirectionDown, + ANBannerViewAdTransitionDirectionLeft, + ANBannerViewAdTransitionDirectionRight, + ANBannerViewAdTransitionDirectionRandom +}; + #pragma mark Example implementation /** @@ -73,6 +90,26 @@ */ @property (nonatomic, readwrite, assign) NSTimeInterval autoRefreshInterval; +/** + The type of transition that occurs between an old ad and a new ad when the ad slot is refreshed + (either automatically or by calling loadAd). Transitions are disabled by default. See the + ANBannerViewAdTransitionType enumeration above for accepted values. + */ +@property (nonatomic, readwrite, assign) ANBannerViewAdTransitionType transitionType; + +/** + The direction in which the transition between ads progresses. The default direction is up. Has no + effect if transitions are disabled, or set to "fade". See the ANBannerViewAdTransitionDirection + enumeration above for accepted values. + */ +@property (nonatomic, readwrite, assign) ANBannerViewAdTransitionDirection transitionDirection; + +/** + The duration of the transition between ads, default is 1 second. Has no effect if transitions + are disabled. + */ +@property (nonatomic, readwrite, assign) NSTimeInterval transitionDuration; + #pragma mark Creating an ad view and loading an ad /** diff --git a/sdk/Categories/UIView+ANCategory.h b/sdk/Categories/UIView+ANCategory.h index 709c7a22a..edf0dd9d8 100644 --- a/sdk/Categories/UIView+ANCategory.h +++ b/sdk/Categories/UIView+ANCategory.h @@ -23,5 +23,6 @@ - (void)dismissFromPresentingViewAnimated:(BOOL)animated; - (void)removeSubviews; +- (void)removeSubviewsWithException:(UIView *)exception; @end diff --git a/sdk/Categories/UIView+ANCategory.m b/sdk/Categories/UIView+ANCategory.m index 6aa92ead0..e2cf4f109 100644 --- a/sdk/Categories/UIView+ANCategory.m +++ b/sdk/Categories/UIView+ANCategory.m @@ -59,4 +59,20 @@ - (void)removeSubviews { } } +- (void)removeSubviewsWithException:(UIView *)exception { + for (UIView *view in self.subviews) { + if (view != exception) { + if ([view isKindOfClass:[UIWebView class]]) { + UIWebView *webView = (UIWebView *)view; + [webView stopLoading]; + [webView setDelegate:nil]; + } + + [view removeSubviews]; + [view removeFromSuperview]; + } + } + +} + @end diff --git a/sdk/Resources/images/appnexus_logo_icon.png b/sdk/Resources/images/appnexus_logo_icon.png new file mode 100644 index 000000000..ead968cf3 Binary files /dev/null and b/sdk/Resources/images/appnexus_logo_icon.png differ diff --git a/sdk/Resources/images/appnexus_logo_icon@2x.png b/sdk/Resources/images/appnexus_logo_icon@2x.png new file mode 100644 index 000000000..7294dfb9c Binary files /dev/null and b/sdk/Resources/images/appnexus_logo_icon@2x.png differ diff --git a/sdk/internal/ANAdFetcher.m b/sdk/internal/ANAdFetcher.m index 26f693473..8fdc74d27 100644 --- a/sdk/internal/ANAdFetcher.m +++ b/sdk/internal/ANAdFetcher.m @@ -38,12 +38,15 @@ @interface ANAdFetcher () @property (nonatomic, readwrite, strong) NSTimer *autoRefreshTimer; @property (nonatomic, readwrite, strong) NSURL *URL; @property (nonatomic, readwrite, getter = isLoading) BOOL loading; -@property (nonatomic, readwrite, strong) ANMRAIDAdWebViewController *webViewController; +@property (nonatomic, readwrite, strong) ANWebView *webView; @property (nonatomic, readwrite, strong) NSMutableArray *mediatedAds; @property (nonatomic, readwrite, strong) ANMediationAdViewController *mediationController; @property (nonatomic, readwrite, assign) BOOL requestShouldBePosted; @property (nonatomic, readwrite, strong) NSString *ANMobileHostname; @property (nonatomic, readwrite, strong) NSString *ANBaseURL; + +// variables for measuring latency. +@property (nonatomic, readwrite, assign) NSTimeInterval totalLatencyStart; @end @implementation ANAdFetcher @@ -102,6 +105,7 @@ - (void)autoRefreshTimerDidFire:(NSTimer *)timer - (void)requestAdWithURL:(NSURL *)URL { [self.autoRefreshTimer invalidate]; + [self markLatencyStart]; self.request = [ANAdFetcher initBasicRequest]; if (!self.isLoading) @@ -202,6 +206,16 @@ - (void)dealloc { [self clearMediationController]; } +- (void)clearMediationController { + /* + Ad fetcher gets cleared, in the event the mediation controller lives beyond the ad fetcher. The controller maintains a weak reference to the + ad fetcher delegate so that messages to the delegate can proceed uninterrupted. Currently, the controller will only live on if it is still + displaying inside a banner ad view (in which case it will live on until the individual ad is destroyed). + */ + self.mediationController.adFetcher = nil; + self.mediationController = nil; +} + #pragma mark Request Url Construction - (void)processFinalResponse:(ANAdResponse *)response { @@ -275,22 +289,33 @@ - (void)handleStandardAd:(ANAdResponse *)response { CGSize sizeOfCreative = ((receivedSize.width > 0) && (receivedSize.height > 0)) ? receivedSize : requestedSize; + /* + The old controller should not continue to fire messages to the ad fetcher. The controller maintains a weak reference to the ad fetcher delegate + in the event the web view continues to persist (in the event the banner will still show, for example), so that messages between the controller and + the ad view can proceed uninterrupted. + */ + if (self.webView) { + self.webView.controller.adFetcher = nil; + } + // Generate a new webview to contain the HTML - ANWebView *webView = [[ANWebView alloc] initWithFrame:CGRectMake(0, 0, sizeOfCreative.width, sizeOfCreative.height)]; + self.webView = [[ANWebView alloc] initWithFrame:CGRectMake(0, 0, sizeOfCreative.width, sizeOfCreative.height)]; + + ANMRAIDAdWebViewController *webViewController = [[ANMRAIDAdWebViewController alloc] init]; + webViewController.isMRAID = response.isMraid; + webViewController.mraidDelegate = self.delegate; + webViewController.mraidDelegate.mraidEventReceiverDelegate = webViewController; + webViewController.adFetcher = self; + webViewController.webView = self.webView; + webViewController.adFetcherDelegate = self.delegate; + self.webView.delegate = webViewController; + self.webView.controller = webViewController; - self.webViewController = [[ANMRAIDAdWebViewController alloc] init]; - self.webViewController.isMRAID = response.isMraid; - self.webViewController.mraidDelegate = self.delegate; - self.webViewController.mraidDelegate.mraidEventReceiverDelegate = self.webViewController; - self.webViewController.adFetcher = self; - self.webViewController.webView = webView; - webView.delegate = self.webViewController; - NSString *contentToLoad = response.content; contentToLoad = [self prependMRAIDJS:contentToLoad]; contentToLoad = [self prependSDKJS:contentToLoad]; - [webView loadHTMLString:contentToLoad baseURL:[NSURL URLWithString:self.ANBaseURL]]; + [self.webView loadHTMLString:contentToLoad baseURL:[NSURL URLWithString:self.ANBaseURL]]; } - (NSString *)prependMRAIDJS:(NSString *)content { @@ -332,12 +357,6 @@ - (void)handleMediatedAds:(NSMutableArray *)mediatedAds { adViewDelegate:self.delegate]; } -- (void)clearMediationController { - // clear any old adapters if they exist - [self.mediationController clearAdapter]; - self.mediationController = nil; -} - - (void)finishRequestWithErrorAndRefresh:(NSDictionary *)errorInfo code:(NSInteger)code { self.loading = NO; @@ -442,7 +461,7 @@ - (void)fireResultCB:(NSString *)resultCBString auctionID:(NSString *)auctionID { self.loading = NO; - NSURL *resultURL = [NSURL URLWithString:[self createResultCBRequest:resultCBString reason:reason]]; + NSURL *resultURL = [NSURL URLWithString:resultCBString]; if (reason == ANAdResponseSuccessful) { // mediated ad succeeded. fire resultCB and ignore response @@ -499,12 +518,24 @@ - (void)fireAndIgnoreResultCB:(NSURL *)url { }]; } -- (NSString *)createResultCBRequest:(NSString *)baseResultCBString reason:(int)reasonCode { - NSString *resultCBRequestString = [baseResultCBString - stringByAppendingUrlParameter:@"reason" - value:[NSString stringWithFormat:@"%d",reasonCode]]; - resultCBRequestString = [resultCBRequestString stringByAppendingUrlParameter:@"idfa" value:ANUDID()]; - return resultCBRequestString; +#pragma mark Total Latency Measurement + +/** + * Mark the beginning of an ad request for latency recording + */ +- (void)markLatencyStart { + self.totalLatencyStart = [NSDate timeIntervalSinceReferenceDate]; +} + +/** + * Returns the time difference since ad request start + */ +- (NSTimeInterval)getTotalLatency:(NSTimeInterval)stopTime { + if ((self.totalLatencyStart > 0) && (stopTime > 0)) { + return (stopTime - self.totalLatencyStart); + } + // return -1 if invalid parameters + return -1; } @end diff --git a/sdk/internal/ANAdWebViewController.h b/sdk/internal/ANAdWebViewController.h index 9402380f9..8ac5ff10e 100644 --- a/sdk/internal/ANAdWebViewController.h +++ b/sdk/internal/ANAdWebViewController.h @@ -19,11 +19,13 @@ #import @class ANAdFetcher; +@protocol ANAdFetcherDelegate; @interface ANMRAIDAdWebViewController : NSObject @property (nonatomic, readwrite, weak) ANAdFetcher *adFetcher; -@property (nonatomic, readwrite, strong) UIWebView *webView; +@property (nonatomic, readwrite, weak) id adFetcherDelegate; +@property (nonatomic, readwrite, weak) UIWebView *webView; @property (nonatomic, readwrite, weak) id mraidDelegate; @property (nonatomic, readwrite, assign) BOOL isMRAID; diff --git a/sdk/internal/ANAdWebViewController.m b/sdk/internal/ANAdWebViewController.m index dab61c645..ad011dee8 100644 --- a/sdk/internal/ANAdWebViewController.m +++ b/sdk/internal/ANAdWebViewController.m @@ -43,6 +43,7 @@ @interface ANMRAIDAdWebViewController () @property (nonatomic, readwrite) CGRect defaultPosition; @property (nonatomic, readwrite) CGRect currentPosition; @property (nonatomic, readwrite, assign) CGPoint resizeOffset; +@property (nonatomic, readwrite, strong) NSMutableArray *pitbullCaptureURLQueue; - (void)delegateShouldOpenInBrowser:(NSURL *)URL; @@ -51,8 +52,8 @@ - (void)delegateShouldOpenInBrowser:(NSURL *)URL; @implementation ANMRAIDAdWebViewController - (void)delegateShouldOpenInBrowser:(NSURL *)URL { - if ([self.adFetcher.delegate respondsToSelector:@selector(adFetcher:adShouldOpenInBrowserWithURL:)]) { - [self.adFetcher.delegate adFetcher:self.adFetcher adShouldOpenInBrowserWithURL:URL]; + if ([self.adFetcherDelegate respondsToSelector:@selector(adFetcher:adShouldOpenInBrowserWithURL:)]) { + [self.adFetcherDelegate adFetcher:self.adFetcher adShouldOpenInBrowserWithURL:URL]; } } @@ -162,14 +163,14 @@ - (void)applicationDidEnterBackground:(NSNotification *)notification { } - (void)dealloc { + [self unregisterFromPitbullScreenCaptureNotifications]; [self.webView stopLoading]; self.webView.delegate = nil; - [self.webView removeFromSuperview]; [self.viewabilityTimer invalidate]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (BOOL)getWebViewVisible { +- (BOOL)getWebViewVisible { BOOL isHidden = self.webView.hidden; if (isHidden) return NO; @@ -220,9 +221,25 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *) ANLogDebug(@"Loading URL: %@", [[URL absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]); if ([scheme isEqualToString:@"appnexuspb"]) { + if ([self.adFetcherDelegate respondsToSelector:@selector(transitionInProgress)]) { + if ([URL.host isEqualToString:@"capture"]) { + NSNumber *transitionInProgress = [self.adFetcherDelegate performSelector:@selector(transitionInProgress)]; + if ([transitionInProgress boolValue] == YES) { + if (![self.pitbullCaptureURLQueue count]) { + [self registerForPitbullScreenCaptureNotifications]; + } + [self.pitbullCaptureURLQueue addObject:URL]; + return NO; + } + } else if ([URL.host isEqualToString:@"web"]) { + [self dispatchPitbullScreenCaptureCalls]; + [self unregisterFromPitbullScreenCaptureNotifications]; + } + } + UIView *view = self.webView; - if ([self.adFetcher.delegate respondsToSelector:@selector(containerView)]) { - view = [self.adFetcher.delegate containerView]; + if ([self.adFetcherDelegate respondsToSelector:@selector(containerView)]) { + view = [self.adFetcherDelegate containerView]; } [ANPBBuffer handleUrl:URL forView:view]; return NO; @@ -263,7 +280,7 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *) // Do MRAID actions [self dispatchNativeMRAIDURL:URL forWebView:webView]; } else if ([scheme isEqualToString:@"anjam"]) { - [ANANJAMImplementation handleUrl:URL forWebView:webView forDelegate:self.adFetcher.delegate]; + [ANANJAMImplementation handleUrl:URL forWebView:webView forDelegate:self.adFetcherDelegate]; } else if ([[UIApplication sharedApplication] canOpenURL:URL]) { [[UIApplication sharedApplication] openURL:URL]; } else { @@ -348,24 +365,24 @@ - (void)dispatchNativeMRAIDURL:(NSURL *)mraidURL forWebView:(UIWebView *)webView if ([mraidCommand isEqualToString:@"expand"]) { // hidden state handled by mraid.js - [self.adFetcher.delegate adWasClicked]; + [self.adFetcherDelegate adWasClicked]; [self expandAction:webView queryComponents:queryComponents]; } else if ([mraidCommand isEqualToString:@"close"]) { // hidden state handled by mraid.js [self closeAction:self]; } else if([mraidCommand isEqualToString:@"resize"]) { - [self.adFetcher.delegate adWasClicked]; + [self.adFetcherDelegate adWasClicked]; [self resizeAction:webView queryComponents:queryComponents]; } else if([mraidCommand isEqualToString:@"createCalendarEvent"]) { - [self.adFetcher.delegate adWasClicked]; + [self.adFetcherDelegate adWasClicked]; NSString *w3cEventJson = [queryComponents objectForKey:@"p"]; [self createCalendarEventFromW3CCompliantJSONObject:w3cEventJson]; } else if([mraidCommand isEqualToString:@"playVideo"]) { - [self.adFetcher.delegate adWasClicked]; + [self.adFetcherDelegate adWasClicked]; [self playVideo:queryComponents]; } else if([mraidCommand isEqualToString:@"storePicture"]) { - [self.adFetcher.delegate adWasClicked]; + [self.adFetcherDelegate adWasClicked]; NSString *uri = [queryComponents objectForKey:@"uri"]; [self storePicture:uri]; } else if([mraidCommand isEqualToString:@"setOrientationProperties"]) { @@ -815,5 +832,57 @@ - (void)adDidChangeResizeOffset:(CGPoint)offset { self.resizeOffset = offset; } +#pragma mark - Pitbull Image Capture Transition Adjustments + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if (object == self.adFetcherDelegate) { + NSNumber *transitionInProgress = change[NSKeyValueChangeNewKey]; + if ([transitionInProgress boolValue] == NO) { + [self unregisterFromPitbullScreenCaptureNotifications]; + [self dispatchPitbullScreenCaptureCalls]; + } + } +} + +- (void)registerForPitbullScreenCaptureNotifications { + NSObject *object = self.adFetcherDelegate; + [object addObserver:self + forKeyPath:@"transitionInProgress" + options:NSKeyValueObservingOptionNew + context:nil]; +} + +- (void)unregisterFromPitbullScreenCaptureNotifications { + /* + Removing a non-registered observer results in an exception. There's no way to + check if you're registered or not. Hence the try-catch. + */ + NSObject *bannerObject = self.adFetcherDelegate; + @try { + [bannerObject removeObserver:self + forKeyPath:@"transitionInProgress"]; + } + @catch (NSException * __unused exception) {} +} + +- (void)dispatchPitbullScreenCaptureCalls { + for (NSURL *URL in self.pitbullCaptureURLQueue) { + UIView *view = self.webView; + if ([self.adFetcherDelegate respondsToSelector:@selector(containerView)]) { + view = [self.adFetcherDelegate containerView]; + } + [ANPBBuffer handleUrl:URL forView:view]; + } + self.pitbullCaptureURLQueue = nil; +} + +- (NSMutableArray *)pitbullCaptureURLQueue { + if (!_pitbullCaptureURLQueue) _pitbullCaptureURLQueue = [[NSMutableArray alloc] initWithCapacity:5]; + return _pitbullCaptureURLQueue; +} + @end diff --git a/sdk/internal/ANBannerAdView.m b/sdk/internal/ANBannerAdView.m index a5ab89348..97b48edc4 100644 --- a/sdk/internal/ANBannerAdView.m +++ b/sdk/internal/ANBannerAdView.m @@ -21,6 +21,8 @@ #import "ANGlobal.h" #import "ANLogging.h" #import "ANMRAIDViewController.h" +#import "UIView+ANCategory.h" +#import "UIWebView+ANCategory.h" #define DEFAULT_ADSIZE CGSizeZero @@ -49,10 +51,10 @@ - (void)adShouldResetToDefault:(UIView *)contentView - (void)loadAdFromHtml:(NSString *)html width:(int)width height:(int)height; +- (void)removeCloseButton; @property (nonatomic, readwrite, strong) ANAdFetcher *adFetcher; @property (nonatomic, readwrite, strong) ANMRAIDViewController *mraidController; -@property (nonatomic, readwrite, strong) UIView *contentView; @property (nonatomic, readwrite, strong) UIButton *closeButton; @property (nonatomic, readwrite, strong) ANBrowserViewController *browserViewController; @property (nonatomic, readwrite, assign) CGRect defaultParentFrame; @@ -61,9 +63,15 @@ - (void)loadAdFromHtml:(NSString *)html @property (nonatomic, readwrite, assign) BOOL adjustFramesInResizeState; @end +@interface ANBANNERADVIEW () +@property (nonatomic, readwrite, strong) UIView *contentView; +@property (nonatomic, readwrite, strong) NSNumber *transitionInProgress; // Should be used by pitbull +@end + @implementation ANBANNERADVIEW @synthesize autoRefreshInterval = __autoRefreshInterval; @synthesize adSize = __adSize; +@synthesize contentView = _contentView; #pragma mark Initialization @@ -76,6 +84,7 @@ - (void)initialize { // Set default autoRefreshInterval __autoRefreshInterval = kANBannerDefaultAutoRefreshInterval; __adSize = CGSizeZero; + _transitionDuration = kAppNexusBannerAdTransitionDefaultDuration; } - (void)awakeFromNib { @@ -208,6 +217,206 @@ - (void)setFrame:(CGRect)frame animated:(BOOL)animated { } } +#pragma mark - Transitions + +- (void)setContentView:(UIView *)newContentView { + NSLog(@"Setting content view!"); + if (newContentView != _contentView) { + [self removeCloseButton]; + + UIView *oldContentView = _contentView; + _contentView = newContentView; + + if ([newContentView isKindOfClass:[UIWebView class]]) { + UIWebView *webView = (UIWebView *)newContentView; + [webView removeDocumentPadding]; + [webView setMediaProperties]; + } + + [self swapOldContentView:oldContentView + withNewContentView:newContentView]; + } +} + +- (void)swapOldContentView:(UIView *)oldContentView + withNewContentView:(UIView *)newContentView { + if (self.transitionType == ANBannerViewAdTransitionTypeNone) { + if (newContentView) { + [self addSubview:newContentView]; + [self removeSubviewsWithException:newContentView]; + } else { + [self removeSubviews]; + } + return; + } + + ANBannerViewAdTransitionType transitionType = self.transitionType; + if ((oldContentView && !newContentView) || (newContentView && !oldContentView)) { + transitionType = ANBannerViewAdTransitionTypeFade; + } + + ANBannerViewAdTransitionDirection transitionDirection = self.transitionDirection; + if (transitionDirection == ANBannerViewAdTransitionDirectionRandom) { + transitionDirection = arc4random_uniform(4); + } + + if (transitionType != ANBannerViewAdTransitionTypeFlip) { + newContentView.hidden = YES; + } + + if (newContentView) { + [self addSubview:newContentView]; + } + + self.transitionInProgress = @(YES); + + [UIView animateWithDuration:self.transitionDuration + animations:^{ + if (transitionType == ANBannerViewAdTransitionTypeFlip) { + CAKeyframeAnimation *oldContentViewAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; + oldContentViewAnimation.values = [self keyFrameValuesForOldContentViewFlipAnimationWithDirection:transitionDirection]; + oldContentViewAnimation.delegate = self; + oldContentViewAnimation.duration = self.transitionDuration; + [oldContentView.layer addAnimation:oldContentViewAnimation + forKey:@"oldContentView"]; + + CAKeyframeAnimation *newContentViewAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; + newContentViewAnimation.values = [self keyFrameValuesForNewContentViewFlipAnimationWithDirection:transitionDirection]; + newContentViewAnimation.duration = self.transitionDuration; + [newContentView.layer addAnimation:newContentViewAnimation + forKey:@"newContentView"]; + } else { + CATransition *transition = [CATransition animation]; + transition.startProgress = 0; + transition.endProgress = 1.0; + transition.type = [[self class] CATransitionTypeFromANTransitionType:transitionType]; + transition.subtype = [[self class] CATransitionSubtypeFromANTransitionDirection:transitionDirection + withANTransitionType:transitionType]; + transition.duration = self.transitionDuration; + transition.delegate = self; + + [oldContentView.layer addAnimation:transition + forKey:@"transition"]; + [newContentView.layer addAnimation:transition + forKey:@"transition"]; + + newContentView.hidden = NO; + oldContentView.hidden = YES; + } + }]; +} + ++ (NSString *)CATransitionSubtypeFromANTransitionDirection:(ANBannerViewAdTransitionDirection)transitionDirection + withANTransitionType:(ANBannerViewAdTransitionType)transitionType { + if (transitionType == ANBannerViewAdTransitionTypeFade) { + return kCATransitionFade; + } + + switch (transitionDirection) { + case ANBannerViewAdTransitionDirectionUp: + return kCATransitionFromTop; + case ANBannerViewAdTransitionDirectionDown: + return kCATransitionFromBottom; + case ANBannerViewAdTransitionDirectionLeft: + return kCATransitionFromRight; + case ANBannerViewAdTransitionDirectionRight: + return kCATransitionFromLeft; + default: + return kCATransitionFade; + } +} + ++ (NSString *)CATransitionTypeFromANTransitionType:(ANBannerViewAdTransitionType)transitionType { + switch (transitionType) { + case ANBannerViewAdTransitionTypeFade: + return kCATransitionPush; + case ANBannerViewAdTransitionTypePush: + return kCATransitionPush; + case ANBannerViewAdTransitionTypeMoveIn: + return kCATransitionMoveIn; + case ANBannerViewAdTransitionTypeReveal: + return kCATransitionReveal; + default: + return kCATransitionPush; + } +} + +static NSInteger const kANBannerAdViewNumberOfKeyframeValuesToGenerate = 35; +static CGFloat kANBannerAdViewPerspectiveValue = -1.0 / 750.0; + +- (NSArray *)keyFrameValuesForContentViewFlipAnimationWithDirection:(ANBannerViewAdTransitionDirection)direction + forOldContentView:(BOOL)isOldContentView { + CGFloat angle = 0.0f; + CGFloat x; + CGFloat y; + CGFloat frameFlipDimensionLength = 0.0f; + + switch (direction) { + case ANBannerViewAdTransitionDirectionUp: + x = 1; + y = 0; + angle = isOldContentView ? M_PI_2 : -M_PI_2; + frameFlipDimensionLength = CGRectGetHeight(self.frame); + break; + case ANBannerViewAdTransitionDirectionDown: + x = 1; + y = 0; + angle = isOldContentView ? -M_PI_2: M_PI_2; + frameFlipDimensionLength = CGRectGetHeight(self.frame); + break; + case ANBannerViewAdTransitionDirectionLeft: + x = 0; + y = 1; + angle = isOldContentView ? -M_PI_2 : M_PI_2; + frameFlipDimensionLength = CGRectGetWidth(self.frame); + break; + case ANBannerViewAdTransitionDirectionRight: + x = 0; + y = 1; + angle = isOldContentView ? M_PI_2 : -M_PI_2; + frameFlipDimensionLength = CGRectGetWidth(self.frame); + break; + default: + x = 1; + y = 0; + angle = isOldContentView ? M_PI_2 : -M_PI_2; + frameFlipDimensionLength = CGRectGetHeight(self.frame); + break; + } + + NSMutableArray *keyframeValues = [[NSMutableArray alloc] init]; + for (NSInteger valueNumber=0; valueNumber <= kANBannerAdViewNumberOfKeyframeValuesToGenerate; valueNumber++) { + CATransform3D transform = CATransform3DIdentity; + transform.m34 = kANBannerAdViewPerspectiveValue; + transform = CATransform3DTranslate(transform, 0, 0, -frameFlipDimensionLength / 2.0); + transform = CATransform3DRotate(transform, angle * valueNumber / kANBannerAdViewNumberOfKeyframeValuesToGenerate, x, y, 0); + transform = CATransform3DTranslate(transform, 0, 0, frameFlipDimensionLength / 2.0); + [keyframeValues addObject:[NSValue valueWithCATransform3D:transform]]; + } + return isOldContentView ? keyframeValues : [[keyframeValues reverseObjectEnumerator] allObjects]; +} + +- (NSArray *)keyFrameValuesForOldContentViewFlipAnimationWithDirection:(ANBannerViewAdTransitionDirection)direction { + return [self keyFrameValuesForContentViewFlipAnimationWithDirection:direction + forOldContentView:YES]; +} + +- (NSArray *)keyFrameValuesForNewContentViewFlipAnimationWithDirection:(ANBannerViewAdTransitionDirection)direction { + return [self keyFrameValuesForContentViewFlipAnimationWithDirection:direction + forOldContentView:NO]; +} + +- (void)animationDidStop:(CAAnimation *)anim + finished:(BOOL)flag { + [self removeSubviewsWithException:self.contentView]; + self.transitionInProgress = @(NO); +} + +- (NSNumber *)transitionInProgress { + if (!_transitionInProgress) _transitionInProgress = @(NO); + return _transitionInProgress; +} + #pragma mark Implementation of abstract methods from ANAdView - (void)openInBrowserWithController:(ANBrowserViewController *)browserViewController { @@ -289,6 +498,7 @@ - (void)adFetcher:(ANAdFetcher *)fetcher didFinishRequestWithResponse:(ANAdRespo } if (error) { + self.contentView = nil; [self adRequestFailedWithError:error]; } } diff --git a/sdk/internal/ANGlobal.h b/sdk/internal/ANGlobal.h index f2d08b7f3..f2b927bdd 100644 --- a/sdk/internal/ANGlobal.h +++ b/sdk/internal/ANGlobal.h @@ -35,7 +35,7 @@ #define AN_ERROR_TABLE @"errors" #define AN_DEFAULT_PLACEMENT_ID @"default_placement_id" -#define AN_SDK_VERSION @"1.18" +#define AN_SDK_VERSION @"1.19" #define APPNEXUS_BANNER_SIZE CGSizeMake(320, 50) #define APPNEXUS_MEDIUM_RECT_SIZE CGSizeMake(300, 250) @@ -48,6 +48,7 @@ #define kAppNexusAnimationDuration 0.4f #define kAppNexusMediationNetworkTimeoutInterval 15.0 #define kAppNexusMRAIDCheckViewableFrequency 1.0 +#define kAppNexusBannerAdTransitionDefaultDuration 1.0; // Banner AutoRefresh diff --git a/sdk/internal/ANInstallTrackerPixel.m b/sdk/internal/ANInstallTrackerPixel.m deleted file mode 100644 index 5215bc9a2..000000000 --- a/sdk/internal/ANInstallTrackerPixel.m +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright 2013 APPNEXUS INC - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "ANInstallTrackerPixel.h" - -#import "ANLogging.h" -#import "NSString+ANCategory.h" - -#define AN_INSTALL_TRACKER_PIXEL_MAX_ATTEMPTS 5 -#define AN_INSTALL_TRACKER_PIXEL_ATTEMPT_DURATION 30.0 - -@interface ANInstallTrackerPixel () -{ - NSUInteger __attempt; - NSTimeInterval __lastAttemptInterval; -} - -@property (nonatomic, readwrite, strong) NSMutableURLRequest *request; -@property (nonatomic, readwrite, strong) NSURLConnection *connection; -@property (nonatomic, readwrite, strong) NSMutableData *data; -@property (nonatomic, readwrite, strong) NSString *trackingID; -@property (nonatomic, readwrite, strong) NSString *ANHostnameInstallURL; -@property (nonatomic, readwrite, assign, getter = isLoading) BOOL loading; -@end - -@implementation ANInstallTrackerPixel -@synthesize request = __request; -@synthesize connection = __connection; -@synthesize data = __data; -@synthesize trackingID = __trackingID; -@synthesize loading = __loading; - -- (id)initWithTrackingID:(NSString *)trackingID -{ - self = [super init]; - - if (self != nil) - { - self.trackingID = trackingID; - self.data = [NSMutableData data]; - self.ANHostnameInstallURL = AN_MOBILE_HOSTNAME_INSTALL; - __lastAttemptInterval = 0; - - self.request = [[NSMutableURLRequest alloc] initWithURL:nil - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:kAppNexusRequestTimeoutInterval]; - [self.request setValue:ANUserAgent() forHTTPHeaderField:@"User-Agent"]; - } - - return self; -} - -- (void)setEndpoint:(ANMobileEndpoint)endpoint { - _endpoint = endpoint; - switch (endpoint) { - case ANMobileEndpointClientTesting: - self.ANHostnameInstallURL = AN_MOBILE_HOSTNAME_INSTALL_CTEST; - break; - case ANMobileEndpointSandbox: - self.ANHostnameInstallURL = AN_MOBILE_HOSTNAME_INSTALL_SAND; - break; - default: - self.ANHostnameInstallURL = AN_MOBILE_HOSTNAME_INSTALL; - break; - } -} - -- (NSString *)trackingIDParameter -{ - NSString *trackingID = self.trackingID ? self.trackingID : @""; - NSString *trackingIDParameter = [NSString stringWithFormat:@"&id=%@", trackingID]; - - return trackingIDParameter; -} - -- (NSString *)dontTrackEnabledParameter -{ - NSString *donttrackEnabled = @""; - - if (!ANAdvertisingTrackingEnabled()) { - donttrackEnabled = @"&dnt=1"; - } - - return donttrackEnabled; -} - -- (NSString *)applicationIdParameter -{ - NSString *appId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; - return [NSString stringWithFormat:@"&appid=%@", appId]; -} - -- (NSURL *)pixelURL -{ - NSString *urlString = [NSString stringWithFormat:@"http://%@?", self.ANHostnameInstallURL]; - - urlString = [urlString stringByAppendingString:[self trackingIDParameter]]; - urlString = [urlString stringByAppendingString:[self dontTrackEnabledParameter]]; - urlString = [urlString stringByAppendingString:[self applicationIdParameter]]; - urlString = [urlString stringByAppendingUrlParameter:@"idfa" value:ANUDID()]; - - return [NSURL URLWithString:urlString]; -} - -- (void)fireInstallTrackerPixel -{ - if (!self.isLoading) - { - NSURL *url = [self pixelURL]; - self.request.URL = url; - self.connection = [NSURLConnection connectionWithRequest:self.request delegate:self]; - } - else - { - ANLogWarn(@"Already fired install tracker pixel. Please wait for this call to finish before firing another."); - } -} - -#pragma mark NSURLConnectionDataDelegate - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response -{ - if ([response isKindOfClass:[NSHTTPURLResponse class]]) - { - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; - NSInteger status = [httpResponse statusCode]; - - if (status >= 400) - { - [connection cancel]; - NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat: - NSLocalizedString(@"Request failed with status code %d", @"Error Description: server request came back with error code."), - status] - forKey:NSLocalizedDescriptionKey]; - NSError *statusError = [NSError errorWithDomain:AN_ERROR_DOMAIN - code:status - userInfo:errorInfo]; - [self connection:connection didFailWithError:statusError]; - return; - } - } - - self.data = [NSMutableData data]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error -{ - ANLogWarn(@"Install tracker pixel connection %@ failed with error %@", connection, error); - - self.loading = NO; - - // If we failed, check to see if we're still within our max number of attempts - if (__attempt <= AN_INSTALL_TRACKER_PIXEL_MAX_ATTEMPTS) - { - ANLogDebug(@"Attempt number %d to fire install tracker pixel again. Firing after %f seconds.", __attempt, AN_INSTALL_TRACKER_PIXEL_ATTEMPT_DURATION); - // If we are, then fire it again after our old time + x * 30 seconds, where x is the attempt number. This will result in us trying after 0, 30, 90, 210, and 360 seconds. - __lastAttemptInterval = __lastAttemptInterval + AN_INSTALL_TRACKER_PIXEL_ATTEMPT_DURATION * __attempt; - [self performSelector:@selector(fireInstallTrackerPixel) withObject:nil afterDelay:__lastAttemptInterval]; - __attempt++; - } - else - { - ANLogWarn(@"Install tracker pixel failed to convert after %d tries. Stopping attempts.", AN_INSTALL_TRACKER_PIXEL_MAX_ATTEMPTS); - } -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d -{ - [self.data appendData:d]; -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)connection -{ - self.loading = NO; - - NSString *response = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]; - ANLogDebug(@"Install tracker pixel %@ received response: %@", self, response); -} - -@end diff --git a/sdk/internal/ANInterstitialAd.m b/sdk/internal/ANInterstitialAd.m index 5f6aca4ef..8e0dc16ba 100644 --- a/sdk/internal/ANInterstitialAd.m +++ b/sdk/internal/ANInterstitialAd.m @@ -23,6 +23,7 @@ #import "ANLogging.h" #import "ANMRAIDViewController.h" #import "ANPBBuffer.h" +#import "ANPBContainerView.h" #define AN_INTERSTITIAL_AD_TIMEOUT 60.0 @@ -154,9 +155,16 @@ - (void)displayAdFromViewController:(UIViewController *)controller { } else if ([adToShow conformsToProtocol:@protocol(ANCUSTOMADAPTERINTERSTITIAL)]) { [adToShow presentFromViewController:controller]; - - // capture mediated interstitials after show event - [ANPBBuffer captureDelayedImage:controller.presentedViewController.view forAuctionID:auctionID]; + if (auctionID) { + ANPBContainerView *logoView = [[ANPBContainerView alloc] initWithLogo]; + [controller.presentedViewController.view addSubview:logoView]; + [ANPBBuffer addAdditionalInfo:@{kANPBBufferAdWidthKey: @(CGRectGetWidth(controller.presentedViewController.view.frame)), + kANPBBufferAdHeightKey: @(CGRectGetHeight(controller.presentedViewController.view.frame))} + forAuctionID:auctionID]; + // capture mediated interstitials after show event + [ANPBBuffer captureDelayedImage:controller.presentedViewController.view + forAuctionID:auctionID]; + } } else { errorString = @"Got a non-presentable object %@. Cannot display interstitial."; diff --git a/sdk/internal/ANLogging.h b/sdk/internal/ANLogging.h index e201c5a20..d63ffae10 100644 --- a/sdk/internal/ANLogging.h +++ b/sdk/internal/ANLogging.h @@ -23,21 +23,16 @@ extern NSString *const kANLoggingNotification; extern NSString *const kANLogMessageKey; extern NSString *const kANLogMessageLevelKey; -void _ANLogTrace(NSString *format, ...); -void _ANLogDebug(NSString *format, ...); -void _ANLogInfo(NSString *format, ...); -void _ANLogWarn(NSString *format, ...); -void _ANLogError(NSString *format, ...); - void notifyListener(NSString *message, NSInteger messageLevel); #if AN_DEBUG_MODE -#define ANLogTrace(...) _ANLogTrace(__VA_ARGS__) -#define ANLogDebug(...) _ANLogDebug(__VA_ARGS__) -#define ANLogInfo(...) _ANLogInfo(__VA_ARGS__) -#define ANLogWarn(...) _ANLogWarn(__VA_ARGS__) -#define ANLogError(...) _ANLogError(__VA_ARGS__) +void _ANLog(ANLogLevel level, NSString *format, ...); +#define ANLogTrace(...) _ANLog(ANLogLevelTrace, __VA_ARGS__) +#define ANLogDebug(...) _ANLog(ANLogLevelDebug, __VA_ARGS__) +#define ANLogInfo(...) _ANLog(ANLogLevelInfo, __VA_ARGS__) +#define ANLogWarn(...) _ANLog(ANLogLevelWarn, __VA_ARGS__) +#define ANLogError(...) _ANLog(ANLogLevelError, __VA_ARGS__) #else diff --git a/sdk/internal/ANLogging.m b/sdk/internal/ANLogging.m index 79882c4ec..5d07216e6 100644 --- a/sdk/internal/ANLogging.m +++ b/sdk/internal/ANLogging.m @@ -22,68 +22,15 @@ NSString *const kANLogMessageKey = @"kANLogMessageKey"; NSString *const kANLogMessageLevelKey = @"kANLogMessageLevelKey"; -void _ANLogTrace(NSString *format, ...) -{ - if ([ANLogManager getANLogLevel] <= ANLogLevelTrace) - { +void _ANLog(ANLogLevel level, NSString *format, ...) { + if ([ANLogManager getANLogLevel] <= level) { format = [NSString stringWithFormat:@"%@: %@", AN_LOG_NAME, format]; va_list args; va_start(args, format); - notifyListener([[[NSString alloc] initWithFormat:format arguments:args] init], ANLogLevelTrace); - NSLogv(format, args); - va_end(args); - } -} - -void _ANLogDebug(NSString *format, ...) -{ - if ([ANLogManager getANLogLevel] <= ANLogLevelDebug) - { - format = [NSString stringWithFormat:@"%@: %@", AN_LOG_NAME, format]; - va_list args; - va_start(args, format); - notifyListener([[[NSString alloc] initWithFormat:format arguments:args] init], ANLogLevelDebug); - NSLogv(format, args); - va_end(args); - } -} - -void _ANLogWarn(NSString *format, ...) -{ - if ([ANLogManager getANLogLevel] <= ANLogLevelWarn) - { - format = [NSString stringWithFormat:@"%@: %@", AN_LOG_NAME, format]; - va_list args; - va_start(args, format); - notifyListener([[[NSString alloc] initWithFormat:format arguments:args] init], ANLogLevelWarn); - NSLogv(format, args); - va_end(args); - } -} - -void _ANLogInfo(NSString *format, ...) -{ - if ([ANLogManager getANLogLevel] <= ANLogLevelInfo) - { - format = [NSString stringWithFormat:@"%@: %@", AN_LOG_NAME, format]; - va_list args; - va_start(args, format); - notifyListener([[[NSString alloc] initWithFormat:format arguments:args] init], ANLogLevelInfo); - NSLogv(format, args); - va_end(args); - } -} - -void _ANLogError(NSString *format, ...) -{ - if ([ANLogManager getANLogLevel] <= ANLogLevelError) - { - format = [NSString stringWithFormat:@"%@: %@", AN_LOG_NAME, format]; - va_list args; - va_start(args, format); - notifyListener([[[NSString alloc] initWithFormat:format arguments:args] init], ANLogLevelError); - NSLogv(format, args); + NSString *fullString = [[NSString alloc] initWithFormat:format arguments:args]; va_end(args); + notifyListener(fullString, level); + NSLog(@"%@", fullString); } } diff --git a/sdk/internal/ANMediationAdViewController.h b/sdk/internal/ANMediationAdViewController.h index 4365f2c17..7e2b6e33a 100644 --- a/sdk/internal/ANMediationAdViewController.h +++ b/sdk/internal/ANMediationAdViewController.h @@ -30,4 +30,5 @@ @end @interface ANMediationAdViewController () -@end +@property (nonatomic, readwrite, weak) ANAdFetcher *adFetcher; +@end \ No newline at end of file diff --git a/sdk/internal/ANMediationAdViewController.m b/sdk/internal/ANMediationAdViewController.m index ee20143a2..06bc3af69 100644 --- a/sdk/internal/ANMediationAdViewController.m +++ b/sdk/internal/ANMediationAdViewController.m @@ -22,6 +22,9 @@ #import "ANLogging.h" #import "ANMediatedAd.h" #import "ANPBBuffer.h" +#import "NSString+ANCategory.h" +#import "ANPBContainerView.h" +#import "ANMediationContainerView.h" @interface ANMediationAdViewController () @@ -29,9 +32,17 @@ @interface ANMediationAdViewController () adViewDelegate; @property (nonatomic, readwrite, strong) ANMediatedAd *mediatedAd; +@property (nonatomic, readwrite, strong) NSDictionary *pitbullAdForDelayedCapture; + +// variables for measuring latency. +@property (nonatomic, readwrite, assign) NSTimeInterval latencyStart; +@property (nonatomic, readwrite, assign) NSTimeInterval latencyStop; +@end + +@interface ANAdFetcher () +- (NSTimeInterval)getTotalLatency:(NSTimeInterval)stopTime; @end @implementation ANMediationAdViewController @@ -40,7 +51,7 @@ + (ANMediationAdViewController *)initMediatedAd:(ANMediatedAd *)mediatedAd withFetcher:(ANAdFetcher *)fetcher adViewDelegate:(id)adViewDelegate { ANMediationAdViewController *controller = [[ANMediationAdViewController alloc] init]; - controller.fetcher = fetcher; + controller.adFetcher = fetcher; controller.adViewDelegate = adViewDelegate; if ([controller requestForAd:mediatedAd]) { @@ -97,6 +108,7 @@ - (BOOL)requestForAd:(ANMediatedAd *)ad { // Grab the size of the ad - interstitials will ignore this value CGSize sizeOfCreative = CGSizeMake([ad.width floatValue], [ad.height floatValue]); + BOOL requestedSuccessfully = [self requestAd:sizeOfCreative serverParameter:ad.param adUnitId:ad.adId @@ -148,7 +160,7 @@ - (void)clearAdapter { self.currentAdapter = nil; self.hasSucceeded = NO; self.hasFailed = YES; - self.fetcher = nil; + self.adFetcher = nil; self.adViewDelegate = nil; self.mediatedAd = nil; [self cancelTimeout]; @@ -172,7 +184,9 @@ - (BOOL)requestAd:(CGSize)size if ([[self.currentAdapter class] conformsToProtocol:@protocol(ANCUSTOMADAPTERBANNER)] && [self.currentAdapter respondsToSelector:@selector(requestBannerAdWithSize:rootViewController:serverParameter:adUnitId:targetingParameters:)]) { + [self markLatencyStart]; [self startTimeout]; + ANBANNERADVIEW *banner = (ANBANNERADVIEW *)adView; id bannerAdapter = (id) self.currentAdapter; [bannerAdapter requestBannerAdWithSize:size @@ -189,7 +203,9 @@ - (BOOL)requestAd:(CGSize)size if ([[self.currentAdapter class] conformsToProtocol:@protocol(ANCUSTOMADAPTERINTERSTITIAL)] && [self.currentAdapter respondsToSelector:@selector(requestInterstitialAdWithParameter:adUnitId:targetingParameters:)]) { + [self markLatencyStart]; [self startTimeout]; + id interstitialAdapter = (id) self.currentAdapter; [interstitialAdapter requestInterstitialAdWithParameter:parameterString adUnitId:idString @@ -287,23 +303,56 @@ - (void)didReceiveAd:(id)adObject { return; } self.hasSucceeded = YES; + [self markLatencyStop]; ANLogDebug(@"received an ad from the adapter"); + if ([adObject isKindOfClass:[UIView class]]) { + UIView *adView = (UIView *)adObject; + ANMediationContainerView *containerView = [[ANMediationContainerView alloc] initWithMediatedView:adView]; + containerView.controller = self; + adObject = containerView; + } + // save auctionInfo for the winning ad NSString *auctionID = [ANPBBuffer saveAuctionInfo:self.mediatedAd.auctionInfo]; + if (auctionID) { + [ANPBBuffer addAdditionalInfo:@{kANPBBufferMediatedNetworkNameKey: self.mediatedAd.className, + kANPBBufferMediatedNetworkPlacementIDKey: self.mediatedAd.adId} + forAuctionID:auctionID]; + if ([adObject isKindOfClass:[UIView class]]) { + UIView *adView = (UIView *)adObject; + [ANPBBuffer addAdditionalInfo:@{kANPBBufferAdWidthKey: @(CGRectGetWidth(adView.frame)), + kANPBBufferAdHeightKey: @(CGRectGetHeight(adView.frame))} + forAuctionID:auctionID]; + ANPBContainerView *containerView = [[ANPBContainerView alloc] initWithContentView:adView]; + adObject = containerView; + } + } + [self finish:(ANADRESPONSECODE)ANAdResponseSuccessful withAdObject:adObject auctionID:auctionID]; // if auctionInfo was present and had an auctionID, // screenshot the view. For banners, do it here if (auctionID && [adObject isKindOfClass:[UIView class]]) { - [ANPBBuffer captureDelayedImage:adObject forAuctionID:auctionID]; + if ([self.adViewDelegate respondsToSelector:@selector(transitionInProgress)]) { + NSNumber *transitionInProgress = [self.adViewDelegate performSelector:@selector(transitionInProgress)]; + if ([transitionInProgress boolValue] == YES) { + self.pitbullAdForDelayedCapture = @{auctionID: adObject}; + [self registerForPitbullScreenCaptureNotifications]; + } + } + + if (!self.pitbullAdForDelayedCapture) { + [ANPBBuffer captureDelayedImage:adObject forAuctionID:auctionID]; + } } } - (void)didFailToReceiveAd:(ANADRESPONSECODE)errorCode { if ([self checkIfHasResponded]) return; + [self markLatencyStop]; [self finish:errorCode withAdObject:nil auctionID:nil]; } @@ -312,8 +361,9 @@ - (void)finish:(ANADRESPONSECODE)errorCode withAdObject:(id)adObject auctionID:(NSString *)auctionID { // use queue to force return [self runInBlock:^(void) { - ANAdFetcher *fetcher = self.fetcher; - NSString *resultCBString = self.mediatedAd.resultCB; + ANAdFetcher *fetcher = self.adFetcher; + NSString *resultCBString = [self createResultCBRequest: + self.mediatedAd.resultCB reason:errorCode]; // fireResulCB will clear the adapter if fetcher exists if (!fetcher) { [self clearAdapter]; @@ -329,6 +379,39 @@ - (void)runInBlock:(void (^)())block { }); } +- (NSString *)createResultCBRequest:(NSString *)baseString reason:(int)reasonCode { + if ([baseString length] < 1) { + return @""; + } + + // append reason code + NSString *resultCBString = [baseString + stringByAppendingUrlParameter:@"reason" + value:[NSString stringWithFormat:@"%d",reasonCode]]; + + // append idfa + resultCBString = [resultCBString + stringByAppendingUrlParameter:@"idfa" + value:ANUDID()]; + + // append latency measurements + NSTimeInterval latency = [self getLatency] * 1000; // secs to ms + NSTimeInterval totalLatency = [self getTotalLatency] * 1000; // secs to ms + + if (latency > 0) { + resultCBString = [resultCBString + stringByAppendingUrlParameter:@"latency" + value:[NSString stringWithFormat:@"%.0f", latency]]; + } + if (totalLatency > 0) { + resultCBString = [resultCBString + stringByAppendingUrlParameter:@"total_latency" + value:[NSString stringWithFormat:@"%.0f", totalLatency]]; + } + + return resultCBString; +} + #pragma mark Timeout handler - (void)startTimeout { @@ -350,4 +433,95 @@ - (void)cancelTimeout { self.timeoutCanceled = YES; } +# pragma mark Latency Measurement + +/** + * Should be called immediately after mediated SDK returns + * from `requestAd` call. + */ +- (void)markLatencyStart { + self.latencyStart = [NSDate timeIntervalSinceReferenceDate]; +} + +/** + * Should be called immediately after mediated SDK + * calls either of `onAdLoaded` or `onAdFailed`. + */ +- (void)markLatencyStop { + self.latencyStop = [NSDate timeIntervalSinceReferenceDate]; +} + +/** + * The latency of the call to the mediated SDK. + */ +- (NSTimeInterval)getLatency { + if ((self.latencyStart > 0) && (self.latencyStop > 0)) { + return (self.latencyStop - self.latencyStart); + } + // return -1 if invalid. + return -1; +} + +/** + * The running total latency of the ad call. + */ +- (NSTimeInterval)getTotalLatency { + if (self.adFetcher && (self.latencyStop > 0)) { + return [self.adFetcher getTotalLatency:self.latencyStop]; + } + // return -1 if invalid. + return -1; +} + +#pragma mark - Pitbull Image Capture Transition Adjustments + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if (object == self.adViewDelegate) { + NSNumber *transitionInProgress = change[NSKeyValueChangeNewKey]; + if ([transitionInProgress boolValue] == NO) { + [self unregisterFromPitbullScreenCaptureNotifications]; + [self dispatchPitbullScreenCapture]; + } + } +} + +- (void)registerForPitbullScreenCaptureNotifications { + NSObject *object = self.adViewDelegate; + [object addObserver:self + forKeyPath:@"transitionInProgress" + options:NSKeyValueObservingOptionNew + context:nil]; +} + +- (void)unregisterFromPitbullScreenCaptureNotifications { + /* + Removing a non-registered observer results in an exception. There's no way to + check if you're registered or not. Hence the try-catch. + */ + NSObject *object = self.adViewDelegate; + @try { + [object removeObserver:self + forKeyPath:@"transitionInProgress"]; + } + @catch (NSException * __unused exception) {} +} + +- (void)dispatchPitbullScreenCapture { + if (self.pitbullAdForDelayedCapture) { + [self.pitbullAdForDelayedCapture enumerateKeysAndObjectsUsingBlock:^(NSString *auctionID, UIView *view, BOOL *stop) { + [ANPBBuffer captureImage:view + forAuctionID:auctionID]; + }]; + self.pitbullAdForDelayedCapture = nil; + } +} + +- (void)dealloc { + [self clearAdapter]; + [self unregisterFromPitbullScreenCaptureNotifications]; +} + @end \ No newline at end of file diff --git a/sdk/internal/ANMediationContainerView.h b/sdk/internal/ANMediationContainerView.h new file mode 100644 index 000000000..a36042c04 --- /dev/null +++ b/sdk/internal/ANMediationContainerView.h @@ -0,0 +1,26 @@ +/* Copyright 2014 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +@class ANMediationAdViewController; + +@interface ANMediationContainerView : UIView + +- (instancetype)initWithMediatedView:(UIView *)view; + +@property (nonatomic, readwrite, strong) ANMediationAdViewController *controller; + +@end \ No newline at end of file diff --git a/sdk/internal/ANInstallTrackerPixel.h b/sdk/internal/ANMediationContainerView.m similarity index 56% rename from sdk/internal/ANInstallTrackerPixel.h rename to sdk/internal/ANMediationContainerView.m index e90446f05..fb6083a27 100644 --- a/sdk/internal/ANInstallTrackerPixel.h +++ b/sdk/internal/ANMediationContainerView.m @@ -1,4 +1,4 @@ -/* Copyright 2013 APPNEXUS INC +/* Copyright 2014 APPNEXUS INC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,19 +13,16 @@ limitations under the License. */ -#import -#import "ANGlobal.h" +#import "ANMediationContainerView.h" -@protocol ANInstallTrackerPixelDelegate; +@implementation ANMediationContainerView -@interface ANInstallTrackerPixel : NSObject +- (instancetype)initWithMediatedView:(UIView *)view { + self = [super initWithFrame:view.frame]; + if (self) { + [self addSubview:view]; + } + return self; +} -@property (nonatomic, readwrite, assign) ANMobileEndpoint endpoint; - -- (id)initWithTrackingID:(NSString *)trackingID; -- (void)fireInstallTrackerPixel; - -@end - -@protocol ANInstallTrackerPixelDelegate @end diff --git a/sdk/internal/ANPBBuffer.h b/sdk/internal/ANPBBuffer.h index 12dae7a42..b9042c799 100644 --- a/sdk/internal/ANPBBuffer.h +++ b/sdk/internal/ANPBBuffer.h @@ -17,13 +17,23 @@ #import +extern NSString *const kANPBBufferMediatedNetworkNameKey; +extern NSString *const kANPBBufferMediatedNetworkPlacementIDKey; +extern NSString *const kANPBBufferAdWidthKey; +extern NSString *const kANPBBufferAdHeightKey; + @interface ANPBBuffer : NSObject + (void)handleUrl:(NSURL *)URL forView:(UIView *)view; // returns auction_id field for convenience + (NSString *)saveAuctionInfo:(NSString *)auctionInfo; ++ (void)addAdditionalInfo:(NSDictionary *)info + forAuctionID:(NSString *)auctionID; + (void)captureImage:(UIView *)view forAuctionID:(NSString *)auctionID; + (void)captureDelayedImage:(UIView *)view forAuctionID:(NSString *)auctionID; + ++ (void)launchPitbullApp; + @end diff --git a/sdk/internal/ANPBBuffer.m b/sdk/internal/ANPBBuffer.m index 365048a5a..a734620a8 100644 --- a/sdk/internal/ANPBBuffer.m +++ b/sdk/internal/ANPBBuffer.m @@ -19,17 +19,23 @@ #import "NSString+ANCategory.h" #import +#import "ANLogging.h" @implementation ANPBBuffer static NSMutableDictionary *pbBuffer; static NSMutableArray *pbKeys; -NSString *const kImageKey = @"kUTTypeImage"; -NSString *const kTextKey = @"kUTTypeUTF8PlainText"; -NSString *const kAuctionIDKey = @"auction_id"; -NSString *const kAuctionInfoKey = @"auction_info"; -NSString *const kPBAppUrl = @"appnexuspb://app?"; -int64_t const kPBCaptureDelay = 1; // delay in seconds +NSString *const kANPBBufferImageKey = @"kUTTypeImage"; +NSString *const kANPBBufferTextKey = @"kUTTypeUTF8PlainText"; +NSString *const kANPBBufferAuctionIDKey = @"auction_id"; +NSString *const kANPBBufferAuctionInfoKey = @"auction_info"; +NSString *const kANPBBufferPBAppUrl = @"appnexuspb://app?"; +NSString *const kANPBBufferMediatedNetworkNameKey = @"mediated_network_name"; +NSString *const kANPBBufferMediatedNetworkPlacementIDKey = @"mediated_network_placement_id"; +NSString *const kANPBBufferAdWidthKey = @"width"; +NSString *const kANPBBufferAdHeightKey = @"height"; + +int64_t const kANPBBufferPBCaptureDelay = 1; // delay in seconds # pragma mark static initializer, called before any methods are used @@ -53,13 +59,13 @@ + (void)handleUrl:(NSURL *)URL forView:(UIView *)view { } else if ([host isEqualToString:@"app"]) { // record auction_info into buffer NSDictionary *queryComponents = [[URL query] queryComponents]; - NSString *auctionInfo = [queryComponents objectForKey:kAuctionInfoKey]; + NSString *auctionInfo = [queryComponents objectForKey:kANPBBufferAuctionInfoKey]; [ANPBBuffer saveAuctionInfo:auctionInfo]; } else if ([host isEqualToString:@"capture"]) { // take a screenshot and attach it to the info for this auction ID NSDictionary *queryComponents = [[URL query] queryComponents]; - NSString *auctionID = [queryComponents objectForKey:kAuctionIDKey]; + NSString *auctionID = [queryComponents objectForKey:kANPBBufferAuctionIDKey]; [ANPBBuffer captureImage:view forAuctionID:auctionID]; } @@ -77,7 +83,7 @@ + (NSString *)saveAuctionInfo:(NSString *)auctionInfo { error:&jsonParsingError]; if (!jsonParsingError) { - NSString *auctionID = [jsonDict objectForKey:kAuctionIDKey]; + NSString *auctionID = [jsonDict objectForKey:kANPBBufferAuctionIDKey]; if (auctionID && ![ANPBBuffer containsAuctionInfoForID:auctionID]) { [ANPBBuffer trimBuffer]; [ANPBBuffer saveAuctionInfo:auctionInfo forAuctionID:auctionID]; @@ -91,7 +97,7 @@ + (NSString *)saveAuctionInfo:(NSString *)auctionInfo { // capture image with delay + (void)captureDelayedImage:(UIView *)view forAuctionID:(NSString *)auctionID { - [ANPBBuffer captureImage:view forAuctionID:auctionID afterDelay:kPBCaptureDelay]; + [ANPBBuffer captureImage:view forAuctionID:auctionID afterDelay:kANPBBufferPBCaptureDelay]; } // capture image with immediately @@ -123,12 +129,40 @@ + (void)trimBuffer { + (void)saveAuctionInfo:(NSString *)auctionInfo forAuctionID:(NSString *)auctionID { if (auctionID && auctionInfo) { - [pbBuffer setValue:@{kTextKey:auctionInfo} + [pbBuffer setValue:@{kANPBBufferTextKey:auctionInfo} forKey:auctionID]; [pbKeys addObject:auctionID]; } } ++ (void)addAdditionalInfo:(NSDictionary *)additionalInfo + forAuctionID:(NSString *)auctionID { + NSMutableDictionary *auctionInfo = [[pbBuffer objectForKey:auctionID] mutableCopy]; + if (auctionInfo) { + NSString *oldText = [auctionInfo objectForKey:kANPBBufferTextKey]; + NSData *oldData = [oldText dataUsingEncoding:NSUTF8StringEncoding]; + NSError *jsonParsingError = nil; + NSMutableDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:oldData + options:NSJSONReadingMutableContainers + error:&jsonParsingError]; + if (!jsonParsingError) { + [jsonDict addEntriesFromDictionary:additionalInfo]; + NSData *newData = [NSJSONSerialization dataWithJSONObject:jsonDict + options:0 + error:nil]; + NSString *newText = [[NSString alloc] initWithData:newData encoding:NSUTF8StringEncoding]; + if (newText) { + [auctionInfo setObject:newText + forKey:kANPBBufferTextKey]; + [pbBuffer setObject:auctionInfo + forKey:auctionID]; + } else { + ANLogDebug(@"Error passing additional info into adtrace object"); + } + } + } +} + // if pbKeys contains an auctionID key, then auctionInfo must be present + (BOOL)containsAuctionInfoForID:(NSString *)auctionID { return [pbKeys containsObject:auctionID]; // uses isEqual validation @@ -137,7 +171,7 @@ + (BOOL)containsAuctionInfoForID:(NSString *)auctionID { // check if the pbBuffer contains an image for auctionID + (BOOL)containsImageForID:(NSString *)auctionID { NSDictionary *item = [pbBuffer objectForKey:auctionID]; - return item && [item valueForKey:kImageKey]; + return item && [item valueForKey:kANPBBufferImageKey]; } /* Pasteboard methods */ @@ -152,7 +186,7 @@ + (NSArray *)getPasteboardArray { } + (void)setPasteboardAndLaunch { - NSURL *appURL = [NSURL URLWithString:kPBAppUrl]; + NSURL *appURL = [NSURL URLWithString:kANPBBufferPBAppUrl]; if ([[UIApplication sharedApplication] canOpenURL:appURL]) { // copy buffer to pasteboard for the app @@ -165,12 +199,16 @@ + (void)setPasteboardAndLaunch { } } ++ (void)launchPitbullApp { + [ANPBBuffer setPasteboardAndLaunch]; +} + /* Capture Image methods */ + (void)saveImage:(UIImage *)image forAuctionID:(NSString *)auctionID { NSMutableDictionary *item = [[pbBuffer objectForKey:auctionID] mutableCopy]; if (item) { - [item setValue:[ANPBBuffer compressImage:image] forKeyPath:kImageKey]; + [item setValue:[ANPBBuffer compressImage:image] forKeyPath:kANPBBufferImageKey]; [pbBuffer setObject:item forKey:auctionID]; } } @@ -196,14 +234,20 @@ + (void)captureImage:(__weak UIView *)view forAuctionID:(NSString *)auctionID afterDelay:(int64_t)delay { if (view && auctionID && ![ANPBBuffer containsImageForID:auctionID]) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), - dispatch_get_main_queue(), ^{ - UIView *strongView = view; - if (strongView) { - UIImage *image = [ANPBBuffer captureView:strongView]; - [ANPBBuffer saveImage:image forAuctionID:auctionID]; - } - }); + void (^takeScreenshot)() = ^() { + UIView *strongView = view; + if (strongView) { + UIImage *image = [ANPBBuffer captureView:strongView]; + [ANPBBuffer saveImage:image forAuctionID:auctionID]; + } + }; + + if (delay > 0) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), + dispatch_get_main_queue(), takeScreenshot); + } else { + takeScreenshot(); + } } } diff --git a/sdk/internal/ANPBContainerView.h b/sdk/internal/ANPBContainerView.h new file mode 100644 index 000000000..6c3965a55 --- /dev/null +++ b/sdk/internal/ANPBContainerView.h @@ -0,0 +1,23 @@ +/* Copyright 2014 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +@interface ANPBContainerView : UIView + +- (instancetype)initWithContentView:(UIView *)contentView; // For banners +- (instancetype)initWithLogo; // For interstitials + +@end \ No newline at end of file diff --git a/sdk/internal/ANPBContainerView.m b/sdk/internal/ANPBContainerView.m new file mode 100644 index 000000000..bbec38634 --- /dev/null +++ b/sdk/internal/ANPBContainerView.m @@ -0,0 +1,60 @@ +/* Copyright 2014 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "ANPBContainerView.h" +#import "ANPBBuffer.h" + +static CGFloat const kANPBContainerViewLogoWidth = 50.0f; +static CGFloat const kANPBContainerViewLogoAlpha = 0.6f; +static NSString *const kANPBContainerViewIconName = @"appnexus_logo_icon"; + +@implementation ANPBContainerView + +- (instancetype)initWithContentView:(UIView *)contentView { + self = [super initWithFrame:contentView.frame]; + if (self) { + [self addSubview:contentView]; + [self setupButton]; + } + return self; +} + +- (instancetype)initWithLogo { + self = [super initWithFrame:CGRectMake(0, 0, kANPBContainerViewLogoWidth, kANPBContainerViewLogoWidth)]; + if (self) { + [self setupButton]; + } + return self; +} + +- (void)launchPitbullApp { + [ANPBBuffer launchPitbullApp]; +} + +- (void)setupButton { + UIImage *icon = [UIImage imageNamed:kANPBContainerViewIconName]; + if (icon) { + UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, kANPBContainerViewLogoWidth, kANPBContainerViewLogoWidth)]; + [button setImage:icon + forState:UIControlStateNormal]; + [button setAlpha:kANPBContainerViewLogoAlpha]; + [self addSubview:button]; + [button addTarget:self + action:@selector(launchPitbullApp) + forControlEvents:UIControlEventTouchUpInside]; + } +} + +@end \ No newline at end of file diff --git a/sdk/internal/ANWebView.h b/sdk/internal/ANWebView.h index e04c5ea4f..a283893f5 100644 --- a/sdk/internal/ANWebView.h +++ b/sdk/internal/ANWebView.h @@ -14,11 +14,15 @@ */ #import "ANMRAIDProperties.h" +#import "ANAdWebViewController.h" #import #import @interface ANWebView : UIWebView + +@property (nonatomic, readwrite, strong) ANMRAIDAdWebViewController *controller; + @end @interface UIWebView (MRAIDExtensions)