diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..7353b4ed --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +tmp +bin +build +build/* +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.xcworkspace +!default.xcworkspace +xcuserdata +profile +*.moved-aside +DerivedData \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 754cb61d..8fd69c8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,19 @@ language: objective-c +osx_image: xcode7.1 env: -global: - - "MODULE_NAME=ti.redlaser" + global: + - "ARTIFACTS_AWS_REGION=us-east-1" + - "ARTIFACTS_S3_BUCKET=builds.appcelerator.com" + - "MODULE_NAME=ti.admob" before_install: - MODULE_ROOT=$PWD install: - cd $MODULE_ROOT - - curl -o install.sh https://raw.githubusercontent.com/appcelerator-modules/ci/master/travis/install.sh - - source install.sh -script: + - curl -o install.sh https://raw.githubusercontent.com/appcelerator-modules/ci/master/travis/install.sh #change this to appcelerator-modules once PR has been merged + - source install.sh -s "--branch 5_1_X" +script: - curl -o script.sh https://raw.githubusercontent.com/appcelerator-modules/ci/master/travis/script.sh - source script.sh after_success: # and this only on success - - curl -o deploy.sh https://raw.githubusercontent.com/appcelerator-modules/ci/master/travis/deploy.sh - - source deploy.sh \ No newline at end of file + - curl -o deploy.sh https://raw.githubusercontent.com/appcelerator-modules/ci/master/travis/deploy.sh + - source deploy.sh diff --git a/ios/Classes/TiAdmobModule.h b/ios/Classes/TiAdmobModule.h index 34678dd3..90e2d745 100644 --- a/ios/Classes/TiAdmobModule.h +++ b/ios/Classes/TiAdmobModule.h @@ -1,6 +1,6 @@ /** * Appcelerator Titanium Mobile - * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ diff --git a/ios/Classes/TiAdmobModule.m b/ios/Classes/TiAdmobModule.m index 2444deb0..3cdb7a7c 100644 --- a/ios/Classes/TiAdmobModule.m +++ b/ios/Classes/TiAdmobModule.m @@ -1,15 +1,16 @@ /** * Appcelerator Titanium Mobile - * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ #import "TiAdmobModule.h" +#import "TiAdmobTypes.h" #import "TiBase.h" #import "TiHost.h" #import "TiUtils.h" -#import "GADRequest.h" +#import @implementation TiAdmobModule @@ -65,6 +66,10 @@ -(void)didReceiveMemoryWarning:(NSNotification*)notification #pragma mark Constants -MAKE_SYSTEM_STR(SIMULATOR_ID,GAD_SIMULATOR_ID); +MAKE_SYSTEM_STR(SIMULATOR_ID, kGADSimulatorID); +MAKE_SYSTEM_PROP(GENDER_MALE, kGADGenderMale); +MAKE_SYSTEM_PROP(GENDER_FEMALE, kGADGenderFemale); +MAKE_SYSTEM_PROP(AD_TYPE_BANNER, TiAdmobAdTypeBanner); +MAKE_SYSTEM_PROP(AD_TYPE_INTERSTITIAL, TiAdmobAdTypeInterstitial) @end diff --git a/ios/Classes/TiAdmobTypes.h b/ios/Classes/TiAdmobTypes.h new file mode 100644 index 00000000..a7bb87c3 --- /dev/null +++ b/ios/Classes/TiAdmobTypes.h @@ -0,0 +1,13 @@ +/** + * Appcelerator Titanium Mobile + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. + * Licensed under the terms of the Apache Public License + * Please see the LICENSE included with this distribution for details. + */ + +#import + +NS_ENUM(NSUInteger, TiAdmobAdType) { + TiAdmobAdTypeBanner = 0, + TiAdmobAdTypeInterstitial +}; \ No newline at end of file diff --git a/ios/Classes/TiAdmobView.h b/ios/Classes/TiAdmobView.h index 1c5b694e..6a0ade6e 100644 --- a/ios/Classes/TiAdmobView.h +++ b/ios/Classes/TiAdmobView.h @@ -1,18 +1,53 @@ /** * Appcelerator Titanium Mobile - * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ #import "TiUIView.h" -#import "GADBannerView.h" -#import "GADBannerViewDelegate.h" +#import -@interface TiAdmobView : TiUIView { - -@private - GADBannerView *ad; +@interface TiAdmobView : TiUIView { + GADBannerView *bannerView; + GADInterstitial *interstitial; + GADRequest *request; } +- (void)initialize; + +- (void)showInterstitial; + +- (void)setAdUnitId_:(id)value; + +- (void)setKeywords_:(id)value; + +- (void)setDateOfBirth_:(id)value; + +- (void)setTestDevices_:(id)value; + +- (void)setAdBackgroundColor_:(id)value; + +- (void)setTagForChildDirectedTreatment_:(id)value; + +- (void)setRequestAgent_:(id)value; + +- (void)setContentURL_:(id)value; + +- (void)setExtras_:(id)args; + +- (void)setGender_:(id)value; + +- (void)setLocation_:(id)args; + +- (void)setPublisherId_:(id)value; + +- (void)setTesting_:(id)value; + +- (GADBannerView*)bannerView; + +- (GADInterstitial*)interstitial; + +- (GADRequest*)request; + @end diff --git a/ios/Classes/TiAdmobView.m b/ios/Classes/TiAdmobView.m index e68ddf10..a4de9e42 100644 --- a/ios/Classes/TiAdmobView.m +++ b/ios/Classes/TiAdmobView.m @@ -1,94 +1,266 @@ /** * Appcelerator Titanium Mobile - * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ #import "TiAdmobView.h" +#import "TiAdmobTypes.h" #import "TiApp.h" #import "TiUtils.h" @implementation TiAdmobView -#pragma mark - -#pragma mark Ad Lifecycle +#pragma mark - Ad Lifecycle --(void)refreshAd:(CGRect)bounds +- (GADRequest*)request { - if (ad != nil) { - [ad removeFromSuperview]; - RELEASE_TO_NIL(ad); + if (request == nil) { + request = [[GADRequest request] retain]; } - ad = [[GADBannerView alloc] initWithFrame:bounds]; - - // Specify the ad's "unit identifier." This is your AdMob Publisher ID. - ad.adUnitID = [self.proxy valueForKey:@"adUnitId"]; + return request; +} + +- (GADInterstitial*)interstitial +{ + if (interstitial == nil) { + id debugEnabled = [[self proxy] valueForKey:@"debugEnabled"]; + id adUnitId = [[self proxy] valueForKey:@"adUnitId"]; + + if (debugEnabled != nil && [TiUtils boolValue:debugEnabled def:NO] == YES) { + adUnitId = [self exampleAdId]; + } + + [self setBackgroundColor:[UIColor redColor]]; + + interstitial = [[GADInterstitial alloc] initWithAdUnitID:[TiUtils stringValue:adUnitId]]; + [interstitial setDelegate:self]; + } - // Let the runtime know which UIViewController to restore after taking - // the user wherever the ad goes and add it to the view hierarchy. - ad.rootViewController = [[TiApp app] controller]; + return interstitial; +} + +- (GADBannerView*)bannerView +{ + if (bannerView == nil) { + // Create the view with dynamic width and height specification. + bannerView = [[GADBannerView alloc] initWithAdSize:[self generateHeight]]; + + // Set the delegate to receive the internal events + [bannerView setDelegate:self]; + [bannerView setInAppPurchaseDelegate:self]; + + // Let the runtime know which UIViewController to restore after taking + // the user wherever the ad goes and add it to the view hierarchy. + [bannerView setRootViewController:[[TiApp app] controller]]; + + // Add the view to the view hirarchie + [self addSubview:[self bannerView]]; + } - // Initiate a generic request to load it with an ad. - GADRequest* request = [GADRequest request]; + return bannerView; +} + +- (void)frameSizeChanged:(CGRect)frame bounds:(CGRect)bounds +{ + id adType = [[self proxy] valueForKey:@"adType"]; + ENSURE_TYPE_OR_NIL(adType, NSNumber); - if ([self.proxy valueForKey:@"publisherId"]) { - NSLog(@"`publisherId` has been removed. Use `adUnitId` instead."); + if ([TiUtils intValue:adType def:TiAdmobAdTypeBanner] == TiAdmobAdTypeBanner) { + [[self bannerView] setAdSize:GADAdSizeFromCGSize(bounds.size)]; } - if ([TiUtils boolValue:[self.proxy valueForKey:@"testing"] def:NO]) { - NSLog(@"`testing` has been deprecated. Use `testDevices` instead."); - // testing is deprecated - request.testing = YES; + + [self initialize]; +} + +- (void)dealloc +{ + if (bannerView != nil) { + [bannerView removeFromSuperview]; + } + + RELEASE_TO_NIL(request); + RELEASE_TO_NIL(bannerView); + RELEASE_TO_NIL(interstitial); + + [super dealloc]; +} + +#pragma mark - Public API's + +- (void)initialize +{ + ENSURE_UI_THREAD_0_ARGS + id adType = [[self proxy] valueForKey:@"adType"]; + ENSURE_TYPE_OR_NIL(adType, NSNumber); + + if ([TiUtils intValue:adType def:TiAdmobAdTypeBanner] == TiAdmobAdTypeBanner) { + [[self bannerView] loadRequest:[self request]]; + } else { + [[self interstitial] loadRequest:[self request]]; } +} + +- (void)setAdUnitId_:(id)value +{ + ENSURE_TYPE(value, NSString); + + id adType = [[self proxy] valueForKey:@"adType"]; + id debugEnabled = [[self proxy] valueForKey:@"debugEnabled"]; - // Go through the configurable properties, populating our request with their values (if they have been provided). - request.keywords = [self.proxy valueForKey:@"keywords"]; - request.birthday = [self.proxy valueForKey:@"dateOfBirth"]; - request.testDevices = [self.proxy valueForKey:@"testDevices"]; - - NSString* backgroundColor = [self.proxy valueForKey:@"adBackgroundColor"]; - if (backgroundColor != nil) { - ad.backgroundColor = [[TiUtils colorValue:backgroundColor] _color]; + if (adType != nil && [TiUtils boolValue:adType def:TiAdmobAdTypeBanner] == TiAdmobAdTypeInterstitial) { + return; } - NSDictionary* location = [self.proxy valueForKey:@"location"]; - if (location != nil) { - [request setLocationWithLatitude:[[location valueForKey:@"latitude"] floatValue] - longitude:[[location valueForKey:@"longitude"] floatValue] - accuracy:[[location valueForKey:@"accuracy"] floatValue]]; + if (debugEnabled != nil && [TiUtils boolValue:debugEnabled] == YES) { + value = [self exampleAdId]; } - NSString* gender = [self.proxy valueForKey:@"gender"]; - if ([gender isEqualToString:@"male"]) { - request.gender = kGADGenderMale; - } else if ([gender isEqualToString:@"female"]) { - request.gender = kGADGenderFemale; + [[self bannerView] setAdUnitID:[TiUtils stringValue:value]]; +} + +- (void)setKeywords_:(id)value +{ + if ([value isKindOfClass:[NSString class]]) { + [[self request] setKeywords:@[[TiUtils stringValue:value]]]; + NSLog(@"[WARN] Ti.Admob: The property `keywords` for string values is deprecated. Please use an array of string values instead."); + } else if ([value isKindOfClass:[NSArray class]]) { + [[self request] setKeywords:value]; } else { - request.gender = kGADGenderUnknown; + NSLog(@"[ERROR] Ti.Admob: The property `keywords` must be either a String or an Array."); + } +} + +- (void)setDateOfBirth_:(id)value +{ + ENSURE_TYPE(value, NSDate); + [[self request] setBirthday:value]; +} + +- (void)setTestDevices_:(id)value +{ + ENSURE_TYPE(value, NSArray); + [[self request] setTestDevices:value]; +} + +- (void)setAdBackgroundColor_:(id)value +{ + id adType = [[self proxy] valueForKey:@"adType"]; + if (adType != nil && [TiUtils boolValue:adType def:TiAdmobAdTypeBanner] == TiAdmobAdTypeInterstitial) { + return; + } + + [[self bannerView] setBackgroundColor:[[TiUtils colorValue:value] _color]]; +} + +- (void)setTagForChildDirectedTreatment_:(id)value +{ + ENSURE_TYPE(value, NSNumber); + [[self request] tagForChildDirectedTreatment:[TiUtils boolValue:value]]; +} + +- (void)setRequestAgent_:(id)value +{ + ENSURE_TYPE(value, NSString); + [[self request] setRequestAgent:[TiUtils stringValue:value]]; +} + +- (void)setContentURL_:(id)value +{ + ENSURE_TYPE(value, NSString); + + if ([self validateUrl:value] == NO) { + NSLog(@"[WARN] Ti.Admob: The value of the property `contentURL` looks invalid."); } - [self addSubview:ad]; - ad.delegate = self; - [ad loadRequest:request]; + [[self request] setContentURL:[TiUtils stringValue:value]]; } --(void)frameSizeChanged:(CGRect)frame bounds:(CGRect)bounds +- (void)setExtras_:(id)args { - [self refreshAd:bounds]; + ENSURE_TYPE(args, NSDictionary); + + GADExtras *extras = [[GADExtras alloc] init]; + [extras setAdditionalParameters:args]; + [[self request] registerAdNetworkExtras:extras]; } --(void)dealloc +- (void)setGender_:(id)value { - if (ad != nil) { - [ad removeFromSuperview]; - RELEASE_TO_NIL(ad); + if ([value isKindOfClass:[NSString class]]) { + NSLog(@"[WARN] Ti.Admob: String values for `gender` are deprecated in 2.0.0, use the `GENDER_MALE` or `GENDER_FEMALE` constant instead."); + + if ([value isEqualToString:@"male"]) { + [[self request] setGender:kGADGenderMale]; + } else if ([value isEqualToString:@"female"]) { + [[self request] setGender:kGADGenderFemale]; + } else { + [[self request] setGender:kGADGenderUnknown]; + } + + return; } - [super dealloc]; + + ENSURE_TYPE(value, NSNumber); + [[self request] setGender:[TiUtils intValue:value def:kGADGenderUnknown]]; +} + +- (void)setLocation_:(id)args +{ + ENSURE_TYPE(args, NSDictionary); + + [[self request] setLocationWithLatitude:[[args valueForKey:@"latitude"] floatValue] + longitude:[[args valueForKey:@"longitude"] floatValue] + accuracy:[[args valueForKey:@"accuracy"] floatValue]]; +} + +- (void)showInterstitial +{ + if ([[self interstitial] isReady]) { + [[self interstitial] presentFromRootViewController:[[[TiApp app] controller] topPresentedController]]; + } +} + +#pragma mark - Deprecated / removed API's + +- (void)setPublisherId_:(id)value +{ + NSLog(@"[ERROR] Ti.Admob: The property `publisherId` has been removed in 2.0.0, use `adUnitId` instead."); +} + +- (void)setTesting_:(id)value +{ + NSLog(@"[ERROR] Ti.Admob: The property `testing` has been removed in 2.0.0, use `testDevices` instead."); +} + +#pragma mark - Utilities + +// http://stackoverflow.com/a/3819561/5537752 +- (BOOL)validateUrl:(NSString *)candidate { + NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; + NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; + return [urlTest evaluateWithObject:candidate]; +} + +- (GADAdSize)generateHeight +{ + id height = [[self proxy] valueForKey:@"height"]; + + if (height != nil) { + return GADAdSizeFullWidthPortraitWithHeight([TiUtils floatValue:height]); + } + + return kGADAdSizeFluid; } -#pragma mark - -#pragma mark Ad Delegate +- (NSString*)exampleAdId +{ + return @"ca-app-pub-0123456789012345/0123456789"; +} + +#pragma mark - Ad Delegate - (void)adViewDidReceiveAd:(GADBannerView *)view { @@ -97,7 +269,7 @@ - (void)adViewDidReceiveAd:(GADBannerView *)view - (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error { - [self.proxy fireEvent:@"didFailToReceiveAd"]; + [self.proxy fireEvent:@"didFailToReceiveAd" withObject:@{@"error":error.localizedDescription}]; } - (void)adViewWillPresentScreen:(GADBannerView *)adView @@ -120,5 +292,46 @@ - (void)adViewWillLeaveApplication:(GADBannerView *)adView [self.proxy fireEvent:@"willLeaveApplication"]; } +- (void)didReceiveInAppPurchase:(GADInAppPurchase *)purchase +{ + [self.proxy fireEvent:@"didReceiveInAppPurchase" withObject:@{ + @"productID": purchase.productID, + @"quantity": [NSNumber numberWithInteger:purchase.quantity] + }]; +} + +#pragma mark - Interstitial Delegate + +- (void)interstitialDidReceiveAd:(GADInterstitial *)ad +{ + [self.proxy fireEvent:@"didReceiveAd" withObject:@{@"isReady": NUMBOOL([[self interstitial] isReady])}]; + [self showInterstitial]; +} + +- (void)interstitial:(GADInterstitial *)ad didFailToReceiveAdWithError:(GADRequestError *)error +{ + [self.proxy fireEvent:@"didFailToReceiveAd" withObject:@{@"error":error.localizedDescription}]; +} + +- (void)interstitialWillPresentScreen:(GADInterstitial *)ad +{ + [self.proxy fireEvent:@"willPresentScreen"]; +} + +- (void)interstitialWillDismissScreen:(GADInterstitial *)ad +{ + [self.proxy fireEvent:@"willDismissScreen"]; +} + +- (void)interstitialDidDismissScreen:(GADInterstitial *)ad +{ + [self performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO]; + [self.proxy fireEvent:@"didDismissScreen"]; +} + +- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad +{ + [self.proxy fireEvent:@"willLeaveApplication"]; +} @end diff --git a/ios/Classes/TiAdmobViewProxy.h b/ios/Classes/TiAdmobViewProxy.h index 6ada2ac8..f2726051 100644 --- a/ios/Classes/TiAdmobViewProxy.h +++ b/ios/Classes/TiAdmobViewProxy.h @@ -1,6 +1,6 @@ /** * Appcelerator Titanium Mobile - * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ @@ -8,10 +8,10 @@ #import "TiViewProxy.h" #import "TiAdmobView.h" -@interface TiAdmobViewProxy : TiViewProxy { +@interface TiAdmobViewProxy : TiViewProxy {} -@private +- (TiAdmobView*)admobView; -} +- (void)receive:(id)unused; @end diff --git a/ios/Classes/TiAdmobViewProxy.m b/ios/Classes/TiAdmobViewProxy.m index f96bbed0..bbfbd497 100644 --- a/ios/Classes/TiAdmobViewProxy.m +++ b/ios/Classes/TiAdmobViewProxy.m @@ -1,14 +1,23 @@ /** * Appcelerator Titanium Mobile - * Copyright (c) 2010-2013 by Appcelerator, Inc. All Rights Reserved. + * Copyright (c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Apache Public License * Please see the LICENSE included with this distribution for details. */ #import "TiAdmobViewProxy.h" - #import "TiUtils.h" @implementation TiAdmobViewProxy +- (TiAdmobView*)admobView +{ + return (TiAdmobView*)[self view]; +} + +- (void)receive:(id)unused +{ + [[self admobView] initialize]; +} + @end diff --git a/ios/GoogleMobileAdsSdkiOS/GADAdMobExtras.h b/ios/GoogleMobileAdsSdkiOS/GADAdMobExtras.h deleted file mode 100644 index 4337d832..00000000 --- a/ios/GoogleMobileAdsSdkiOS/GADAdMobExtras.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// GADAdMobExtras.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import "GADAdNetworkExtras.h" -#import "GADModules.h" - -@interface GADAdMobExtras : NSObject - -/// The additional parameters publishers may send to the AdMob network. -@property(nonatomic, copy) NSDictionary *additionalParameters; - -@end diff --git a/ios/GoogleMobileAdsSdkiOS/GADBannerViewDelegate.h b/ios/GoogleMobileAdsSdkiOS/GADBannerViewDelegate.h deleted file mode 100644 index f0b66bb6..00000000 --- a/ios/GoogleMobileAdsSdkiOS/GADBannerViewDelegate.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// GADBannerViewDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import - -#import "GADModules.h" - -@class GADRequestError; -@class GADBannerView; - -/// Delegate for receiving state change messages from a GADBannerView such as ad requests -/// succeeding/failing or when an ad has been clicked. -@protocol GADBannerViewDelegate - -@optional - -#pragma mark Ad Request Lifecycle Notifications - -/// Called when an ad request loaded an ad. This is a good opportunity to add this view to the -/// hierarchy if it has not been added yet. If the ad was received as a part of the server-side auto -/// refreshing, you can examine the hasAutoRefreshed property of the view. -- (void)adViewDidReceiveAd:(GADBannerView *)view; - -/// Called when an ad request failed. Normally this is because no network connection was available -/// or no ads were available (i.e. no fill). If the error was received as a part of the server-side -/// auto refreshing, you can examine the hasAutoRefreshed property of the view. -- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error; - -#pragma mark Click-Time Lifecycle Notifications - -/// Called just before presenting the user a full screen view, such as a browser, in response to -/// clicking on an ad. Use this opportunity to stop animations, time sensitive interactions, etc. -/// -/// Normally the user looks at the ad, dismisses it, and control returns to your application by -/// calling adViewDidDismissScreen:. However if the user hits the Home button or clicks on an App -/// Store link your application will end. On iOS 4.0+ the next method called will be -/// applicationWillResignActive: of your UIViewController -/// (UIApplicationWillResignActiveNotification). Immediately after that adViewWillLeaveApplication: -/// is called. -- (void)adViewWillPresentScreen:(GADBannerView *)adView; - -/// Called just before dismissing a full screen view. -- (void)adViewWillDismissScreen:(GADBannerView *)adView; - -/// Called just after dismissing a full screen view. Use this opportunity to restart anything you -/// may have stopped as part of adViewWillPresentScreen:. -- (void)adViewDidDismissScreen:(GADBannerView *)adView; - -/// Called just before the application will background or terminate because the user clicked on an -/// ad that will launch another application (such as the App Store). The normal -/// UIApplicationDelegate methods, like applicationDidEnterBackground:, will be called immediately -/// before this. -- (void)adViewWillLeaveApplication:(GADBannerView *)adView; - -@end diff --git a/ios/GoogleMobileAdsSdkiOS/GADModules.h b/ios/GoogleMobileAdsSdkiOS/GADModules.h deleted file mode 100644 index c19e1199..00000000 --- a/ios/GoogleMobileAdsSdkiOS/GADModules.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// GADModules.h -// Google Mobile Ads SDK -// -// Copyright 2014 Google Inc. All rights reserved. -// - -// If your target uses modules, importing this file will automatically link the frameworks used by -// the Google Mobile Ads library. - -#if __has_feature(objc_modules) -@import AdSupport; -@import AudioToolbox; -@import AVFoundation; -@import CoreGraphics; -@import CoreTelephony; -@import EventKit; -@import EventKitUI; -@import Foundation; -@import MessageUI; -@import StoreKit; -@import SystemConfiguration; -@import UIKit; -#endif diff --git a/ios/GoogleMobileAdsSdkiOS/README.txt b/ios/GoogleMobileAdsSdkiOS/README.txt deleted file mode 100644 index 72fb983d..00000000 --- a/ios/GoogleMobileAdsSdkiOS/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -============================= -Google Mobile Ads SDK for iOS -============================= - -This is the Google Mobile Ads SDK for iOS. - -Requirements: -- Xcode 5.1 or later. -- Runtime of iOS 5.0 or later. - -The latest documentation and code samples are available at: -https://developers.google.com/mobile-ads-sdk/ diff --git a/ios/GoogleMobileAdsSdkiOS/libGoogleAdMobAds.a b/ios/GoogleMobileAdsSdkiOS/libGoogleAdMobAds.a deleted file mode 100644 index 1199b075..00000000 Binary files a/ios/GoogleMobileAdsSdkiOS/libGoogleAdMobAds.a and /dev/null differ diff --git a/ios/admob.xcodeproj/project.pbxproj b/ios/admob.xcodeproj/project.pbxproj index 5a6fec09..8f2c346c 100644 --- a/ios/admob.xcodeproj/project.pbxproj +++ b/ios/admob.xcodeproj/project.pbxproj @@ -13,6 +13,8 @@ 249BE67411B47B3800AF41CF /* TiAdmobView.m in Sources */ = {isa = PBXBuildFile; fileRef = 249BE67211B47B3800AF41CF /* TiAdmobView.m */; }; 24DD6CF91134B3F500162E58 /* TiAdmobModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 24DD6CF71134B3F500162E58 /* TiAdmobModule.h */; }; 24DD6CFA1134B3F500162E58 /* TiAdmobModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 24DD6CF81134B3F500162E58 /* TiAdmobModule.m */; }; + 3A1034741C217B0A00F16663 /* GoogleMobileAds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A1034731C217B0A00F16663 /* GoogleMobileAds.framework */; }; + 3AF5B7731C233383002E3DC7 /* TiAdmobTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF5B7711C233383002E3DC7 /* TiAdmobTypes.h */; }; AA747D9F0F9514B9006C5449 /* TiAdmob_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* TiAdmob_Prefix.pch */; }; AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; }; CE6C17A01982D1170017C788 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE6C179F1982D1170017C788 /* AdSupport.framework */; }; @@ -21,19 +23,6 @@ CE6C17A61982D1660017C788 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE6C17A51982D1660017C788 /* CoreTelephony.framework */; }; CE6C17A81982D1780017C788 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE6C17A71982D1780017C788 /* StoreKit.framework */; }; CE6C17AA1982D1870017C788 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE6C17A91982D1870017C788 /* SystemConfiguration.framework */; }; - CE6C17DC1982D1C90017C788 /* GADAdMobExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17BF1982D1C90017C788 /* GADAdMobExtras.h */; }; - CE6C17DD1982D1C90017C788 /* GADAdNetworkExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C01982D1C90017C788 /* GADAdNetworkExtras.h */; }; - CE6C17DE1982D1C90017C788 /* GADAdSize.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C11982D1C90017C788 /* GADAdSize.h */; }; - CE6C17DF1982D1C90017C788 /* GADBannerView.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C21982D1C90017C788 /* GADBannerView.h */; }; - CE6C17E01982D1C90017C788 /* GADBannerViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C31982D1C90017C788 /* GADBannerViewDelegate.h */; }; - CE6C17E11982D1C90017C788 /* GADInAppPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C41982D1C90017C788 /* GADInAppPurchase.h */; }; - CE6C17E21982D1C90017C788 /* GADInAppPurchaseDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C51982D1C90017C788 /* GADInAppPurchaseDelegate.h */; }; - CE6C17E31982D1C90017C788 /* GADInterstitial.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C61982D1C90017C788 /* GADInterstitial.h */; }; - CE6C17E41982D1C90017C788 /* GADInterstitialDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C71982D1C90017C788 /* GADInterstitialDelegate.h */; }; - CE6C17E51982D1C90017C788 /* GADModules.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C81982D1C90017C788 /* GADModules.h */; }; - CE6C17E61982D1C90017C788 /* GADRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17C91982D1C90017C788 /* GADRequest.h */; }; - CE6C17E71982D1C90017C788 /* GADRequestError.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C17CA1982D1C90017C788 /* GADRequestError.h */; }; - CE6C17F21982D7F40017C788 /* libGoogleAdMobAds.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE6C17CB1982D1C90017C788 /* libGoogleAdMobAds.a */; }; DAD5D7CF12527E11009CF986 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD5D7CE12527E11009CF986 /* AudioToolbox.framework */; }; DAD5D7D512527E2F009CF986 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD5D7D412527E2F009CF986 /* MessageUI.framework */; }; /* End PBXBuildFile section */ @@ -46,6 +35,8 @@ 24DD6CF71134B3F500162E58 /* TiAdmobModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TiAdmobModule.h; path = Classes/TiAdmobModule.h; sourceTree = ""; }; 24DD6CF81134B3F500162E58 /* TiAdmobModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TiAdmobModule.m; path = Classes/TiAdmobModule.m; sourceTree = ""; }; 24DD6D1B1134B66800162E58 /* titanium.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = titanium.xcconfig; sourceTree = ""; }; + 3A1034731C217B0A00F16663 /* GoogleMobileAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMobileAds.framework; path = platform/ios/GoogleMobileAds.framework; sourceTree = SOURCE_ROOT; }; + 3AF5B7711C233383002E3DC7 /* TiAdmobTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TiAdmobTypes.h; path = Classes/TiAdmobTypes.h; sourceTree = ""; }; AA747D9E0F9514B9006C5449 /* TiAdmob_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TiAdmob_Prefix.pch; sourceTree = SOURCE_ROOT; }; AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; CE6C179F1982D1170017C788 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; @@ -54,20 +45,6 @@ CE6C17A51982D1660017C788 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; CE6C17A71982D1780017C788 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; CE6C17A91982D1870017C788 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - CE6C17BF1982D1C90017C788 /* GADAdMobExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdMobExtras.h; sourceTree = ""; }; - CE6C17C01982D1C90017C788 /* GADAdNetworkExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdNetworkExtras.h; sourceTree = ""; }; - CE6C17C11982D1C90017C788 /* GADAdSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADAdSize.h; sourceTree = ""; }; - CE6C17C21982D1C90017C788 /* GADBannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADBannerView.h; sourceTree = ""; }; - CE6C17C31982D1C90017C788 /* GADBannerViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADBannerViewDelegate.h; sourceTree = ""; }; - CE6C17C41982D1C90017C788 /* GADInAppPurchase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchase.h; sourceTree = ""; }; - CE6C17C51982D1C90017C788 /* GADInAppPurchaseDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInAppPurchaseDelegate.h; sourceTree = ""; }; - CE6C17C61982D1C90017C788 /* GADInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInterstitial.h; sourceTree = ""; }; - CE6C17C71982D1C90017C788 /* GADInterstitialDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADInterstitialDelegate.h; sourceTree = ""; }; - CE6C17C81982D1C90017C788 /* GADModules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADModules.h; sourceTree = ""; }; - CE6C17C91982D1C90017C788 /* GADRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADRequest.h; sourceTree = ""; }; - CE6C17CA1982D1C90017C788 /* GADRequestError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADRequestError.h; sourceTree = ""; }; - CE6C17CB1982D1C90017C788 /* libGoogleAdMobAds.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGoogleAdMobAds.a; sourceTree = ""; }; - CE6C17CC1982D1C90017C788 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; D2AAC07E0554694100DB518D /* libTiAdmob.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTiAdmob.a; sourceTree = BUILT_PRODUCTS_DIR; }; DAD5D7CE12527E11009CF986 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; DAD5D7D112527E1A009CF986 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; @@ -79,7 +56,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CE6C17F21982D7F40017C788 /* libGoogleAdMobAds.a in Frameworks */, + 3A1034741C217B0A00F16663 /* GoogleMobileAds.framework in Frameworks */, CE6C17A01982D1170017C788 /* AdSupport.framework in Frameworks */, DAD5D7CF12527E11009CF986 /* AudioToolbox.framework in Frameworks */, CE6C17A21982D12D0017C788 /* AVFoundation.framework in Frameworks */, @@ -106,7 +83,6 @@ 0867D691FE84028FC02AAC07 /* admob */ = { isa = PBXGroup; children = ( - CE6C17AB1982D1C90017C788 /* GoogleMobileAdsSdkiOS */, 08FB77AEFE84172EC02AAC07 /* Classes */, 32C88DFF0371C24200C91783 /* Other Sources */, 0867D69AFE84028FC02AAC07 /* Frameworks */, @@ -118,6 +94,7 @@ 0867D69AFE84028FC02AAC07 /* Frameworks */ = { isa = PBXGroup; children = ( + CE6C17AB1982D1C90017C788 /* AdMob iOS SDK */, CE6C17A91982D1870017C788 /* SystemConfiguration.framework */, CE6C17A71982D1780017C788 /* StoreKit.framework */, CE6C17A51982D1660017C788 /* CoreTelephony.framework */, @@ -141,6 +118,7 @@ 249BE66E11B47B2700AF41CF /* TiAdmobViewProxy.m */, 249BE67111B47B3800AF41CF /* TiAdmobView.h */, 249BE67211B47B3800AF41CF /* TiAdmobView.m */, + 3AF5B7711C233383002E3DC7 /* TiAdmobTypes.h */, ); name = Classes; sourceTree = ""; @@ -154,24 +132,12 @@ name = "Other Sources"; sourceTree = ""; }; - CE6C17AB1982D1C90017C788 /* GoogleMobileAdsSdkiOS */ = { + CE6C17AB1982D1C90017C788 /* AdMob iOS SDK */ = { isa = PBXGroup; children = ( - CE6C17BF1982D1C90017C788 /* GADAdMobExtras.h */, - CE6C17C01982D1C90017C788 /* GADAdNetworkExtras.h */, - CE6C17C11982D1C90017C788 /* GADAdSize.h */, - CE6C17C21982D1C90017C788 /* GADBannerView.h */, - CE6C17C31982D1C90017C788 /* GADBannerViewDelegate.h */, - CE6C17C41982D1C90017C788 /* GADInAppPurchase.h */, - CE6C17C51982D1C90017C788 /* GADInAppPurchaseDelegate.h */, - CE6C17C61982D1C90017C788 /* GADInterstitial.h */, - CE6C17C71982D1C90017C788 /* GADInterstitialDelegate.h */, - CE6C17C81982D1C90017C788 /* GADModules.h */, - CE6C17C91982D1C90017C788 /* GADRequest.h */, - CE6C17CA1982D1C90017C788 /* GADRequestError.h */, - CE6C17CB1982D1C90017C788 /* libGoogleAdMobAds.a */, - CE6C17CC1982D1C90017C788 /* README.txt */, + 3A1034731C217B0A00F16663 /* GoogleMobileAds.framework */, ); + name = "AdMob iOS SDK"; path = GoogleMobileAdsSdkiOS; sourceTree = ""; }; @@ -182,22 +148,11 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CE6C17E21982D1C90017C788 /* GADInAppPurchaseDelegate.h in Headers */, - CE6C17E41982D1C90017C788 /* GADInterstitialDelegate.h in Headers */, AA747D9F0F9514B9006C5449 /* TiAdmob_Prefix.pch in Headers */, - CE6C17E31982D1C90017C788 /* GADInterstitial.h in Headers */, - CE6C17DF1982D1C90017C788 /* GADBannerView.h in Headers */, 24DD6CF91134B3F500162E58 /* TiAdmobModule.h in Headers */, - CE6C17E01982D1C90017C788 /* GADBannerViewDelegate.h in Headers */, - CE6C17E61982D1C90017C788 /* GADRequest.h in Headers */, - CE6C17E71982D1C90017C788 /* GADRequestError.h in Headers */, - CE6C17DD1982D1C90017C788 /* GADAdNetworkExtras.h in Headers */, 249BE66F11B47B2700AF41CF /* TiAdmobViewProxy.h in Headers */, - CE6C17DE1982D1C90017C788 /* GADAdSize.h in Headers */, + 3AF5B7731C233383002E3DC7 /* TiAdmobTypes.h in Headers */, 249BE67311B47B3800AF41CF /* TiAdmobView.h in Headers */, - CE6C17E11982D1C90017C788 /* GADInAppPurchase.h in Headers */, - CE6C17E51982D1C90017C788 /* GADModules.h in Headers */, - CE6C17DC1982D1C90017C788 /* GADAdMobExtras.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -227,7 +182,7 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0600; + LastUpgradeCheck = 0720; }; buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "admob" */; compatibilityVersion = "Xcode 3.2"; @@ -267,6 +222,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DSTROOT = /tmp/TiAdmob.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/GoogleMobileAdsSdkiOS", + "$(PROJECT_DIR)/platform/ios", + ); GCC_C_LANGUAGE_STANDARD = c99; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -315,6 +275,11 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; DSTROOT = /tmp/TiAdmob.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/GoogleMobileAdsSdkiOS", + "$(PROJECT_DIR)/platform/ios", + ); GCC_C_LANGUAGE_STANDARD = c99; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -362,6 +327,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DSTROOT = /tmp/TiAdmob.dst; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = c99; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; diff --git a/ios/admob.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/admob.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/ios/admob.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/admob.xcodeproj/project.xcworkspace/xcuserdata/hans.xcuserdatad/UserInterfaceState.xcuserstate b/ios/admob.xcodeproj/project.xcworkspace/xcuserdata/hans.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 00000000..2122a23f Binary files /dev/null and b/ios/admob.xcodeproj/project.xcworkspace/xcuserdata/hans.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ios/admob.xcodeproj/xcuserdata/hans.xcuserdatad/xcschemes/admob.xcscheme b/ios/admob.xcodeproj/xcuserdata/hans.xcuserdatad/xcschemes/admob.xcscheme new file mode 100644 index 00000000..71017cb8 --- /dev/null +++ b/ios/admob.xcodeproj/xcuserdata/hans.xcuserdatad/xcschemes/admob.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/admob.xcodeproj/xcuserdata/hans.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/admob.xcodeproj/xcuserdata/hans.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..200a5d7e --- /dev/null +++ b/ios/admob.xcodeproj/xcuserdata/hans.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + admob.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + D2AAC07D0554694100DB518D + + primary + + + + + diff --git a/ios/documentation/changelog.md b/ios/documentation/changelog.md index 652c4263..21d9657c 100644 --- a/ios/documentation/changelog.md +++ b/ios/documentation/changelog.md @@ -1,5 +1,7 @@ # Change Log
+v2.0.0 	[MOD-2182] Updating Admob SDK to 7.6.0, support iOS 9, support for new API's'
+
 v1.9.0 	[TIMOB-18092] ti.admob added 64bit support for iOS #15 
 
 v1.8.0  [TIMOB-17928] Updated to build for 64-bit
diff --git a/ios/documentation/index.md b/ios/documentation/index.md
index 0844a1d8..6aaa0832 100644
--- a/ios/documentation/index.md
+++ b/ios/documentation/index.md
@@ -14,8 +14,8 @@ started with using this module in your application.
 The Google AdMob Ads SDK has the following requirements:
 
 * An AdMob site ID.
-* Xcode 5.1 or later.
-* Runtime of iOS 5.0 or later.
+* Xcode 6.4 or later.
+* Runtime of iOS 7.1 or later.
 
 The SDK also requires that the following frameworks are available when you build your application:
 
@@ -43,6 +43,14 @@ To access this module from JavaScript, you would do the following:
 
 A constant to be passed in an array to the `testDevices` property to get test ads on the simulator.
 
+### Number GENDER_MALE
+
+A constant to be passed to the `gender` property to specify a gender if used.
+
+### Number GENDER_FEMALE
+
+A constant to be passed to the `gender` property to specify a gender if used. 
+
 ## Functions
 
 ### Ti.Admob.createView({...})
@@ -55,25 +63,37 @@ parameters[object]: a dictionary object of properties defined in [Ti.Admob.View]
 
 #### Example:
 
-	Admob.createView({
-		top: 0, left: 0,
-		width: 320, height: 50,
+	var ad = Admob.createView({
+		top: 0, 
+		width: 320, // Will calculate the width internally to fit its container if not specified
+        height: 50,
+        debugEnabled: true, // If enabled, a dummy value for `adUnitId` will be used to test
+        adType: Admob.AD_TYPE_BANNER, // One of `AD_TYPE_BANNER` (default) or `AD_TYPE_INTERSTITIAL`
 		adUnitId: '<>', // You can get your own at http: //www.admob.com/
-		adBackgroundColor: 'black',
-		// You can get your device's id for testDevices by looking in the console log after the app launched
-		testDevices: [Admob.SIMULATOR_ID],
+		adBackgroundColor: 'black', 
+		testDevices: [Admob.SIMULATOR_ID], // You can get your device's id by looking in the console log
 		dateOfBirth: new Date(1985, 10, 1, 12, 1, 1),
-		gender: 'male',
-		keywords: ''
+        gender: Admob.GENDER_MALE, // GENDER_MALE or GENDER_FEMALE, default: undefined
+        contentURL: 'https://admob.com', // URL string for a webpage whose content matches the app content.
+        requestAgent: 'Titanium Mobile App', // String that identifies the ad request's origin.
+        extras: {"version": 1.0, "name": "My App"}, // Object of additional infos
+        tagForChildDirectedTreatment: false, // http:///business.ftc.gov/privacy-and-security/childrens-privacy for more infos
+		keywords: ['keyword1', 'keyword2']
 	});
 
+### Interstitials
+
+To receive an interstitional ad, you need to call `ad.receive()` instead of adding it to the viewe hierarchy. 
+It fires the `didReceiveAd` event if the  ad was successfully received, the `didFailToReceiveAd` event otherwise. Please check 
+the example for a detailed example of different banner types.
+
 ## Usage
 
 See example.
 
 ## Author
 
-Jeff Haynie, Stephen Tramer, Jasper Kennis, and Jon Alter
+Jeff Haynie, Stephen Tramer, Jasper Kennis, Jon Alter, Hans Knoechel
 
 ## Module History
 
@@ -85,6 +105,6 @@ Please direct all questions, feedback, and concerns to [info@appcelerator.com](m
 
 ## License
 
-Copyright(c) 2010-2014 by Appcelerator, Inc. All Rights Reserved. Please see the LICENSE file included in the distribution for further details.
+Copyright(c) 2010-2015 by Appcelerator, Inc. All Rights Reserved. Please see the LICENSE file included in the distribution for further details.
 
 [Ti.Admob.View]: view.html
\ No newline at end of file
diff --git a/ios/documentation/view.md b/ios/documentation/view.md
index adf75329..dee62a73 100644
--- a/ios/documentation/view.md
+++ b/ios/documentation/view.md
@@ -12,6 +12,9 @@ ad will be loaded from the server automatically:
 * 468x60
 * 728x90
 
+Note: Starting in 2.0.0, you just need to specify a height and an appropriate ad is selected by the Admob SDK.
+See the example.js for more infos.
+
 ## Properties
 
 ### string adUnitId
@@ -22,12 +25,6 @@ The ad Unit ID for admob.
 
 The background color used for the ad.
 
-### boolean testing (deprecated)
-
-Whether or not admob should be run in testing mode.  Running in testing mode
-returns test ads to the simulator when running in simulator, and the current
-device when running from device. 
-
 ### Array[String] testDevices
 
 An array of test device ids. Adding the id of a test device to this array 
@@ -37,7 +34,7 @@ Use the module constant `SIMULATOR_ID` to use the simulator as a test device.
 If you do not know the id for your device, launch your app and request an ad 
 like you normally would, then look in the console for the id. 
 
-eg.  To get test ads on this device, call: request.testDevices = @[ @"980bb6fbbb6687047c631fe21136869b" ];
+eg.  To get test ads on this device, set the property `debugEnabled` to true
 
 Add the id to the array passed to `testDevices`.
 
@@ -48,11 +45,11 @@ for determining ad delivery.
 
 ### string gender
 
-The user's gender for the purpose of determining ad delivery. This should be "male" or "female", in lower case.
+The user's gender for the purpose of determining ad delivery. This should be one of the constants `GENDER_MALE` or `GENDER_FEMALE`.
 
-### string keywords
+### Array[String] keywords
 
-Keywords used to determine ad delivery.
+An array of keywords used to determine ad delivery.
 
 ### object location
 
@@ -62,30 +59,67 @@ A dictionary with the location of the user for location-based ads:
 * float longitude
 * float accuracy
 
+### object extras
+
+Ad networks may have additional parameters they accept. To pass these parameters to them, create the ad network extras 
+object for that network, fill in the parameters, and register it here. The ad network should have a header defining the 
+interface for the `extras` object to create. All networks will have access to the basic settings you've set in this 
+GADRequest (gender, birthday, testing mode, etc.). If you register an extras object that is the same class as one you have
+
+### String contentURL
+
+URL string for a webpage whose content matches the app content. This webpage content is used for targeting purposes.
+
+### String requestAgent
+
+String that identifies the ad request's origin. Third party libraries that reference the Mobile. Ads SDK should set this property 
+to denote the platform from which the ad request originated. For example, a third party ad network called "CoolAds network" that 
+is mediating requests to the Mobile Ads SDK should set this property as "CoolAds".
+
+### Boolean tagForChildDirectedTreatment
+
+This property allows you to specify whether you would like your app to be treated as child-directed for purposes of the 
+Children's Online Privacy Protection Act (COPPA), http:///business.ftc.gov/privacy-and-security/childrens-privacy.
+
+If you call this method with YES, you are indicating that your app should be treated as child-directed for purposes of the 
+Children's Online Privacy Protection Act (COPPA). If you call this method with NO, you are indicating that your app should 
+not be treated as child-directed for purposes of the Children's Online Privacy Protection Act (COPPA). If you do not call this 
+method, ad requests will include no indication of how you would like your app treated with respect to COPPA.
+
+By setting this method, you certify that this notification is accurate and you are authorized to act on behalf of the owner of 
+the app. You understand that abuse of this setting may result in termination of your Google account.
+
+It may take some time for this designation to be fully implemented in applicable Google services. This designation will 
+only apply to ad requests for which you have set this method.
+
+### Boolean debugEnabled
+
+Sets a testing value for `adUnitId` to test ads without an admob account.
+
 ## Events
 
 ### didReceiveAd
 
- 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.  If the ad was received
+ 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. If the ad was received
  as a part of the server-side auto refreshing, you can examine the
  hasAutoRefreshed property of the view.
 
 ### didFailToReceiveAd
 
- Sent when an ad request failed.  Normally this is because no network
+ Sent when an ad request failed. Normally this is because no network
  connection was available or no ads were available (i.e. no fill).
 
 ### willPresentScreen
 
 Sent just before presenting the user a full screen view, such as a browser,
-in response to clicking on an ad.  Use this opportunity to stop animations,
+in response to clicking on an ad. Use this opportunity to stop animations,
 time sensitive interactions, etc.
 
 Normally the user looks at the ad, dismisses it, and control returns to your
-application by firing off "didDismissScreen":.  However if the user hits the
+application by firing off `didDismissScreen`: However if the user hits the
 Home button or clicks on an App Store link your application will end. In that case,
-"willLeaveApplication" would fire.
+`willLeaveApplication` would fire.
 
 ### willDismissScreen
 
@@ -93,11 +127,17 @@ Sent just before dismissing a full screen view.
 
 ### didDismissScreen
 
-Sent just after dismissing a full screen view.  Use this opportunity to
-restart anything you may have stopped as part of "willPresentScreen".
+Sent just after dismissing a full screen view. Use this opportunity to
+restart anything you may have stopped as part of `willPresentScreen`.
 
 ### willLeaveApplication
 
 Sent just before the application will background or terminate because the
 user clicked on an ad that will launch another application (such as the App
 Store).
+
+### didReceiveInAppPurchase
+
+Called when the user clicks on the buy button of an in-app purchase ad. After the receiver handles the purchase, it must 
+call the GADInAppPurchase object's reportPurchaseStatus: method.
+
diff --git a/ios/example/app.js b/ios/example/app.js
index 9741b984..ce0c9fbe 100644
--- a/ios/example/app.js
+++ b/ios/example/app.js
@@ -1,73 +1,88 @@
 var Admob = require('ti.admob');
 var win = Ti.UI.createWindow({
-    backgroundColor: 'white'
+    backgroundColor: 'white',
+    orientationModes: [Ti.UI.PORTRAIT, Ti.UI.LANDSCAPE_LEFT, Ti.UI.LANDSCAPE_RIGHT]
 });
 
 /*
  We'll make two ads. This first one doesn't care about where the user is located.
  */
-var ad;
-win.add(ad = Admob.createView({
-    top: 0, left: 0,
-    width: 320, height: 50,
-    adUnitId: '<>', // You can get your own at http: //www.admob.com/
+var ad1 = Admob.createView({
+    height: 50,
+    top: 0,
+    debugEnabled: true, // If enabled, a dummy value for `adUnitId` will be used to test
+    adType: Admob.AD_TYPE_BANNER,
+    adUnitId: '<>', // You can get your own at http: //www.admob.com/
     adBackgroundColor: 'black',
-    // You can get your device's id for testDevices by looking in the console log after the app launched
-    testDevices: [Admob.SIMULATOR_ID],
+    testDevices: [Admob.SIMULATOR_ID], // You can get your device's id by looking in the console log
     dateOfBirth: new Date(1985, 10, 1, 12, 1, 1),
-    gender: 'male',
-    keywords: ''
-}));
-ad.addEventListener('didReceiveAd', function() {
+    gender: Admob.GENDER_MALE, // GENDER_MALE or GENDER_FEMALE, default: undefined
+    contentURL: 'https://admob.com', // URL string for a webpage whose content matches the app content.
+    requestAgent: 'Titanium Mobile App', // String that identifies the ad request's origin.
+    extras: {
+       'version': 1.0,
+       'name': 'My App'
+    }, // Object of additional infos
+    tagForChildDirectedTreatment: false, // http:///business.ftc.gov/privacy-and-security/childrens-privacy for more infos
+    keywords: ['keyword1', 'keyword2']
+});
+win.add(ad1);
+
+ad1.addEventListener('didReceiveAd', function() {
     alert('Did receive ad!');
 });
-ad.addEventListener('didFailToReceiveAd', function() {
-    alert('Failed to receive ad!');
+ad1.addEventListener('didFailToReceiveAd', function(e) {
+    alert('Failed to receive ad: ' + e.error);
 });
-ad.addEventListener('willPresentScreen', function() {
+ad1.addEventListener('willPresentScreen', function() {
     alert('Presenting screen!');
 });
-ad.addEventListener('willDismissScreen', function() {
+ad1.addEventListener('willDismissScreen', function() {
     alert('Dismissing screen!');
 });
-ad.addEventListener('didDismissScreen', function() {
+ad1.addEventListener('didDismissScreen', function() {
     alert('Dismissed screen!');
 });
-ad.addEventListener('willLeaveApplication', function() {
+ad1.addEventListener('willLeaveApplication', function() {
     alert('Leaving the app!');
 });
+ad1.addEventListener('didReceiveInAppPurchase', function(e) {
+    alert('Did receive an inApp purchase!');
+    Ti.API.warn(e);
+});
 
-/*
- And we'll try to get the user's location for this second ad!
- */
-Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;
-Ti.Geolocation.distanceFilter = 0;
-Ti.Geolocation.purpose = 'To show you local ads, of course!';
-Ti.Geolocation.getCurrentPosition(function reportPosition(e) {
-    if (!e.success || e.error) {
-        // aw, shucks...
-    }
-    else {
-        win.add(Admob.createView({
-            top: 100, left: 0,
-            width: 320, height: 50,
-            adUnitId: '<>', // You can get your own at http: //www.admob.com/
-            adBackgroundColor: 'black',
-            // You can get your device's id for testDevices by looking in the console log after the app launched
-            testDevices: [Admob.SIMULATOR_ID],
-            dateOfBirth: new Date(1985, 10, 1, 12, 1, 1),
-            gender: 'female',
-            keywords: '',
-            location: e.coords
-        }));
-    }
+var btn = Ti.UI.createButton({
+    title: 'Show interstitial'
 });
 
+btn.addEventListener('click', function() {
+    var ad2 = Admob.createView({
+        debugEnabled: true, // If enabled, a dummy value for `adUnitId` will be used to test
+        adType: Admob.AD_TYPE_INTERSTITIAL,
+        adUnitId: '<>', // You can get your own at http: //www.admob.com/
+        testDevices: [Admob.SIMULATOR_ID], // You can get your device's id by looking in the console log
+        dateOfBirth: new Date(1985, 10, 1, 12, 1, 1),
+        gender: Admob.GENDER_MALE, // GENDER_MALE or GENDER_FEMALE, default: undefined
+        keywords: ['keyword1', 'keyword2']
+    });
+    ad2.receive();
+
+    ad2.addEventListener('didReceiveAd', function(e) {
+        alert('Did receive ad!');
+    });
+
+    ad2.addEventListener('didFailToReceiveAd', function(e) {
+        alert('Failed to receive ad: ' + e.error);
+    });
+});
+
+win.add(btn);
+
 win.add(Ti.UI.createLabel({
     text: 'Loading the ads now! ' +
         'Note that there may be a several minute delay ' +
         'if you have not viewed an ad in over 24 hours.',
     bottom: 40,
-    height: Ti.UI.SIZE || 'auto', width: Ti.UI.SIZE || 'auto'
+    textAlign: 'center'
 }));
 win.open();
diff --git a/ios/manifest b/ios/manifest
index b6304fea..e45d19bf 100644
--- a/ios/manifest
+++ b/ios/manifest
@@ -2,10 +2,10 @@
 # this is your module manifest and used by Titanium
 # during compilation, packaging, distribution, etc.
 #
-version: 1.9.0
+version: 2.0.0
 architectures:  armv7 i386 x86_64 arm64
 description: AdMob module for ad delivery via AdMob
-author: Jeff Haynie, Stephen Tramer, Jasper Kennis, and Jon Alter
+author: Jeff Haynie, Stephen Tramer, Jasper Kennis, Jon Alter and Hans Knoechel
 license: Apache License, Version 2.0
 copyright: Copyright (c) 2010-2014 by Appcelerator, Inc.
 
@@ -15,4 +15,4 @@ name: admob
 moduleid: ti.admob
 guid: 0d005e93-9980-4739-9e41-fd1129c8ff32
 platform: iphone
-minsdk: 3.4.1.GA
+minsdk: 5.1.0
diff --git a/ios/module.xcconfig b/ios/module.xcconfig
index 5291abc6..f9d94629 100644
--- a/ios/module.xcconfig
+++ b/ios/module.xcconfig
@@ -2,5 +2,6 @@
 // PLACE ANY BUILD DEFINITIONS IN THIS FILE AND THEY WILL BE 
 // PICKED UP DURING THE APP BUILD FOR YOUR MODULE
 //
+FRAMEWORK_SEARCH_PATHS=$(SRCROOT)/../../modules/iphone/ti.admob/2.0.0/platform/ios "~/Library/Application\ Support/Titanium/modules/iphone/ti.admob/2.0.0/platform/ios"
 
-OTHER_LDFLAGS=$(inherited) -framework AdSupport -framework AudioToolbox -framework AVFoundation -framework CoreGraphics -framework CoreTelephony -framework MessageUI -framework StoreKit -framework SystemConfiguration
\ No newline at end of file
+OTHER_LDFLAGS=$(inherited) -framework AdSupport -framework AudioToolbox -framework AVFoundation -framework CoreGraphics -framework CoreTelephony -framework MessageUI -framework StoreKit -framework SystemConfiguration -framework GoogleMobileAds
\ No newline at end of file
diff --git a/ios/platform/ios/GoogleMobileAds.framework/GoogleMobileAds b/ios/platform/ios/GoogleMobileAds.framework/GoogleMobileAds
new file mode 120000
index 00000000..95e839f2
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/GoogleMobileAds
@@ -0,0 +1 @@
+Versions/Current/GoogleMobileAds
\ No newline at end of file
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Headers b/ios/platform/ios/GoogleMobileAds.framework/Headers
new file mode 120000
index 00000000..a177d2a6
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Headers
@@ -0,0 +1 @@
+Versions/Current/Headers
\ No newline at end of file
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Modules/module.modulemap b/ios/platform/ios/GoogleMobileAds.framework/Modules/module.modulemap
new file mode 100644
index 00000000..30206427
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Modules/module.modulemap
@@ -0,0 +1,82 @@
+framework module GoogleMobileAds {
+  umbrella header "GoogleMobileAds.h"
+
+  export *
+  module * { export * }
+
+  link framework "AdSupport"
+  link framework "AudioToolbox"
+  link framework "AVFoundation"
+  link framework "CoreGraphics"
+  link framework "CoreMedia"
+  link framework "CoreTelephony"
+  link framework "EventKit"
+  link framework "EventKitUI"
+  link framework "Foundation"
+  link framework "MessageUI"
+  link framework "StoreKit"
+  link framework "SystemConfiguration"
+  link framework "UIKit"
+
+  header "GoogleMobileAdsDefines.h"
+
+  header "GADAdDelegate.h"
+  header "GADAdNetworkExtras.h"
+  header "GADAdSize.h"
+  header "GADBannerView.h"
+  header "GADBannerViewDelegate.h"
+  header "GADCorrelator.h"
+  header "GADCorrelatorAdLoaderOptions.h"
+  header "GADExtras.h"
+  header "GADInAppPurchase.h"
+  header "GADInAppPurchaseDelegate.h"
+  header "GADInterstitial.h"
+  header "GADInterstitialDelegate.h"
+  header "GADMobileAds.h"
+  header "GADRequest.h"
+  header "GADRequestError.h"
+
+  header "DFPBannerView.h"
+  header "DFPCustomRenderedAd.h"
+  header "DFPCustomRenderedBannerViewDelegate.h"
+  header "DFPCustomRenderedInterstitialDelegate.h"
+  header "DFPInterstitial.h"
+  header "DFPRequest.h"
+  header "GADAdSizeDelegate.h"
+  header "GADAppEventDelegate.h"
+
+  header "GADAdLoader.h"
+  header "GADAdLoaderAdTypes.h"
+  header "GADAdLoaderDelegate.h"
+
+  header "GADNativeAd.h"
+  header "GADNativeAdDelegate.h"
+  header "GADNativeAdImage.h"
+  header "GADNativeAdImage+Mediation.h"
+  header "GADNativeAppInstallAd.h"
+  header "GADNativeContentAd.h"
+  header "GADNativeCustomTemplateAd.h"
+
+  header "GADNativeAdImageAdLoaderOptions.h"
+
+  header "GADCustomEventBanner.h"
+  header "GADCustomEventBannerDelegate.h"
+  header "GADCustomEventExtras.h"
+  header "GADCustomEventInterstitial.h"
+  header "GADCustomEventInterstitialDelegate.h"
+  header "GADCustomEventNativeAd.h"
+  header "GADCustomEventNativeAdDelegate.h"
+  header "GADCustomEventRequest.h"
+  header "GADMediatedNativeAd.h"
+  header "GADMediatedNativeAdDelegate.h"
+  header "GADMediatedNativeAdNotificationSource.h"
+  header "GADMediatedNativeAppInstallAd.h"
+  header "GADMediatedNativeContentAd.h"
+
+  header "GADSearchBannerView.h"
+  header "GADSearchRequest.h"
+
+  header "GADAdReward.h"
+  header "GADRewardBasedVideoAd.h"
+  header "GADRewardBasedVideoAdDelegate.h"
+}
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/GoogleMobileAds b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/GoogleMobileAds
new file mode 100644
index 00000000..9053c4f7
Binary files /dev/null and b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/GoogleMobileAds differ
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPBannerView.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPBannerView.h
new file mode 100644
index 00000000..f2b85ce3
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPBannerView.h
@@ -0,0 +1,81 @@
+//
+//  DFPBannerView.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+#import 
+
+@protocol DFPCustomRenderedBannerViewDelegate;
+@protocol GADAdSizeDelegate;
+@protocol GADAppEventDelegate;
+
+/// The view that displays DoubleClick For Publishers banner ads.
+@interface DFPBannerView : GADBannerView
+
+/// Required value created on the DFP website. Create a new ad unit for every unique placement of an
+/// ad in your application. Set this to the ID assigned for this placement. Ad units are important
+/// for targeting and statistics.
+///
+/// Example DFP ad unit ID: @"/6499/example/banner"
+@property(nonatomic, copy) NSString *adUnitID;
+
+/// Optional delegate that is notified when creatives send app events.
+@property(nonatomic, weak) IBOutlet id appEventDelegate;
+
+/// Optional delegate that is notified when creatives cause the banner to change size.
+@property(nonatomic, weak) IBOutlet id adSizeDelegate;
+
+/// Optional array of NSValue encoded GADAdSize structs, specifying all valid sizes that are
+/// appropriate for this slot. Never create your own GADAdSize directly. Use one of the predefined
+/// standard ad sizes (such as kGADAdSizeBanner), or create one using the GADAdSizeFromCGSize
+/// method.
+///
+/// \see setValidAdSizesWithSizes:
+///
+/// Example:
+///   \code
+///   NSArray *validSizes = @[
+///     NSValueFromGADAdSize(kGADAdSizeBanner),
+///     NSValueFromGADAdSize(kGADAdSizeLargeBanner)
+///   ];
+///
+///   bannerView.validAdSizes = validSizes;
+///   \endcode
+@property(nonatomic, copy) NSArray *validAdSizes;
+
+/// Correlator object for correlating this object to other ad objects.
+@property(nonatomic, strong) GADCorrelator *correlator;
+
+/// Indicates that the publisher will record impressions manually when the ad becomes visible to the
+/// user.
+@property(nonatomic, assign) BOOL enableManualImpressions;
+
+/// Optional delegate object for custom rendered ads.
+@property(nonatomic, weak)
+    IBOutlet id customRenderedBannerViewDelegate;
+
+/// If you've set enableManualImpressions to YES, call this method when the ad is visible.
+- (void)recordImpression;
+
+/// Use this function to resize the banner view without launching a new ad request.
+- (void)resize:(GADAdSize)size;
+
+#pragma mark Deprecated
+
+/// Sets the receiver's valid ad sizes to the values pointed to by the provided NULL terminated list
+/// of GADAdSize pointers.
+///
+/// Example:
+///   \code
+///   GADAdSize size1 = kGADAdSizeBanner;
+///   GADAdSize size2 = kGADAdSizeLargeBanner;
+///   [bannerView setValidAdSizesWithSizes:&size1, &size2, NULL];
+///   \endcode
+- (void)setValidAdSizesWithSizes:(GADAdSize *)firstSize, ... NS_REQUIRES_NIL_TERMINATION
+                                 GAD_DEPRECATED_MSG_ATTRIBUTE("Use validAdSizes property.");
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedAd.h
new file mode 100644
index 00000000..c4543cc8
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedAd.h
@@ -0,0 +1,28 @@
+//
+//  DFPCustomRenderedAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2014 Google Inc. All rights reserved.
+//
+
+#import 
+
+/// Custom rendered ad. Your application renders the ad.
+@interface DFPCustomRenderedAd : NSObject
+
+/// The ad's HTML.
+@property(nonatomic, copy, readonly) NSString *adHTML;
+
+/// The base URL of the ad's HTML.
+@property(nonatomic, copy, readonly) NSURL *adBaseURL;
+
+/// Call this method when the user clicks the ad.
+- (void)recordClick;
+
+/// Call this method when the ad is visible to the user.
+- (void)recordImpression;
+
+/// Call this method after the ad has been rendered in a UIView object.
+- (void)finishedRenderingAdView:(UIView *)view;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedBannerViewDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedBannerViewDelegate.h
new file mode 100644
index 00000000..59f1965e
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedBannerViewDelegate.h
@@ -0,0 +1,20 @@
+//
+//  DFPCustomRenderedBannerViewDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2014 Google Inc. All rights reserved.
+//
+
+#import 
+
+@class DFPBannerView;
+@class DFPCustomRenderedAd;
+
+@protocol DFPCustomRenderedBannerViewDelegate
+
+/// Called after ad data has been received. You must construct a banner from |customRenderedAd| and
+/// call the |customRenderedAd| object's finishedRenderingAdView: when the ad is rendered.
+- (void)bannerView:(DFPBannerView *)bannerView
+    didReceiveCustomRenderedAd:(DFPCustomRenderedAd *)customRenderedAd;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedInterstitialDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedInterstitialDelegate.h
new file mode 100644
index 00000000..fda75a2e
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPCustomRenderedInterstitialDelegate.h
@@ -0,0 +1,21 @@
+//
+//  DFPCustomRenderedInterstitialDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2014 Google Inc. All rights reserved.
+//
+
+#import 
+
+@class DFPCustomRenderedAd;
+@class DFPInterstitial;
+
+@protocol DFPCustomRenderedInterstitialDelegate
+
+/// Called after ad data has been received. You must construct an interstitial from
+/// |customRenderedAd| and call the |customRenderedAd| object's finishedRenderingAdView: method when
+/// the ad has been rendered.
+- (void)interstitial:(DFPInterstitial *)interstitial
+    didReceiveCustomRenderedAd:(DFPCustomRenderedAd *)customRenderedAd;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPInterstitial.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPInterstitial.h
new file mode 100644
index 00000000..27112eb4
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPInterstitial.h
@@ -0,0 +1,33 @@
+//
+//  DFPInterstitial.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+@protocol DFPCustomRenderedInterstitialDelegate;
+@protocol GADAppEventDelegate;
+
+@interface DFPInterstitial : GADInterstitial
+
+/// Required value created on the DFP website. Create a new ad unit for every unique placement of an
+/// ad in your application. Set this to the ID assigned for this placement. Ad units are important
+/// for targeting and stats.
+///
+/// Example DFP ad unit ID: @"/6499/example/interstitial"
+@property(nonatomic, readonly, copy) NSString *adUnitID;
+
+/// Correlator object for correlating this object to other ad objects.
+@property(nonatomic, strong) GADCorrelator *correlator;
+
+/// Optional delegate that is notified when creatives send app events.
+@property(nonatomic, weak) id appEventDelegate;
+
+/// Optional delegate object for custom rendered ads.
+@property(nonatomic, weak)
+    id customRenderedInterstitialDelegate;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPRequest.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPRequest.h
new file mode 100644
index 00000000..5d41aeac
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/DFPRequest.h
@@ -0,0 +1,33 @@
+//
+//  DFPRequest.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2014 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+#import 
+
+/// Add this constant to the testDevices property's array to receive test ads on the simulator.
+GAD_EXTERN const id kDFPSimulatorID;
+
+/// Specifies optional parameters for ad requests.
+@interface DFPRequest : GADRequest
+
+/// Publisher provided user ID.
+@property(nonatomic, copy) NSString *publisherProvidedID;
+
+/// Array of strings used to exclude specified categories in ad results.
+@property(nonatomic, copy) NSArray *categoryExclusions;
+
+/// Key-value pairs used for custom targeting.
+@property(nonatomic, copy) NSDictionary *customTargeting;
+
+/// This API is deprecated and a no-op, use an instance of GADCorrelator set on DFPInterstitial or
+/// DFPBannerView objects to correlate requests.
++ (void)updateCorrelator GAD_DEPRECATED_MSG_ATTRIBUTE(
+    "Set GADCorrelator objects on your ads instead. This method longer affects ad correlation.");
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdDelegate.h
new file mode 100644
index 00000000..77d9fb09
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdDelegate.h
@@ -0,0 +1,22 @@
+//
+//  GADAdDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#pragma mark - Audio Control Notifications
+
+/// Delegate methods common to multiple ad types.
+@protocol GADAdDelegate
+
+@optional
+
+#pragma mark Audio Control Methods
+
+/// Asks the delegate if the audio session category can be changed while displaying an ad. Return NO
+/// to prevent the Google Mobile Ads SDK from changing the audio session category. The default
+/// behavior if unimplemented is to return YES.
+- (BOOL)ad:(id)ad shouldChangeAudioSessionToCategory:(NSString *)audioSessionCategory;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoader.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoader.h
new file mode 100644
index 00000000..673fce95
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoader.h
@@ -0,0 +1,42 @@
+//
+//  GADAdLoader.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+#import "GADAdLoaderDelegate.h"
+#import "GADRequest.h"
+#import "GADRequestError.h"
+
+/// Loads ads. See GADAdLoaderAdTypes.h for available ad types.
+@interface GADAdLoader : NSObject
+
+/// Object notified when an ad request succeeds or fails. Must conform to requested ad types'
+/// delegate protocols.
+@property(nonatomic, weak) id delegate;
+
+/// Returns an initialized ad loader configured to load the specified ad types.
+///
+/// @param rootViewController The root view controller is used to present ad click actions. Cannot
+/// be nil.
+/// @param adTypes An array of ad types. See GADAdLoaderAdTypes.h for available ad types.
+/// @param options An array of GADAdLoaderOptions objects to configure how ads are loaded, or nil to
+/// use default options. See each ad type's header for available GADAdLoaderOptions subclasses.
+- (instancetype)initWithAdUnitID:(NSString *)adUnitID
+              rootViewController:(UIViewController *)rootViewController
+                         adTypes:(NSArray *)adTypes
+                         options:(NSArray *)options;
+
+/// Loads the ad and informs the delegate of the outcome.
+- (void)loadRequest:(GADRequest *)request;
+
+@end
+
+/// Ad loader options base class. See each ad type's header for available GADAdLoaderOptions
+/// subclasses.
+@interface GADAdLoaderOptions : NSObject
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoaderAdTypes.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoaderAdTypes.h
new file mode 100644
index 00000000..1b1eaeb7
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoaderAdTypes.h
@@ -0,0 +1,22 @@
+//
+//  GADAdLoaderAdTypes.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+// For use with GADAdLoader's creation methods. See the constants' respective headers for each ad
+// type's delegate requirements.
+
+/// Native app install ad type. \see GADNativeAppInstallAd.h.
+GAD_EXTERN NSString *const kGADAdLoaderAdTypeNativeAppInstall;
+
+/// Native content ad type. \see GADNativeContentAd.h.
+GAD_EXTERN NSString *const kGADAdLoaderAdTypeNativeContent;
+
+/// Native custom template ad type. \see GADNativeCustomTemplateAd.h.
+GAD_EXTERN NSString *const kGADAdLoaderAdTypeNativeCustomTemplate;
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoaderDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoaderDelegate.h
new file mode 100644
index 00000000..1be88843
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdLoaderDelegate.h
@@ -0,0 +1,21 @@
+//
+//  GADAdLoaderDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import "GADRequestError.h"
+
+@class GADAdLoader;
+
+/// Base ad loader delegate protocol. Ad types provide extended protocols that declare methods to
+/// handle successful ad loads.
+@protocol GADAdLoaderDelegate
+
+/// Called when adLoader fails to load an ad.
+- (void)adLoader:(GADAdLoader *)adLoader didFailToReceiveAdWithError:(GADRequestError *)error;
+
+@end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADAdNetworkExtras.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdNetworkExtras.h
similarity index 94%
rename from ios/GoogleMobileAdsSdkiOS/GADAdNetworkExtras.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdNetworkExtras.h
index 64cc5b98..d33de74b 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADAdNetworkExtras.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdNetworkExtras.h
@@ -7,8 +7,6 @@
 
 #import 
 
-#import "GADModules.h"
-
 /// An object implementing this protocol contains information set by the publisher on the client
 /// device for a particular ad network.
 ///
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdReward.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdReward.h
new file mode 100644
index 00000000..5657a21d
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdReward.h
@@ -0,0 +1,23 @@
+//
+//  GADAdReward.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+@interface GADAdReward : NSObject
+
+/// Type of the reward.
+@property(nonatomic, readonly, copy) NSString *type;
+
+/// Amount rewarded to the user.
+@property(nonatomic, readonly, copy) NSDecimalNumber *amount;
+
+/// Returns an initialized GADAdReward with the provided reward type and reward amount. rewardType
+/// and rewardAmount must not be nil.
+- (instancetype)initWithRewardType:(NSString *)rewardType
+                      rewardAmount:(NSDecimalNumber *)rewardAmount NS_DESIGNATED_INITIALIZER;
+
+@end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADAdSize.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdSize.h
similarity index 67%
rename from ios/GoogleMobileAdsSdkiOS/GADAdSize.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdSize.h
index b1328b6f..32efccd6 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADAdSize.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdSize.h
@@ -4,19 +4,19 @@
 //
 //  Copyright 2012 Google Inc. All rights reserved.
 //
-//  A valid GADAdSize is considered to be one of the predefined GADAdSize
-//  constants or a GADAdSize constructed by GADAdSizeFromCGSize,
-//  GADAdSizeFullWidthPortraitWithHeight, GADAdSizeFullWidthLandscapeWithHeight.
-//
 
 #import 
 #import 
 
-#import "GADModules.h"
+#import 
 
-/// Do not create a GADAdSize manually. Use one of the kGADAdSize constants.
-/// Treat GADAdSize as an opaque type. Do not access any fields directly. To
-/// obtain a concrete CGSize, use the function CGSizeFromGADAdSize().
+/// A valid GADAdSize is considered to be one of the predefined GADAdSize constants or a GADAdSize
+/// constructed by GADAdSizeFromCGSize, GADAdSizeFullWidthPortraitWithHeight,
+/// GADAdSizeFullWidthLandscapeWithHeight.
+///
+/// Do not create a GADAdSize manually. Use one of the kGADAdSize constants. Treat GADAdSize as an
+/// opaque type. Do not access any fields directly. To obtain a concrete CGSize, use the function
+/// CGSizeFromGADAdSize().
 typedef struct GADAdSize {
   CGSize size;
   NSUInteger flags;
@@ -25,40 +25,44 @@ typedef struct GADAdSize {
 #pragma mark Standard Sizes
 
 /// iPhone and iPod Touch ad size. Typically 320x50.
-extern GADAdSize const kGADAdSizeBanner;
+GAD_EXTERN GADAdSize const kGADAdSizeBanner;
 
 /// Taller version of kGADAdSizeBanner. Typically 320x100.
-extern GADAdSize const kGADAdSizeLargeBanner;
+GAD_EXTERN GADAdSize const kGADAdSizeLargeBanner;
 
 /// Medium Rectangle size for the iPad (especially in a UISplitView's left pane). Typically 300x250.
-extern GADAdSize const kGADAdSizeMediumRectangle;
+GAD_EXTERN GADAdSize const kGADAdSizeMediumRectangle;
 
 /// Full Banner size for the iPad (especially in a UIPopoverController or in
 /// UIModalPresentationFormSheet). Typically 468x60.
-extern GADAdSize const kGADAdSizeFullBanner;
+GAD_EXTERN GADAdSize const kGADAdSizeFullBanner;
 
 /// Leaderboard size for the iPad. Typically 728x90.
-extern GADAdSize const kGADAdSizeLeaderboard;
+GAD_EXTERN GADAdSize const kGADAdSizeLeaderboard;
 
 /// Skyscraper size for the iPad. Mediation only. AdMob/Google does not offer this size. Typically
 /// 120x600.
-extern GADAdSize const kGADAdSizeSkyscraper;
+GAD_EXTERN GADAdSize const kGADAdSizeSkyscraper;
 
 /// An ad size that spans the full width of the application in portrait orientation. The height is
 /// typically 50 pixels on an iPhone/iPod UI, and 90 pixels tall on an iPad UI.
-extern GADAdSize const kGADAdSizeSmartBannerPortrait;
+GAD_EXTERN GADAdSize const kGADAdSizeSmartBannerPortrait;
 
 /// An ad size that spans the full width of the application in landscape orientation. The height is
 /// typically 32 pixels on an iPhone/iPod UI, and 90 pixels tall on an iPad UI.
-extern GADAdSize const kGADAdSizeSmartBannerLandscape;
+GAD_EXTERN GADAdSize const kGADAdSizeSmartBannerLandscape;
+
+/// An ad size that spans the full width of its container, with a height dynamically determined by
+/// the ad.
+GAD_EXTERN GADAdSize const kGADAdSizeFluid;
 
 /// Invalid ad size marker.
-extern GADAdSize const kGADAdSizeInvalid;
+GAD_EXTERN GADAdSize const kGADAdSizeInvalid;
 
 #pragma mark Custom Sizes
 
 /// Returns a custom GADAdSize for the provided CGSize. Use this only if you require a non-standard
-/// size, otherwise, use one of the standard size constants above.
+/// size. Otherwise, use one of the standard size constants above.
 GADAdSize GADAdSizeFromCGSize(CGSize size);
 
 /// Returns a custom GADAdSize that spans the full width of the application in portrait orientation
@@ -85,6 +89,12 @@ BOOL IsGADAdSizeValid(GADAdSize size);
 /// Returns a NSString describing the provided GADAdSize.
 NSString *NSStringFromGADAdSize(GADAdSize size);
 
+/// Returns an NSValue representing the GADAdSize.
+NSValue *NSValueFromGADAdSize(GADAdSize size);
+
+/// Returns a GADAdSize from an NSValue. Returns kGADAdSizeInvalid if the value is not a GADAdSize.
+GADAdSize GADAdSizeFromNSValue(NSValue *value);
+
 #pragma mark Deprecated Macros
 
 #define GAD_SIZE_320x50 CGSizeFromGADAdSize(kGADAdSizeBanner)
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdSizeDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdSizeDelegate.h
new file mode 100644
index 00000000..324a571f
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAdSizeDelegate.h
@@ -0,0 +1,21 @@
+//
+//  GADAdSizeDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+@class GADBannerView;
+
+/// The class implementing this protocol will be notified when the DFPBannerView changes ad size.
+/// Any views that may be affected by the banner size change will have time to adjust.
+@protocol GADAdSizeDelegate
+
+/// Called before the ad view changes to the new size.
+- (void)adView:(GADBannerView *)bannerView willChangeAdSizeTo:(GADAdSize)size;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAppEventDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAppEventDelegate.h
new file mode 100644
index 00000000..34fbccec
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADAppEventDelegate.h
@@ -0,0 +1,29 @@
+//
+//  GADAppEventDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+@class GADBannerView;
+@class GADInterstitial;
+
+/// Implement your app event within these methods. The delegate will be notified when the SDK
+/// receives an app event message from the ad.
+@protocol GADAppEventDelegate
+
+@optional
+
+/// Called when the banner receives an app event.
+- (void)adView:(GADBannerView *)banner
+    didReceiveAppEvent:(NSString *)name
+              withInfo:(NSString *)info;
+
+/// Called when the interstitial receives an app event.
+- (void)interstitial:(GADInterstitial *)interstitial
+    didReceiveAppEvent:(NSString *)name
+              withInfo:(NSString *)info;
+
+@end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADBannerView.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADBannerView.h
similarity index 53%
rename from ios/GoogleMobileAdsSdkiOS/GADBannerView.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADBannerView.h
index 4b675762..eace1098 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADBannerView.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADBannerView.h
@@ -7,28 +7,31 @@
 
 #import 
 
-#import "GADAdSize.h"
-#import "GADBannerViewDelegate.h"
-#import "GADInAppPurchaseDelegate.h"
-#import "GADModules.h"
-#import "GADRequest.h"
-#import "GADRequestError.h"
-
-/// The view that displays banner ads. A minimum implementation to get an ad
-/// from within a UIViewController class is:
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+
+#ifndef IBInspectable
+#define IBInspectable
+#endif
+
+/// The view that displays banner ads. A minimum implementation to get an ad from within a
+/// UIViewController class is:
 ///
 ///   \code
 ///   // Create and setup the ad view, specifying the size and origin at {0, 0}.
 ///   GADBannerView *adView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
 ///   adView.rootViewController = self;
-///   adView.adUnitID = @"ID created when registering my app";
+///   adView.adUnitID = @"ID created when registering your app";
 ///
 ///   // Place the ad view onto the screen.
 ///   [self.view addSubview:adView];
-///   [adView release];
 ///
 ///   // Request an ad without any additional targeting information.
-///   [adView loadRequest:nil];
+///   [adView loadRequest:[GADRequest request]];
 ///   \endcode
 ///
 @interface GADBannerView : UIView
@@ -45,20 +48,16 @@
 
 #pragma mark Pre-Request
 
-/// Required value created in the AdSense website. Create a new ad unit for every unique placement
-/// of an ad in your application. Set this to the ID assigned for this placement. Ad units are
-/// important for targeting and stats.
-/// Example values for different request types:
+/// Required value created on the AdMob website. Create a new ad unit for every unique placement of
+/// an ad in your application. Set this to the ID assigned for this placement. Ad units are
+/// important for targeting and statistics.
 ///
-///     AdMob: a0123456789ABCD
-///       DFP: /0123/ca-pub-0123456789012345/my-ad-identifier
-///   AdSense: ca-mb-app-pub-0123456789012345/my-ad-identifier
-/// Mediation: AB123456789ABCDE
-@property(nonatomic, copy) NSString *adUnitID;
+/// Example AdMob ad unit ID: @"ca-app-pub-0123456789012345/0123456789"
+@property(nonatomic, copy) IBInspectable NSString *adUnitID;
 
 /// Required reference to the current root view controller. For example the root view controller in
 /// tab-based application would be the UITabViewController.
-@property(nonatomic, weak) UIViewController *rootViewController;
+@property(nonatomic, weak) IBOutlet UIViewController *rootViewController;
 
 /// Required to set this banner view to a proper size. Never create your own GADAdSize directly. Use
 /// one of the predefined standard ad sizes (such as kGADAdSizeBanner), or create one using the
@@ -68,48 +67,21 @@
 @property(nonatomic, assign) GADAdSize adSize;
 
 /// Optional delegate object that receives state change notifications from this GADBannerView.
-/// Typically this is a UIViewController, however, if you are unfamiliar with the delegate pattern
-/// it is recommended you subclass this GADBannerView and make it the delegate. That avoids any
-/// chance of your application crashing if you forget to nil out the delegate. For example:
-///
-///   \code
-///   @interface MyAdView : GADBannerView 
-///   @end
-///
-///   @implementation MyAdView
-///   - (id)initWithFrame:(CGRect)frame {
-///     self = [super initWithFrame:frame];
-///     if (self) {
-///       self.delegate = self;
-///     }
-///     return self;
-///   }
-///
-///   - (void)dealloc {
-///     self.delegate = nil;
-///     [super dealloc];
-///   }
-///
-///   @end
-///   \endcode
-@property(nonatomic, weak) id delegate;
+/// Typically this is a UIViewController.
+@property(nonatomic, weak) IBOutlet id delegate;
 
 /// Optional delegate object that receives in-app purchase notifications from this ad. Required for
 /// the custom in-app purchase flow, but ignored when using the default in-app purchase flow.
-/// Remember to nil the delegate before deallocating this object.
-@property(nonatomic, weak) id inAppPurchaseDelegate;
+@property(nonatomic, weak) IBOutlet id inAppPurchaseDelegate;
 
 #pragma mark Making an Ad Request
 
-/// Makes an ad request. Additional targeting options can be supplied with a request object. Refresh
-/// the ad by calling this method again.
+/// Makes an ad request. The request object supplies targeting information.
 - (void)loadRequest:(GADRequest *)request;
 
-#pragma mark Ad Request
-
-/// Indicates if the currently displayed ad (or most recent failure) was a result of auto refreshing
-/// as specified on server. This property is set to NO after each loadRequest: method.
-@property(nonatomic, readonly, assign) BOOL hasAutoRefreshed;
+/// A Boolean value that determines whether autoloading of ads in the receiver is enabled. If
+/// enabled, you do not need to call the loadRequest: method to load ads.
+@property(nonatomic, assign, getter=isAutoloadEnabled) IBInspectable BOOL autoloadEnabled;
 
 #pragma mark Mediation
 
@@ -117,11 +89,18 @@
 /// is in progress or if the latest ad request failed. For both standard and mediated Google AdMob
 /// ads, this method returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation custom
 /// events, this method returns @"GADMAdapterCustomEvents".
-@property(nonatomic, readonly, weak) NSString *adNetworkClassName;
+@property(nonatomic, readonly, copy) NSString *adNetworkClassName;
+
+#pragma mark Deprecated
+
+/// Indicates if the currently displayed ad (or most recent failure) was a result of auto refreshing
+/// as specified on server. This property is set to NO after each loadRequest: method.
+@property(nonatomic, readonly, assign) BOOL hasAutoRefreshed GAD_DEPRECATED_ATTRIBUTE;
 
-/// The underlying ad view of the mediated ad network. You may use this to find out the actual
-/// size of the ad and adjust GADBannerView to fit the underlying ad view.
-@property(nonatomic, readonly, weak) UIView *mediatedAdView
-    __attribute__((deprecated("Use adNetworkClassName.")));
+/// The mediated ad network's underlying ad view. You may use this property to read the ad's actual
+/// size and adjust this banner view's frame origin. However, modifying the banner view's frame size
+/// triggers the Mobile Ads SDK to request a new ad. Only update the banner view's frame origin.
+@property(nonatomic, readonly, weak)
+    UIView *mediatedAdView GAD_DEPRECATED_MSG_ATTRIBUTE("Use adNetworkClassName.");
 
 @end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADBannerViewDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADBannerViewDelegate.h
new file mode 100644
index 00000000..e4bee35b
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADBannerViewDelegate.h
@@ -0,0 +1,49 @@
+//
+//  GADBannerViewDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2011 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+@class GADBannerView;
+@class GADRequestError;
+
+/// Delegate methods for receiving GADBannerView state change messages such as ad request status
+/// and ad click lifecycle.
+@protocol GADBannerViewDelegate
+
+@optional
+
+#pragma mark Ad Request Lifecycle Notifications
+
+/// Tells the delegate that an ad request successfully received an ad. The delegate may want to add
+/// the banner view to the view hierarchy if it hasn't been added yet.
+- (void)adViewDidReceiveAd:(GADBannerView *)bannerView;
+
+/// Tells the delegate that an ad request failed. The failure is normally due to network
+/// connectivity or ad availablility (i.e., no fill).
+- (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error;
+
+#pragma mark Click-Time Lifecycle Notifications
+
+/// Tells the delegate that a full screen view will be presented in response to the user clicking on
+/// an ad. The delegate may want to pause animations and time sensitive interactions.
+- (void)adViewWillPresentScreen:(GADBannerView *)bannerView;
+
+/// Tells the delegate that the full screen view will be dismissed.
+- (void)adViewWillDismissScreen:(GADBannerView *)bannerView;
+
+/// Tells the delegate that the full screen view has been dismissed. The delegate should restart
+/// anything paused while handling adViewWillPresentScreen:.
+- (void)adViewDidDismissScreen:(GADBannerView *)bannerView;
+
+/// Tells the delegate that the user click will open another app, backgrounding the current
+/// application. The standard UIApplicationDelegate methods, like applicationDidEnterBackground:,
+/// are called immediately before this method is called.
+- (void)adViewWillLeaveApplication:(GADBannerView *)bannerView;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCorrelator.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCorrelator.h
new file mode 100644
index 00000000..268c2ae6
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCorrelator.h
@@ -0,0 +1,17 @@
+//
+//  GADCorrelator.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+/// Represents a correlation between multiple ads. Set an instance of this object on multiple ads to
+/// indicate they are being used in a common context.
+@interface GADCorrelator : NSObject
+
+/// Resets the correlator to force a new set of correlated ads.
+- (void)reset;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCorrelatorAdLoaderOptions.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCorrelatorAdLoaderOptions.h
new file mode 100644
index 00000000..65df4e8b
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCorrelatorAdLoaderOptions.h
@@ -0,0 +1,17 @@
+//
+//  GADCorrelatorAdLoaderOptions.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+/// Ad loader options for adding a correlator to a native ad request.
+@interface GADCorrelatorAdLoaderOptions : GADAdLoaderOptions
+
+/// Correlator object for correlating ads loaded by an ad loader to other ad objects.
+@property(nonatomic, strong) GADCorrelator *correlator;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventBanner.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventBanner.h
new file mode 100644
index 00000000..b8ac29a7
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventBanner.h
@@ -0,0 +1,34 @@
+//
+//  GADCustomEventBanner.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+#import 
+#import 
+
+/// The banner custom event protocol. Your banner custom event handler must implement this protocol.
+@protocol GADCustomEventBanner
+
+/// Inform |delegate| with the custom event execution results to ensure mediation behaves correctly.
+///
+/// In your class, define the -delegate and -setDelegate: methods or use "@synthesize delegate". The
+/// Google Mobile Ads SDK sets this property on instances of your class.
+@property(nonatomic, weak) id delegate;
+
+/// Called by mediation when your custom event is scheduled to be executed. Report execution results
+/// to the delegate.
+/// \param adSize the size of the ad as configured in the mediation UI for the mediation placement.
+/// \param serverParameter parameter configured in the mediation UI.
+/// \param serverLabel label configured in the mediation UI.
+/// \param request contains ad request information.
+- (void)requestBannerAd:(GADAdSize)adSize
+              parameter:(NSString *)serverParameter
+                  label:(NSString *)serverLabel
+                request:(GADCustomEventRequest *)request;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventBannerDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventBannerDelegate.h
new file mode 100644
index 00000000..271489fd
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventBannerDelegate.h
@@ -0,0 +1,62 @@
+//
+//  GADCustomEventBannerDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+#import 
+
+@protocol GADCustomEventBanner;
+
+/// Call back to this delegate in your custom event. You must call customEventBanner:didReceiveAd:
+/// when there is an ad to show, or customEventBanner:didFailAd: when there is no ad to show.
+/// Otherwise, if enough time passed (several seconds) after the SDK called the requestBannerAd:
+/// method of your custom event, the mediation SDK will consider the request timed out, and move on
+/// to the next ad network.
+@protocol GADCustomEventBannerDelegate
+
+/// Your Custom Event object must call this when it receives or creates an ad view.
+- (void)customEventBanner:(id)customEvent didReceiveAd:(UIView *)view;
+
+/// Your Custom Event object must call this when it fails to receive or create the ad view. Pass
+/// along any error object sent from the ad network's SDK, or an NSError describing the error. Pass
+/// nil if not available.
+- (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
+/// server.
+- (void)customEventBannerWasClicked:(id)customEvent;
+
+/// The rootViewController that you set in GADBannerView. Use this UIViewController to show a modal
+/// view when a user taps on the ad.
+@property(nonatomic, readonly) UIViewController *viewControllerForPresentingModalView;
+
+/// When you call the following methods, the call will be propagated back to the
+/// GADBannerViewDelegate that you implemented and passed to GADBannerView.
+
+/// Your Custom Event should call this when the user taps an ad and a modal view appears.
+- (void)customEventBannerWillPresentModal:(id)customEvent;
+
+/// Your Custom Event should call this when the user dismisses the modal view and the modal view is
+/// about to go away.
+- (void)customEventBannerWillDismissModal:(id)customEvent;
+
+/// Your Custom Event should call this when the user dismisses the modal view and the modal view has
+/// gone away.
+- (void)customEventBannerDidDismissModal:(id)customEvent;
+
+/// Your Custom Event should call this method when a user action will result in App switching.
+- (void)customEventBannerWillLeaveApplication:(id)customEvent;
+
+#pragma mark Deprecated
+
+- (void)customEventBanner:(id)customEvent
+        clickDidOccurInAd:(UIView *)view
+    GAD_DEPRECATED_MSG_ATTRIBUTE("Use customEventBannerWasClicked:.");
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventExtras.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventExtras.h
new file mode 100644
index 00000000..3ebe81e1
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventExtras.h
@@ -0,0 +1,30 @@
+//
+//  GADCustomEventExtras.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+/// Create an instance of this class to set additional parameters for each custom event object. The
+/// additional parameters for a custom event are keyed by the custom event label. These extras are
+/// passed to your implementation of GADCustomEventBanner or GADCustomEventInterstitial.
+@interface GADCustomEventExtras : NSObject
+
+/// Set additional parameters for the custom event with label |label|. To remove additional
+/// parameters associated with |label|, pass in nil for |extras|.
+- (void)setExtras:(NSDictionary *)extras forLabel:(NSString *)label;
+
+/// Retrieve the extras for |label|.
+- (NSDictionary *)extrasForLabel:(NSString *)label;
+
+/// Removes all the extras set on this instance.
+- (void)removeAllExtras;
+
+/// Returns all the extras set on this instance.
+- (NSDictionary *)allExtras;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventInterstitial.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventInterstitial.h
new file mode 100644
index 00000000..0eb8fddc
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventInterstitial.h
@@ -0,0 +1,37 @@
+//
+//  GADCustomEventInterstitial.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+#import 
+
+/// The interstitial custom event protocol. Your interstitial custom event handler must implement
+/// this protocol.
+@protocol GADCustomEventInterstitial
+
+/// Inform |delegate| with the custom event execution results to ensure mediation behaves correctly.
+///
+/// In your class, define the -delegate and -setDelegate: methods or use "@synthesize delegate". The
+/// Google Mobile Ads SDK sets this property on instances of your class.
+@property(nonatomic, weak) id delegate;
+
+/// Called by mediation when your custom event is scheduled to be executed. Your implementation
+/// should start retrieving the interstitial ad. Report execution results to the delegate. You must
+/// wait until -presentFromRootViewController is called before displaying the interstitial ad.
+/// \param serverParameter parameter configured in the mediation UI.
+/// \param serverLabel label configured in the mediation UI.
+/// \param request contains ad request information.
+- (void)requestInterstitialAdWithParameter:(NSString *)serverParameter
+                                     label:(NSString *)serverLabel
+                                   request:(GADCustomEventRequest *)request;
+
+/// Present the interstitial ad as a modal view using the provided view controller. Called only
+/// after your class calls -customEventInterstitialDidReceiveAd: on its custom event delegate.
+- (void)presentFromRootViewController:(UIViewController *)rootViewController;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventInterstitialDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventInterstitialDelegate.h
new file mode 100644
index 00000000..13fb963c
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventInterstitialDelegate.h
@@ -0,0 +1,56 @@
+//
+//  GADCustomEventInterstitialDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+@protocol GADCustomEventInterstitial;
+
+/// Call back to this delegate in your custom event. You must call
+/// customEventInterstitialDidReceiveAd: when there is an ad to show, or
+/// customEventInterstitial:didFailAd: when there is no ad to show. Otherwise, if enough time passed
+/// (several seconds) after the SDK called the requestInterstitialAdWithParameter: method of your
+/// custom event, the mediation SDK will consider the request timed out, and move on to the next ad
+/// network.
+@protocol GADCustomEventInterstitialDelegate
+
+/// Your Custom Event object must call this when it receives or creates an interstitial ad.
+- (void)customEventInterstitialDidReceiveAd:(id)customEvent;
+
+/// Your Custom Event object must call this when it fails to receive or create the ad. Pass along
+/// any error object sent from the ad network's SDK, or an NSError describing the error. Pass nil if
+/// not available.
+- (void)customEventInterstitial:(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
+/// server.
+- (void)customEventInterstitialWasClicked:(id)customEvent;
+
+// When you call any of the following methods, the call will be propagated back to the
+// GADInterstitialDelegate that you implemented and passed to GADInterstitial.
+
+/// Your Custom Event should call this when the interstitial is being displayed.
+- (void)customEventInterstitialWillPresent:(id)customEvent;
+
+/// Your Custom Event should call this when the interstitial is about to be dismissed.
+- (void)customEventInterstitialWillDismiss:(id)customEvent;
+
+/// Your Custom Event should call this when the interstitial has been dismissed.
+- (void)customEventInterstitialDidDismiss:(id)customEvent;
+
+/// Your Custom Event should call this method when a user action will result in app switching.
+- (void)customEventInterstitialWillLeaveApplication:(id)customEvent;
+
+#pragma mark Deprecated
+- (void)customEventInterstitial:(id)customEvent
+                   didReceiveAd:(NSObject *)ad
+    GAD_DEPRECATED_MSG_ATTRIBUTE("Use customEventInterstitialDidReceiveAd:.");
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventNativeAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventNativeAd.h
new file mode 100644
index 00000000..7f4c83a0
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventNativeAd.h
@@ -0,0 +1,36 @@
+//
+//  GADCustomEventNativeAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import "GADCustomEventRequest.h"
+
+@protocol GADCustomEventNativeAdDelegate;
+
+/// The protocol for a custom event for a native ad. Your custom event handler object for native ads
+/// must implement this protocol. The
+/// requestNativeAdWithParameter:request:adTypes:options:rootViewController: method will be called
+/// when mediation schedules your custom event to be executed.
+@protocol GADCustomEventNativeAd
+
+/// This method is called by mediation when your custom event is scheduled to be executed.
+/// |serverParameter| is the parameter configured in the mediation UI for the custom event.
+/// |request| contains ad targeting information. |adTypes| contains the list of native ad types
+/// requested. See GADAdLoaderAdTypes.h for available ad types. |options| are any additional options
+/// configured by the publisher for requesting a native ad. See GADNativeAdImageAdLoaderOptions.h
+/// for available image options. |rootViewController| is the view controller provided by the
+/// publisher.
+- (void)requestNativeAdWithParameter:(NSString *)serverParameter
+                             request:(GADCustomEventRequest *)request
+                             adTypes:(NSArray *)adTypes
+                             options:(NSArray *)options
+                  rootViewController:(UIViewController *)rootViewController;
+
+/// The delegate object, used for receiving custom native ad load request progress.
+@property(nonatomic, weak) id delegate;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventNativeAdDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventNativeAdDelegate.h
new file mode 100644
index 00000000..4f1f79a8
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventNativeAdDelegate.h
@@ -0,0 +1,26 @@
+//
+//  GADCustomEventNativeAdDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+#import 
+
+/// The delegate of the GADCustomEventNativeAd object must adopt the GADCustomEventNativeAdDelegate
+/// protocol. Methods in this protocol are used for native ad's custom event communication with the
+/// Google Mobile Ads SDK.
+@protocol GADCustomEventNativeAdDelegate
+
+/// Tells the delegate that the custom event ad request succeeded and loaded a native ad.
+- (void)customEventNativeAd:(id)customEventNativeAd
+    didReceiveMediatedNativeAd:(id)mediatedNativeAd;
+
+/// Tells the delegate that the custom event ad request failed.
+- (void)customEventNativeAd:(id)customEventNativeAd
+     didFailToLoadWithError:(NSError *)error;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventRequest.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventRequest.h
new file mode 100644
index 00000000..75fe69b4
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADCustomEventRequest.h
@@ -0,0 +1,47 @@
+//
+//  GADCustomEventRequest.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+@class GADCustomEventExtras;
+
+@interface GADCustomEventRequest : NSObject
+
+/// The end user's gender set in GADRequest. If not specified, returns kGADGenderUnknown.
+@property(nonatomic, readonly, assign) GADGender userGender;
+
+/// The end user's birthday set in GADRequest. If not specified, returns nil.
+@property(nonatomic, readonly, copy) NSDate *userBirthday;
+
+/// The end user's latitude, longitude, and accuracy, set in GADRequest. If not specified,
+/// userHasLocation returns NO, and userLatitude, userLongitude and userLocationAccuracyInMeters
+/// will all return 0.
+@property(nonatomic, readonly, assign) BOOL userHasLocation;
+@property(nonatomic, readonly, assign) CGFloat userLatitude;
+@property(nonatomic, readonly, assign) CGFloat userLongitude;
+@property(nonatomic, readonly, assign) CGFloat userLocationAccuracyInMeters;
+
+/// Description of the user's location, in free form text, set in GADRequest. If not available,
+/// returns nil. This may be set even if userHasLocation is NO.
+@property(nonatomic, readonly, copy) NSString *userLocationDescription;
+
+/// Keywords set in GADRequest. Returns nil if no keywords are set.
+@property(nonatomic, readonly, copy) NSArray *userKeywords;
+
+/// The additional parameters set by the application. This property allows you to pass additional
+/// information from your application to your Custom Event object. To do so, create an instance of
+/// GADCustomEventExtras to pass to GADRequest -registerAdNetworkExtras:. The instance should have
+/// an NSDictionary set for a particular custom event label. That NSDictionary becomes the
+/// additionalParameters here.
+@property(nonatomic, readonly, copy) NSDictionary *additionalParameters;
+
+/// Indicates if the testing property has been set in GADRequest.
+@property(nonatomic, readonly, assign) BOOL isTesting;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADExtras.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADExtras.h
new file mode 100644
index 00000000..80a354a4
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADExtras.h
@@ -0,0 +1,17 @@
+//
+//  GADExtras.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2012 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+@interface GADExtras : NSObject
+
+/// Additional parameters to be sent to Google networks.
+@property(nonatomic, copy) NSDictionary *additionalParameters;
+
+@end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADInAppPurchase.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInAppPurchase.h
similarity index 96%
rename from ios/GoogleMobileAdsSdkiOS/GADInAppPurchase.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInAppPurchase.h
index 91ca8559..bd8d922e 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADInAppPurchase.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInAppPurchase.h
@@ -8,8 +8,6 @@
 #import 
 #import 
 
-#import "GADModules.h"
-
 @protocol GADDefaultInAppPurchaseDelegate;
 
 #pragma mark - Default Purchase Flow
@@ -23,8 +21,7 @@
 
 /// Enables the default consumable product in-app purchase flow handled by the Google Mobile Ads
 /// SDK. The GADDefaultInAppPurchaseDelegate object is retained while the default purchase flow is
-/// enabled. This method adds a SKPaymentTransactionObserver to the default SKPaymentQueue. Remove
-/// any existing transaction observers before calling this method.
+/// enabled. This method adds a SKPaymentTransactionObserver to the default SKPaymentQueue.
 ///
 /// Call this method early in your application to handle unfinished transactions from previous
 /// application sessions. For example, call this method in your application delegate's
diff --git a/ios/GoogleMobileAdsSdkiOS/GADInAppPurchaseDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInAppPurchaseDelegate.h
similarity index 98%
rename from ios/GoogleMobileAdsSdkiOS/GADInAppPurchaseDelegate.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInAppPurchaseDelegate.h
index 51da58d3..6dee2442 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADInAppPurchaseDelegate.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInAppPurchaseDelegate.h
@@ -7,8 +7,6 @@
 
 #import 
 
-#import "GADModules.h"
-
 @class GADDefaultInAppPurchase;
 @class GADInAppPurchase;
 
diff --git a/ios/GoogleMobileAdsSdkiOS/GADInterstitial.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInterstitial.h
similarity index 65%
rename from ios/GoogleMobileAdsSdkiOS/GADInterstitial.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInterstitial.h
index 211a7c60..c53319c6 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADInterstitial.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInterstitial.h
@@ -7,36 +7,33 @@
 
 #import 
 
-#import "GADInAppPurchaseDelegate.h"
-#import "GADInterstitialDelegate.h"
-#import "GADModules.h"
-#import "GADRequest.h"
-#import "GADRequestError.h"
+#import 
+#import 
+#import 
+#import 
+#import 
 
 /// An interstitial ad. This is a full-screen advertisement shown at natural transition points in
 /// your application such as between game levels or news stories.
-///
-/// Interstitials are shown sparingly. Expect low to no fill.
 @interface GADInterstitial : NSObject
 
+/// Initializes an interstitial with an ad unit created on the AdMob website. Create a new ad unit
+/// for every unique placement of an ad in your application. Set this to the ID assigned for this
+/// placement. Ad units are important for targeting and statistics.
+///
+/// Example AdMob ad unit ID: @"ca-app-pub-0123456789012345/0123456789"
+- (instancetype)initWithAdUnitID:(NSString *)adUnitID NS_DESIGNATED_INITIALIZER;
+
 #pragma mark Pre-Request
 
-/// Required value created in the AdSense website. Create a new ad unit for every unique placement
-/// of an ad in your application. Set this to the ID assigned for this placement. Ad units are
-/// important for targeting and stats.
-/// Example values for different request types:
-///   AdMob: a0123456789ABCD
-///     DFP: /0123/ca-pub-0123456789012345/my-ad-identifier
-/// AdSense: ca-mb-app-pub-0123456789012345/my-ad-identifier
-@property(nonatomic, copy) NSString *adUnitID;
+/// Required value passed in with initWithAdUnitID:.
+@property(nonatomic, readonly, copy) NSString *adUnitID;
 
 /// Optional delegate object that receives state change notifications from this GADInterstitalAd.
-/// Remember to nil the delegate before deallocating this object.
 @property(nonatomic, weak) id delegate;
 
 /// Optional delegate object that receives in-app purchase notifications from this ad. Required for
 /// the custom in-app purchase flow, but ignored when using the default in-app purchase flow.
-/// Remember to nil the delegate before deallocating this object.
 @property(nonatomic, weak) id inAppPurchaseDelegate;
 
 #pragma mark Making an Ad Request
@@ -52,11 +49,11 @@
 #pragma mark Post-Request
 
 /// Returns YES if the interstitial is ready to be displayed. The delegate's
-/// interstitialAdDidReceiveAd: will be called when this switches from NO to YES.
+/// interstitialAdDidReceiveAd: will be called after this property switches from NO to YES.
 @property(nonatomic, readonly, assign) BOOL isReady;
 
-/// Returns YES if the interstitial object has already shown an interstitial. Note that an
-/// interstitial object can only be used once even with different requests.
+/// Returns YES if this object has already been presented. Interstitial objects can only be used
+/// once even with different requests.
 @property(nonatomic, readonly, assign) BOOL hasBeenUsed;
 
 /// Returns the ad network class name that fetched the current ad. Returns nil while the latest ad
@@ -75,4 +72,13 @@
 /// the delegate's interstitialDidDismissScreen: will be called.
 - (void)presentFromRootViewController:(UIViewController *)rootViewController;
 
+#pragma mark Deprecated
+
+/// Deprecated intializer. Use initWithAdUnitID: instead.
+- (instancetype)init GAD_DEPRECATED_MSG_ATTRIBUTE("Use initWithAdUnitID:.");
+
+/// Deprecated setter, use initWithAdUnitID: instead.
+- (void)setAdUnitID:(NSString *)adUnitID
+    GAD_DEPRECATED_MSG_ATTRIBUTE("Use initWithAdUnitID: instead of setting the ad unit ID.");
+
 @end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADInterstitialDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInterstitialDelegate.h
similarity index 95%
rename from ios/GoogleMobileAdsSdkiOS/GADInterstitialDelegate.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInterstitialDelegate.h
index c7677bdf..9f31d4ca 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADInterstitialDelegate.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADInterstitialDelegate.h
@@ -7,14 +7,14 @@
 
 #import 
 
-#import "GADModules.h"
+#import 
 
 @class GADInterstitial;
 @class GADRequestError;
 
 /// Delegate for receiving state change messages from a GADInterstitial such as interstitial ad
 /// requests succeeding/failing.
-@protocol GADInterstitialDelegate
+@protocol GADInterstitialDelegate
 
 @optional
 
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAd.h
new file mode 100644
index 00000000..868b6405
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAd.h
@@ -0,0 +1,21 @@
+//
+//  GADMediatedNativeAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+/// Base protocol for mediated native ads.
+@protocol GADMediatedNativeAd
+
+/// Returns a delegate object that receives state change notifications.
+- (id)mediatedNativeAdDelegate;
+
+/// Returns a dictionary of asset names and object pairs for assets that are not handled by
+/// properties of the GADMediatedNativeAd subclass.
+- (NSDictionary *)extraAssets;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAdDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAdDelegate.h
new file mode 100644
index 00000000..716e2835
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAdDelegate.h
@@ -0,0 +1,32 @@
+//
+//  GADMediatedNativeAdDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+@protocol GADMediatedNativeAd;
+
+/// GADMediatedNativeAdDelegate objects handle mediated native ad events.
+@protocol GADMediatedNativeAdDelegate
+
+@optional
+
+/// Tells the delegate that the mediated native ad has rendered in |view|.
+- (void)mediatedNativeAd:(id)mediatedNativeAd didRenderInView:(UIView *)view;
+
+/// Tells the delegate that the mediated native ad has recorded an impression. This method is called
+/// only once per mediated native ad.
+- (void)mediatedNativeAdDidRecordImpression:(id)mediatedNativeAd;
+
+/// Tells the delegate that the mediated native ad has recorded a user click on the asset named
+/// |assetName|. Full screen actions should be presented from |viewController|.
+- (void)mediatedNativeAd:(id)mediatedNativeAd
+    didRecordClickOnAssetWithName:(NSString *)assetName
+                             view:(UIView *)view
+                   viewController:(UIViewController *)viewController;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAdNotificationSource.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAdNotificationSource.h
new file mode 100644
index 00000000..6f1aed51
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAdNotificationSource.h
@@ -0,0 +1,31 @@
+//
+//  GADMediatedNativeAdNotificationSource.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+/// Notifies the Google Mobile Ads SDK about the events performed by adapters. Adapters may perform
+/// some action (e.g. opening an in app browser or open the iTunes store) when handling callbacks
+/// from GADMediatedNativeAdDelegate. Adapters in such case should notify the Google Mobile Ads SDK
+/// by calling the relevant methods from this class.
+@interface GADMediatedNativeAdNotificationSource : NSObject
+
+/// Must be called by the adapter just before mediatedNativeAd has opened an in app modal screen.
++ (void)mediatedNativeAdWillPresentScreen:(id)mediatedNativeAd;
+
+/// Must be called by the adapter just before the in app modal screen opened by mediatedNativeAd is
+/// dismissed.
++ (void)mediatedNativeAdWillDismissScreen:(id)mediatedNativeAd;
+
+/// Must be called by the adapter after the in app modal screen opened by mediatedNativeAd is
+/// dismissed.
++ (void)mediatedNativeAdDidDismissScreen:(id)mediatedNativeAd;
+
+/// Must be called by the adapter just before mediatedNativeAd has left the application.
++ (void)mediatedNativeAdWillLeaveApplication:(id)mediatedNativeAd;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAppInstallAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAppInstallAd.h
new file mode 100644
index 00000000..8269c87e
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeAppInstallAd.h
@@ -0,0 +1,40 @@
+//
+//  GADMediatedNativeAppInstallAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+#import 
+
+/// Provides methods used for constructing native app install ads. The adapter must return an object
+/// conforming to this protocol for native app install ad requests.
+@protocol GADMediatedNativeAppInstallAd
+
+/// App title.
+- (NSString *)headline;
+
+/// Array of GADNativeAdImage objects related to the advertised application.
+- (NSArray *)images;
+
+/// App description.
+- (NSString *)body;
+
+/// Application icon.
+- (GADNativeAdImage *)icon;
+
+/// Text that encourages user to take some action with the ad. For example "Install".
+- (NSString *)callToAction;
+
+/// App store rating (0 to 5).
+- (NSDecimalNumber *)starRating;
+
+/// The app store name. For example, "App Store".
+- (NSString *)store;
+
+/// String representation of the app's price.
+- (NSString *)price;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeContentAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeContentAd.h
new file mode 100644
index 00000000..d5600632
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMediatedNativeContentAd.h
@@ -0,0 +1,33 @@
+//
+//  GADMediatedNativeContentAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+#import 
+
+/// Provides methods used for constructing native content ads.
+@protocol GADMediatedNativeContentAd
+
+/// Primary text headline.
+- (NSString *)headline;
+
+/// Secondary text.
+- (NSString *)body;
+
+/// List of large images. Each object is an instance of GADNativeAdImage.
+- (NSArray *)images;
+
+/// Small logo image.
+- (GADNativeAdImage *)logo;
+
+/// Text that encourages user to take some action with the ad.
+- (NSString *)callToAction;
+
+/// Identifies the advertiser. For example, the advertiser’s name or visible URL.
+- (NSString *)advertiser;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMobileAds.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMobileAds.h
new file mode 100644
index 00000000..348a17f3
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADMobileAds.h
@@ -0,0 +1,31 @@
+//
+//  GADMobileAds.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+@interface GADMobileAds : NSObject
+
+/// Returns the shared GADMobileAds instance.
++ (GADMobileAds *)sharedInstance;
+
+/// Disables automated in app purchase (IAP) reporting. Must be called before any IAP transaction is
+/// initiated. IAP reporting is used to track IAP ad conversions. Do not disable reporting if you
+/// use IAP ads.
++ (void)disableAutomatedInAppPurchaseReporting;
+
+/// Disables automated SDK crash reporting. If not called, the SDK records the original exception
+/// handler if available and registers a new exception handler. The new exception handler only
+/// reports SDK related exceptions and calls the recorded original exception handler.
++ (void)disableSDKCrashReporting;
+
+/// The application's audio volume. Affects audio volumes of all ads relative to other audio output.
+/// Valid ad volume values range from 0.0 (silent) to 1.0 (current device volume). Use this method
+/// only if your application has its own volume controls (e.g., custom music or sound effect
+/// volumes).
+@property(nonatomic, assign) float applicationVolume;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAd.h
new file mode 100644
index 00000000..b4937212
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAd.h
@@ -0,0 +1,30 @@
+//
+//  GADNativeAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+@protocol GADNativeAdDelegate;
+
+/// Native ad base class. All native ad types are subclasses of this class.
+@interface GADNativeAd : NSObject
+
+/// Optional delegate to receive state change notifications.
+@property(nonatomic, weak) id delegate;
+
+/// Root view controller for handling ad actions.
+@property(nonatomic, weak) UIViewController *rootViewController;
+
+/// Dictionary of assets which aren't processed by the receiver.
+@property(nonatomic, readonly, copy) NSDictionary *extraAssets;
+
+/// The ad network class name that fetched the current ad. For both standard and mediated Google
+/// AdMob ads, this method returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation
+/// custom events, this method returns @"GADMAdapterCustomEvents".
+@property(nonatomic, readonly, copy) NSString *adNetworkClassName;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdDelegate.h
new file mode 100644
index 00000000..fa39d858
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdDelegate.h
@@ -0,0 +1,41 @@
+//
+//  GADNativeAdDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+@class GADNativeAd;
+
+/// Identifies native ad assets.
+@protocol GADNativeAdDelegate
+
+@optional
+
+#pragma mark Click-Time Lifecycle Notifications
+
+/// Called just before presenting the user a full screen view, such as a browser, in response to
+/// clicking on an ad. Use this opportunity to stop animations, time sensitive interactions, etc.
+///
+/// Normally the user looks at the ad, dismisses it, and control returns to your application with
+/// the nativeAdDidDismissScreen: message. However, if the user hits the Home button or clicks on an
+/// App Store link, your application will end. The next method called will be the
+/// applicationWillResignActive: of your UIApplicationDelegate object.Immediately after that,
+/// nativeAdWillLeaveApplication: is called.
+- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd;
+
+/// Called just before dismissing a full screen view.
+- (void)nativeAdWillDismissScreen:(GADNativeAd *)nativeAd;
+
+/// Called just after dismissing a full screen view. Use this opportunity to restart anything you
+/// may have stopped as part of nativeAdWillPresentScreen:.
+- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd;
+
+/// Called just before the application will go to the background or terminate due to an ad action
+/// that will launch another application (such as the App Store). The normal UIApplicationDelegate
+/// methods, like applicationDidEnterBackground:, will be called immediately before this.
+- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImage+Mediation.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImage+Mediation.h
new file mode 100644
index 00000000..b448c4fb
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImage+Mediation.h
@@ -0,0 +1,18 @@
+//
+//  GADNativeAdImage+Mediation.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google. All rights reserved.
+//
+
+#import "GADNativeAdImage.h"
+
+@interface GADNativeAdImage (MediationAdditions)
+
+/// Initializes and returns a native ad image object with the provided image.
+- (instancetype)initWithImage:(UIImage *)image;
+
+/// Initializes and returns a native ad image object with the provided image URL and image scale.
+- (instancetype)initWithURL:(NSURL *)URL scale:(CGFloat)scale;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImage.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImage.h
new file mode 100644
index 00000000..58da2901
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImage.h
@@ -0,0 +1,23 @@
+//
+//  GADNativeAdImage.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+/// Native ad image.
+@interface GADNativeAdImage : NSObject
+
+/// The image. If image autoloading is disabled, this property will be nil.
+@property(nonatomic, readonly, strong) UIImage *image;
+
+/// The image's URL.
+@property(nonatomic, readonly, strong) NSURL *imageURL;
+
+/// The image's scale.
+@property(nonatomic, readonly, assign) CGFloat scale;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImageAdLoaderOptions.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImageAdLoaderOptions.h
new file mode 100644
index 00000000..c847e735
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAdImageAdLoaderOptions.h
@@ -0,0 +1,31 @@
+//
+//  GADNativeAdImageAdLoaderOptions.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+/// Native ad image orientation preference.
+typedef NS_ENUM(NSInteger, GADNativeAdImageAdLoaderOptionsOrientation) {
+  GADNativeAdImageAdLoaderOptionsOrientationAny,       ///< No orientation preference.
+  GADNativeAdImageAdLoaderOptionsOrientationPortrait,  ///< Prefer portrait images.
+  GADNativeAdImageAdLoaderOptionsOrientationLandscape  ///< Prefer landscape images.
+};
+
+@interface GADNativeAdImageAdLoaderOptions : GADAdLoaderOptions
+
+/// Indicates if image asset content should be loaded by the SDK. If set to YES, the SDK will not
+/// load image asset content and native ad image URLs can be used to fetch content. Defaults to NO,
+/// image assets are loaded by the SDK.
+@property(nonatomic, assign) BOOL disableImageLoading;
+
+/// Indicates if multiple images should be loaded for each asset. Defaults to NO.
+@property(nonatomic, assign) BOOL shouldRequestMultipleImages;
+
+/// Indicates preferred image orientation. Defaults to
+/// GADNativeAdImageAdLoaderOptionsOrientationAny.
+@property(nonatomic, assign) GADNativeAdImageAdLoaderOptionsOrientation preferredImageOrientation;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAppInstallAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAppInstallAd.h
new file mode 100644
index 00000000..65126276
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeAppInstallAd.h
@@ -0,0 +1,77 @@
+//
+//  GADNativeAppInstallAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+#import 
+#import 
+#import 
+#import 
+
+/// For use with GADAdLoader's creation methods. If you request this ad type, your delegate must
+/// conform to the GADNativeAppInstallAdRequestDelegate protocol.
+///
+/// See GADNativeAdImageAdLoaderOptions.h for ad loader image options.
+GAD_EXTERN NSString *const kGADAdLoaderAdTypeNativeAppInstall;
+
+/// Native app install ad.
+@interface GADNativeAppInstallAd : GADNativeAd
+
+#pragma mark - Must be displayed
+
+/// App title.
+@property(nonatomic, readonly, copy) NSString *headline;
+/// Text that encourages user to take some action with the ad. For example "Install".
+@property(nonatomic, readonly, copy) NSString *callToAction;
+/// Application icon.
+@property(nonatomic, readonly, strong) GADNativeAdImage *icon;
+
+#pragma mark - Recommended to display
+
+/// App description.
+@property(nonatomic, readonly, copy) NSString *body;
+/// The app store name. For example, "App Store".
+@property(nonatomic, readonly, copy) NSString *store;
+/// String representation of the app's price.
+@property(nonatomic, readonly, copy) NSString *price;
+/// Array of GADNativeAdImage objects related to the advertised application.
+@property(nonatomic, readonly, strong) NSArray *images;
+/// App store rating (0 to 5).
+@property(nonatomic, readonly, copy) NSDecimalNumber *starRating;
+@end
+
+#pragma mark - Protocol and constants
+
+/// The delegate of a GADAdLoader object implements this protocol to receive GADNativeAppInstallAd
+/// ads.
+@protocol GADNativeAppInstallAdLoaderDelegate
+/// Called when a native app install ad is received.
+- (void)adLoader:(GADAdLoader *)adLoader
+    didReceiveNativeAppInstallAd:(GADNativeAppInstallAd *)nativeAppInstallAd;
+@end
+
+#pragma mark - Native App Install Ad View
+
+/// Base class for app install ad views. Your app install ad view must be a subclass of this class
+/// and must call superclass methods for all overriden methods.
+@interface GADNativeAppInstallAdView : UIView
+
+/// This property must point to the native app install ad object rendered by this ad view.
+@property(nonatomic, strong) GADNativeAppInstallAd *nativeAppInstallAd;
+
+// Weak references to your ad view's asset views.
+@property(nonatomic, weak) IBOutlet UIView *headlineView;
+@property(nonatomic, weak) IBOutlet UIView *callToActionView;
+@property(nonatomic, weak) IBOutlet UIView *iconView;
+@property(nonatomic, weak) IBOutlet UIView *bodyView;
+@property(nonatomic, weak) IBOutlet UIView *storeView;
+@property(nonatomic, weak) IBOutlet UIView *priceView;
+@property(nonatomic, weak) IBOutlet UIView *imageView;
+@property(nonatomic, weak) IBOutlet UIView *starRatingView;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeContentAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeContentAd.h
new file mode 100644
index 00000000..0e5d9998
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeContentAd.h
@@ -0,0 +1,72 @@
+//
+//  GADNativeContentAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+#import 
+#import 
+#import 
+#import 
+
+#pragma mark - Native Content Ad Assets
+
+/// For use with GADAdLoader's creation methods. If you request this ad type, your delegate must
+/// conform to the GADNativeContentAdRequestDelegate protocol.
+///
+/// See GADNativeAdImageAdLoaderOptions.h for ad loader image options.
+GAD_EXTERN NSString *const kGADAdLoaderAdTypeNativeContent;
+
+/// Native content ad.
+@interface GADNativeContentAd : GADNativeAd
+
+#pragma mark - Must be displayed
+
+/// Primary text headline.
+@property(nonatomic, readonly, copy) NSString *headline;
+/// Secondary text.
+@property(nonatomic, readonly, copy) NSString *body;
+
+#pragma mark - Recommended to display
+
+/// Large images.
+@property(nonatomic, readonly, copy) NSArray *images;
+/// Small logo image.
+@property(nonatomic, readonly, strong) GADNativeAdImage *logo;
+/// Text that encourages user to take some action with the ad.
+@property(nonatomic, readonly, copy) NSString *callToAction;
+/// Identifies the advertiser. For example, the advertiser’s name or visible URL.
+@property(nonatomic, readonly, copy) NSString *advertiser;
+@end
+
+#pragma mark - Protocol and constants
+
+/// The delegate of a GADAdLoader object implements this protocol to receive GADNativeContentAd ads.
+@protocol GADNativeContentAdLoaderDelegate
+/// Called when native content is received.
+- (void)adLoader:(GADAdLoader *)adLoader
+    didReceiveNativeContentAd:(GADNativeContentAd *)nativeContentAd;
+@end
+
+#pragma mark - Native Content Ad View
+
+/// Base class for content ad views. Your content ad view must be a subclass of this class and must
+/// call superclass methods for all overriden methods.
+@interface GADNativeContentAdView : UIView
+
+/// This property must point to the native content ad object rendered by this ad view.
+@property(nonatomic, strong) GADNativeContentAd *nativeContentAd;
+
+// Weak references to your ad view's asset views.
+@property(nonatomic, weak) IBOutlet UIView *headlineView;
+@property(nonatomic, weak) IBOutlet UIView *bodyView;
+@property(nonatomic, weak) IBOutlet UIView *imageView;
+@property(nonatomic, weak) IBOutlet UIView *logoView;
+@property(nonatomic, weak) IBOutlet UIView *callToActionView;
+@property(nonatomic, weak) IBOutlet UIView *advertiserView;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeCustomTemplateAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeCustomTemplateAd.h
new file mode 100644
index 00000000..b7dbd233
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADNativeCustomTemplateAd.h
@@ -0,0 +1,62 @@
+//
+//  GADNativeCustomTemplateAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+#import 
+#import 
+#import 
+#import 
+
+/// For use with GADAdLoader's creation methods. If you request this ad type, your delegate must
+/// conform to the GADNativeCustomTemplateAdLoaderDelegate protocol.
+GAD_EXTERN NSString *const kGADAdLoaderAdTypeNativeCustomTemplate;
+
+/// Native custom template ad.
+@interface GADNativeCustomTemplateAd : GADNativeAd
+
+/// The ad's custom template ID.
+@property(nonatomic, readonly) NSString *templateID;
+
+/// Array of available asset keys.
+@property(nonatomic, readonly) NSArray *availableAssetKeys;
+
+/// Returns the native ad image corresponding to the specified key or nil if the image is not
+/// available.
+- (GADNativeAdImage *)imageForKey:(NSString *)key;
+
+/// Returns the string corresponding to the specified key or nil if the string is not available.
+- (NSString *)stringForKey:(NSString *)key;
+
+/// Call when the user clicks on the ad. Provide the asset key that best matches the asset the user
+/// interacted with. Provide |customClickHandler| only if this template is configured with a custom
+/// click action, otherwise pass in nil. If a block is provided, the ad's built-in click actions are
+/// ignored and |customClickHandler| is executed after recording the click.
+- (void)performClickOnAssetWithKey:(NSString *)assetKey
+                customClickHandler:(dispatch_block_t)customClickHandler;
+
+/// Call when the ad is displayed on screen to the user. Can be called multiple times. Only the
+/// first impression is recorded.
+- (void)recordImpression;
+
+@end
+
+#pragma mark - Loading Protocol
+
+/// The delegate of a GADAdLoader object implements this protocol to receive
+/// GADNativeCustomTemplateAd ads.
+@protocol GADNativeCustomTemplateAdLoaderDelegate
+
+/// Called when requesting an ad. Asks the delgate for an array of custom template ID strings.
+- (NSArray *)nativeCustomTemplateIDsForAdLoader:(GADAdLoader *)adLoader;
+
+/// Tells the delegate that a native custom template ad was received.
+- (void)adLoader:(GADAdLoader *)adLoader
+    didReceiveNativeCustomTemplateAd:(GADNativeCustomTemplateAd *)nativeCustomTemplateAd;
+
+@end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADRequest.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRequest.h
similarity index 73%
rename from ios/GoogleMobileAdsSdkiOS/GADRequest.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRequest.h
index bf11028f..68060d52 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADRequest.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRequest.h
@@ -8,12 +8,12 @@
 #import 
 #import 
 
-#import "GADModules.h"
-
-@protocol GADAdNetworkExtras;
+#import 
 
 /// Add this constant to the testDevices property's array to receive test ads on the simulator.
-#define GAD_SIMULATOR_ID @"Simulator"
+GAD_EXTERN const id kGADSimulatorID;
+
+@protocol GADAdNetworkExtras;
 
 /// Genders to help deliver more relevant ads.
 typedef NS_ENUM(NSInteger, GADGender) {
@@ -25,7 +25,7 @@ typedef NS_ENUM(NSInteger, GADGender) {
 /// Specifies optional parameters for ad requests.
 @interface GADRequest : NSObject
 
-/// Creates an autoreleased GADRequest.
+/// Returns a default request.
 + (instancetype)request;
 
 #pragma mark Additional Parameters For Ad Networks
@@ -45,9 +45,6 @@ typedef NS_ENUM(NSInteger, GADGender) {
 /// extras type.
 - (void)removeAdNetworkExtrasFor:(Class)aClass;
 
-/// Extras sent to the mediation server if using mediation. For future use.
-@property(nonatomic, copy) NSDictionary *mediationExtras;
-
 #pragma mark Collecting SDK Information
 
 /// Returns the version of the SDK.
@@ -60,12 +57,11 @@ typedef NS_ENUM(NSInteger, GADGender) {
 
 #pragma mark User Information
 
-/// The user's gender may be used to deliver more relevant ads.
+/// Provide the user's gender to increase ad relevancy.
 @property(nonatomic, assign) GADGender gender;
 
-/// The user's birthday may be used to deliver more relevant ads.
-@property(nonatomic, strong) NSDate *birthday;
-- (void)setBirthdayWithMonth:(NSInteger)m day:(NSInteger)d year:(NSInteger)y;
+/// Provide the user's birthday to increase ad relevancy.
+@property(nonatomic, copy) NSDate *birthday;
 
 /// The user's current location may be used 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
@@ -74,11 +70,6 @@ typedef NS_ENUM(NSInteger, GADGender) {
                       longitude:(CGFloat)longitude
                        accuracy:(CGFloat)accuracyInMeters;
 
-/// When Core Location isn't available but the user's location is known supplying it here may
-/// deliver more relevant ads. It can be any free-form text such as @"Champs-Elysees Paris" or
-/// @"94041 US".
-- (void)setLocationWithDescription:(NSString *)locationDescription;
-
 /// [Optional] This method allows you to specify whether you would like your app to be treated as
 /// child-directed for purposes of the Children’s Online Privacy Protection Act (COPPA),
 /// http:///business.ftc.gov/privacy-and-security/childrens-privacy.
@@ -100,27 +91,34 @@ typedef NS_ENUM(NSInteger, GADGender) {
 
 #pragma mark Contextual Information
 
-/// A keyword is a word or phrase describing the current activity of the user such as @"Sports
-/// Scores". Each keyword is an NSString in the NSArray. To clear the keywords set this to nil.
-@property(nonatomic, strong) NSMutableArray *keywords;
-
-/// Convenience method for adding keywords one at a time such as @"Sports Scores" and then
-/// @"Football".
-- (void)addKeyword:(NSString *)keyword;
+/// Array of keyword strings. Keywords are words or phrases describing the current user activity
+/// such as @"Sports Scores" or @"Football". Set this property to nil to clear the keywords.
+@property(nonatomic, copy) NSArray *keywords;
 
 /// URL string for a webpage whose content matches the app content. This webpage content is used for
 /// targeting purposes.
 @property(nonatomic, copy) NSString *contentURL;
 
-#pragma mark - Deprecated Methods
+#pragma mark Request Agent Information
+
+/// String that identifies the ad request's origin. Third party libraries that reference the Mobile
+/// Ads SDK should set this property to denote the platform from which the ad request originated.
+/// For example, a third party ad network called "CoolAds network" that is mediating requests to the
+/// Mobile Ads SDK should set this property as "CoolAds".
+@property(nonatomic, copy) NSString *requestAgent;
+
+#pragma mark Deprecated Methods
 
-/// Accesses the additionalParameters for the "GoogleAdmob" ad network. Please use
-/// -registerAdNetworkExtras: method above and pass an instance of GADAdMobExtras instead.
-@property(nonatomic, copy) NSDictionary *additionalParameters __attribute__((
-    deprecated(" use registerAdNetworkExtras: and pass an instance of GADAdMobExtras.")));
+/// Provide the user's birthday to increase ad relevancy.
+- (void)setBirthdayWithMonth:(NSInteger)month
+                         day:(NSInteger)day
+                        year:(NSInteger)year
+    GAD_DEPRECATED_MSG_ATTRIBUTE(" use the birthday property.");
 
-/// This property has been deprecated with the latest SDK releases. Please use testDevices.
-@property(nonatomic, assign, getter=isTesting) BOOL testing
-    __attribute__((deprecated(" use the testDevices property.")));
+/// When Core Location isn't available but the user's location is known supplying it here may
+/// deliver more relevant ads. It can be any free-form text such as @"Champs-Elysees Paris" or
+/// @"94041 US".
+- (void)setLocationWithDescription:(NSString *)locationDescription
+    GAD_DEPRECATED_MSG_ATTRIBUTE(" use setLocationWithLatitude:longitude:accuracy:.");
 
 @end
diff --git a/ios/GoogleMobileAdsSdkiOS/GADRequestError.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRequestError.h
similarity index 94%
rename from ios/GoogleMobileAdsSdkiOS/GADRequestError.h
rename to ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRequestError.h
index 6dcb06d7..31175e49 100644
--- a/ios/GoogleMobileAdsSdkiOS/GADRequestError.h
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRequestError.h
@@ -7,12 +7,12 @@
 
 #import 
 
-#import "GADModules.h"
+#import 
 
 @class GADRequest;
 
 /// Google AdMob Ads error domain.
-extern NSString *const kGADErrorDomain;
+GAD_EXTERN NSString *const kGADErrorDomain;
 
 /// NSError codes for GAD error domain.
 typedef NS_ENUM(NSInteger, GADErrorCode) {
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRewardBasedVideoAd.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRewardBasedVideoAd.h
new file mode 100644
index 00000000..77a71e85
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRewardBasedVideoAd.h
@@ -0,0 +1,39 @@
+//
+//  GADRewardBasedVideoAd.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+@class GADRequest;
+
+@protocol GADRewardBasedVideoAdDelegate;
+
+/// The GADRewardBasedVideoAd class is used for requesting and presenting a reward based video ad.
+/// This class isn't thread safe.
+@interface GADRewardBasedVideoAd : NSObject
+
+/// Delegate for receiving video notifications.
+@property(nonatomic, weak) id delegate;
+
+/// Indicates if the receiver is ready to be presented full screen.
+@property(nonatomic, readonly, getter=isReady) BOOL ready;
+
+/// Returns the shared GADRewardBasedVideoAd instance.
++ (GADRewardBasedVideoAd *)sharedInstance;
+
+/// Initiates the request to fetch the reward based video ad. The |request| object supplies ad
+/// targeting information and must not be nil. The adUnitID is the ad unit id used for fetching an
+/// ad and must not be nil. The userID is any unique identifier used for identifying the user
+/// interacting with the application and can be nil.
+- (void)loadRequest:(GADRequest *)request
+       withAdUnitID:(NSString *)adUnitID
+             userID:(NSString *)userID;
+
+/// Presents the reward based video ad with the provided view controller.
+- (void)presentFromRootViewController:(UIViewController *)viewController;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRewardBasedVideoAdDelegate.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRewardBasedVideoAdDelegate.h
new file mode 100644
index 00000000..9502db80
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADRewardBasedVideoAdDelegate.h
@@ -0,0 +1,41 @@
+//
+//  GADRewardBasedVideoAdDelegate.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2015 Google Inc. All rights reserved.
+//
+
+#import 
+
+#import 
+
+/// Delegate for receiving state change messages from a GADRewardBasedVideoAd such as ad requests
+/// succeeding/failing.
+@protocol GADRewardBasedVideoAdDelegate
+
+@optional
+
+/// Tells the delegate that the reward based video ad has been received.
+- (void)rewardBasedVideoAdDidReceiveAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd;
+
+/// Tells the delegate that the reward based video ad is opened.
+- (void)rewardBasedVideoAdDidOpen:(GADRewardBasedVideoAd *)rewardBasedVideoAd;
+
+/// Tells the delegate that the reward based video ad has started playing.
+- (void)rewardBasedVideoAdDidStartPlaying:(GADRewardBasedVideoAd *)rewardBasedVideoAd;
+
+/// Tells the delegate that the reward based video ad is closed.
+- (void)rewardBasedVideoAdDidClose:(GADRewardBasedVideoAd *)rewardBasedVideoAd;
+
+/// Tells the delegate that the reward based video ad will leave the application.
+- (void)rewardBasedVideoAdWillLeaveApplication:(GADRewardBasedVideoAd *)rewardBasedVideoAd;
+
+/// Tells the delegate that the reward based video ad has rewarded the user.
+- (void)rewardBasedVideoAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd
+    didRewardUserWithReward:(GADAdReward *)reward;
+
+/// Tells the delegate that the reward based video ad has failed to load.
+- (void)rewardBasedVideoAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd
+    didFailToLoadWithError:(NSError *)error;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADSearchBannerView.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADSearchBannerView.h
new file mode 100644
index 00000000..363ad24c
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADSearchBannerView.h
@@ -0,0 +1,16 @@
+//
+//  GADSearchBannerView.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2011 Google Inc. All rights reserved.
+//
+
+#import 
+
+// A view that displays search ads.
+// To show search ads:
+//   1) Create a GADSearchBannerView and add it to your view controller's view hierarchy.
+//   2) Create a GADSearchRequest ad request object to hold the search query and other search data.
+//   3) Call GADSearchBannerView's -loadRequest: method with the GADSearchRequest object.
+@interface GADSearchBannerView : GADBannerView
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADSearchRequest.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADSearchRequest.h
new file mode 100644
index 00000000..461852ae
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GADSearchRequest.h
@@ -0,0 +1,57 @@
+//
+//  GADSearchRequest.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2011 Google Inc. All rights reserved.
+//
+
+#import 
+#import 
+
+#import 
+
+/// Search ad border types.
+typedef NS_ENUM(NSUInteger, GADSearchBorderType) {
+  kGADSearchBorderTypeNone,
+  kGADSearchBorderTypeDashed,
+  kGADSearchBorderTypeDotted,
+  kGADSearchBorderTypeSolid
+};
+
+typedef NS_ENUM(NSUInteger, GADSearchCallButtonColor) {
+  kGADSearchCallButtonLight,
+  kGADSearchCallButtonMedium,
+  kGADSearchCallButtonDark
+};
+
+// Specifies parameters for search ads.
+@interface GADSearchRequest : GADRequest
+
+@property(nonatomic, copy) NSString *query;
+@property(nonatomic, copy, readonly) UIColor *backgroundColor;
+@property(nonatomic, copy, readonly) UIColor *gradientFrom;
+@property(nonatomic, copy, readonly) UIColor *gradientTo;
+@property(nonatomic, copy) UIColor *headerColor;
+@property(nonatomic, copy) UIColor *descriptionTextColor;
+@property(nonatomic, copy) UIColor *anchorTextColor;
+@property(nonatomic, copy) NSString *fontFamily;
+@property(nonatomic, assign) NSUInteger headerTextSize;
+@property(nonatomic, copy) UIColor *borderColor;
+@property(nonatomic, assign) GADSearchBorderType borderType;
+@property(nonatomic, assign) NSUInteger borderThickness;
+@property(nonatomic, copy) NSString *customChannels;
+@property(nonatomic, assign) GADSearchCallButtonColor callButtonColor;
+
+// A solid background color for rendering the ad. The background of the ad
+// can either be a solid color, or a gradient, which can be specified through
+// setBackgroundGradientFrom:toColor: method. If both solid and gradient
+// background is requested, only the latter is considered.
+- (void)setBackgroundSolid:(UIColor *)color;
+
+// A linear gradient background color for rendering the ad. The background of
+// the ad can either be a linear gradient, or a solid color, which can be
+// specified through setBackgroundSolid method. If both solid and gradient
+// background is requested, only the latter is considered.
+- (void)setBackgroundGradientFrom:(UIColor *)from toColor:(UIColor *)toColor;
+
+@end
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GoogleMobileAds.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GoogleMobileAds.h
new file mode 100644
index 00000000..1f5490b2
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GoogleMobileAds.h
@@ -0,0 +1,78 @@
+//
+//  GoogleMobileAds.h
+//  Google Mobile Ads SDK
+//
+//  Copyright 2014 Google Inc. All rights reserved.
+
+#import 
+#import 
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0
+#error The Google Mobile Ads SDK requires a deployment target of iOS 6.0 or later.
+#endif
+
+//! Project version string for GoogleMobileAds.
+FOUNDATION_EXPORT const unsigned char GoogleMobileAdsVersionString[];
+
+// Header files.
+#import 
+
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+
+#import 
+#import 
+#import 
+
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+
+#import 
+
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+#import 
+
+#import 
+#import 
+
+#import 
+#import 
+#import 
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GoogleMobileAdsDefines.h b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GoogleMobileAdsDefines.h
new file mode 100644
index 00000000..ad036c97
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/A/Headers/GoogleMobileAdsDefines.h
@@ -0,0 +1,30 @@
+//
+//  GoogleMobileAdsDefines.h
+//  Google Mobile Ads SDK
+//
+//  Copyright (c) 2015 Google Inc. All rights reserved.
+//
+
+#if defined(__cplusplus)
+#define GAD_EXTERN extern "C" __attribute__((visibility("default")))
+#else
+#define GAD_EXTERN extern __attribute__((visibility("default")))
+#endif  // defined(__cplusplus)
+
+#if defined(__has_feature) && defined(__has_attribute)
+#if __has_feature(attribute_GAD_DEPRECATED_with_message)
+#define GAD_DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s)))
+#elif __has_attribute(deprecated)
+#define GAD_DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated))
+#else
+#define GAD_DEPRECATED_MSG_ATTRIBUTE(s)
+#endif  // __has_feature(attribute_GAD_DEPRECATED_with_message)
+#if __has_attribute(deprecated)
+#define GAD_DEPRECATED_ATTRIBUTE __attribute__((deprecated))
+#else
+#define GAD_DEPRECATED_ATTRIBUTE
+#endif  // __has_attribute(deprecated)
+#else
+#define GAD_DEPRECATED_ATTRIBUTE
+#define GAD_DEPRECATED_MSG_ATTRIBUTE(s)
+#endif  // defined(__has_feature) && defined(__has_attribute)
diff --git a/ios/platform/ios/GoogleMobileAds.framework/Versions/Current b/ios/platform/ios/GoogleMobileAds.framework/Versions/Current
new file mode 120000
index 00000000..8c7e5a66
--- /dev/null
+++ b/ios/platform/ios/GoogleMobileAds.framework/Versions/Current
@@ -0,0 +1 @@
+A
\ No newline at end of file
diff --git a/ios/titanium.xcconfig b/ios/titanium.xcconfig
index d1299fff..89fdc86a 100644
--- a/ios/titanium.xcconfig
+++ b/ios/titanium.xcconfig
@@ -4,7 +4,7 @@
 // OF YOUR TITANIUM SDK YOU'RE BUILDING FOR
 //
 //
-TITANIUM_SDK_VERSION = 3.4.1.GA
+TITANIUM_SDK_VERSION = 5.1.1.GA
 
 
 //
diff --git a/ios/version.txt b/ios/version.txt
deleted file mode 100644
index b26329a6..00000000
--- a/ios/version.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Google Mobile Ads SDK for iOS
-Version 6.12.0
-
-Downloaded from:
-https://developers.google.com/mobile-ads-sdk/download