├── .gitignore ├── .swiftformat ├── Frameworks ├── OMSDK_Teadstv.xcframework │ ├── Info.plist │ ├── ios-arm64 │ │ └── OMSDK_Teadstv.framework │ │ │ ├── Headers │ │ │ ├── OMIDAdEvents.h │ │ │ ├── OMIDAdSession.h │ │ │ ├── OMIDAdSessionConfiguration.h │ │ │ ├── OMIDAdSessionContext.h │ │ │ ├── OMIDFriendlyObstructionType.h │ │ │ ├── OMIDImports.h │ │ │ ├── OMIDJavaScriptSessionService.h │ │ │ ├── OMIDMediaEvents.h │ │ │ ├── OMIDPartner.h │ │ │ ├── OMIDSDK.h │ │ │ ├── OMIDScriptInjector.h │ │ │ ├── OMIDVASTProperties.h │ │ │ ├── OMIDVerificationScriptResource.h │ │ │ └── OMSDK.h │ │ │ ├── Info.plist │ │ │ ├── Modules │ │ │ └── module.modulemap │ │ │ ├── OMSDK_Teadstv │ │ │ └── PrivacyInfo.xcprivacy │ ├── ios-arm64_x86_64-simulator │ │ └── OMSDK_Teadstv.framework │ │ │ ├── Headers │ │ │ ├── OMIDAdEvents.h │ │ │ ├── OMIDAdSession.h │ │ │ ├── OMIDAdSessionConfiguration.h │ │ │ ├── OMIDAdSessionContext.h │ │ │ ├── OMIDFriendlyObstructionType.h │ │ │ ├── OMIDImports.h │ │ │ ├── OMIDJavaScriptSessionService.h │ │ │ ├── OMIDMediaEvents.h │ │ │ ├── OMIDPartner.h │ │ │ ├── OMIDSDK.h │ │ │ ├── OMIDScriptInjector.h │ │ │ ├── OMIDVASTProperties.h │ │ │ ├── OMIDVerificationScriptResource.h │ │ │ └── OMSDK.h │ │ │ ├── Info.plist │ │ │ ├── Modules │ │ │ └── module.modulemap │ │ │ ├── OMSDK_Teadstv │ │ │ ├── PrivacyInfo.xcprivacy │ │ │ └── _CodeSignature │ │ │ └── CodeResources │ ├── tvos-arm64 │ │ └── OMSDK_Teadstv.framework │ │ │ ├── Headers │ │ │ ├── OMIDAdEvents.h │ │ │ ├── OMIDAdSession.h │ │ │ ├── OMIDAdSessionConfiguration.h │ │ │ ├── OMIDAdSessionContext.h │ │ │ ├── OMIDFriendlyObstructionType.h │ │ │ ├── OMIDImports.h │ │ │ ├── OMIDJavaScriptSessionService.h │ │ │ ├── OMIDMediaEvents.h │ │ │ ├── OMIDPartner.h │ │ │ ├── OMIDSDK.h │ │ │ ├── OMIDScriptInjector.h │ │ │ ├── OMIDVASTProperties.h │ │ │ ├── OMIDVerificationScriptResource.h │ │ │ └── OMSDK.h │ │ │ ├── Info.plist │ │ │ ├── Modules │ │ │ └── module.modulemap │ │ │ ├── OMSDK_Teadstv │ │ │ └── PrivacyInfo.xcprivacy │ └── tvos-arm64_x86_64-simulator │ │ └── OMSDK_Teadstv.framework │ │ ├── Headers │ │ ├── OMIDAdEvents.h │ │ ├── OMIDAdSession.h │ │ ├── OMIDAdSessionConfiguration.h │ │ ├── OMIDAdSessionContext.h │ │ ├── OMIDFriendlyObstructionType.h │ │ ├── OMIDImports.h │ │ ├── OMIDJavaScriptSessionService.h │ │ ├── OMIDMediaEvents.h │ │ ├── OMIDPartner.h │ │ ├── OMIDSDK.h │ │ ├── OMIDScriptInjector.h │ │ ├── OMIDVASTProperties.h │ │ ├── OMIDVerificationScriptResource.h │ │ └── OMSDK.h │ │ ├── Info.plist │ │ ├── Modules │ │ └── module.modulemap │ │ ├── OMSDK_Teadstv │ │ ├── PrivacyInfo.xcprivacy │ │ └── _CodeSignature │ │ └── CodeResources └── TeadsSDK.xcframework │ ├── Info.plist │ ├── _CodeSignature │ ├── CodeDirectory │ ├── CodeRequirements │ ├── CodeRequirements-1 │ ├── CodeResources │ └── CodeSignature │ ├── ios-arm64 │ └── TeadsSDK.framework │ │ ├── Assets.car │ │ ├── Headers │ │ ├── TeadsSDK-Swift.h │ │ └── TeadsSDK.h │ │ ├── Info.plist │ │ ├── Modules │ │ ├── TeadsSDK.swiftmodule │ │ │ ├── arm64-apple-ios.abi.json │ │ │ ├── arm64-apple-ios.private.swiftinterface │ │ │ ├── arm64-apple-ios.swiftdoc │ │ │ └── arm64-apple-ios.swiftinterface │ │ └── module.modulemap │ │ ├── PrivacyInfo.xcprivacy │ │ ├── TeadsSDK │ │ ├── lib-js.tar │ │ ├── omid-session-client-v1.js │ │ ├── omsdk-v1.js │ │ └── wkMessageHandlerScript.js │ └── ios-arm64_x86_64-simulator │ └── TeadsSDK.framework │ ├── Assets.car │ ├── Headers │ ├── TeadsSDK-Swift.h │ └── TeadsSDK.h │ ├── Info.plist │ ├── Modules │ ├── TeadsSDK.swiftmodule │ │ ├── arm64-apple-ios-simulator.abi.json │ │ ├── arm64-apple-ios-simulator.private.swiftinterface │ │ ├── arm64-apple-ios-simulator.swiftdoc │ │ ├── arm64-apple-ios-simulator.swiftinterface │ │ ├── x86_64-apple-ios-simulator.abi.json │ │ ├── x86_64-apple-ios-simulator.private.swiftinterface │ │ ├── x86_64-apple-ios-simulator.swiftdoc │ │ └── x86_64-apple-ios-simulator.swiftinterface │ └── module.modulemap │ ├── PrivacyInfo.xcprivacy │ ├── TeadsSDK │ ├── _CodeSignature │ └── CodeResources │ ├── lib-js.tar │ ├── omid-session-client-v1.js │ ├── omsdk-v1.js │ └── wkMessageHandlerScript.js ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── MediationAdapters ├── Common │ ├── CGFloat-extensions.swift │ ├── Helper.swift │ ├── TeadsAdapterErrorCode.swift │ └── TeadsInReadAdView-extensions.swift ├── TeadsAdMobAdapter │ ├── AdMobHelper.swift │ ├── Banner │ │ ├── GADMAdapterTeadsBanner.swift │ │ └── GADMAdapterTeadsBannerAd.swift │ ├── Exports.swift │ ├── GADMAdapterTeadsCustomEvent.swift │ ├── Native │ │ ├── GADMAdapterTeadsNative.swift │ │ └── GADMAdapterTeadsNativeAd.swift │ ├── README.md │ └── TeadsAdapterSettings+GADAdNetworkExtras.swift ├── TeadsAppLovinAdapter │ ├── AppLovinTeadsNativeAd.swift │ ├── Exports.swift │ ├── README.md │ ├── TeadsMediationAdapter.swift │ └── TeadsMediationAdapterExtension.swift └── TeadsSASAdapter │ ├── README.md │ ├── TeadsSASAdapterHelper.swift │ ├── TeadsSASBannerAdapter.swift │ └── TeadsSASNativeAdapter.swift ├── Package.resolved ├── Package.swift ├── Podfile ├── Podfile.lock ├── README.md ├── ReadmeResources ├── OMCompliant.png ├── apple-ic.png └── teads_logo.png ├── TeadsAdMobAdapter.podspec ├── TeadsAppLovinAdapter.podspec ├── TeadsSASAdapter.podspec ├── TeadsSDK.podspec ├── TeadsSampleApp.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── TeadsSampleApp.xcscheme ├── TeadsSampleApp.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ ├── IDEWorkspaceChecks.plist │ └── WorkspaceSettings.xcsettings ├── TeadsSampleApp ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppBackgroundColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ ├── 100.png │ │ ├── 1024.png │ │ ├── 114.png │ │ ├── 120.png │ │ ├── 128.png │ │ ├── 144.png │ │ ├── 152.png │ │ ├── 16.png │ │ ├── 167.png │ │ ├── 172.png │ │ ├── 180.png │ │ ├── 196.png │ │ ├── 20.png │ │ ├── 216.png │ │ ├── 256.png │ │ ├── 29.png │ │ ├── 32.png │ │ ├── 40.png │ │ ├── 48.png │ │ ├── 50.png │ │ ├── 512.png │ │ ├── 55.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 60.png │ │ ├── 64.png │ │ ├── 72.png │ │ ├── 76.png │ │ ├── 80.png │ │ ├── 87.png │ │ ├── 88.png │ │ └── Contents.json │ ├── AppTextColor.colorset │ │ └── Contents.json │ ├── CellBorderColor.colorset │ │ └── Contents.json │ ├── CollectionView.imageset │ │ ├── CollectionView100.png │ │ ├── CollectionView150.png │ │ ├── CollectionView50.png │ │ └── Contents.json │ ├── Contents.json │ ├── FakeArticleColor.colorset │ │ └── Contents.json │ ├── LaunchImage.launchimage │ │ ├── Contents.json │ │ ├── ipad2mini-1.png │ │ ├── ipad2mini-2.png │ │ ├── ipad2mini.png │ │ ├── ipad2mini_landscape-1.png │ │ ├── ipad2mini_landscape-2.png │ │ ├── ipad2mini_landscape.png │ │ ├── ipad2mini_landscape@2x-1.png │ │ ├── ipad2mini_landscape@2x-2.png │ │ ├── ipad2mini_landscape@2x.png │ │ ├── ipad2mini_portrait@2x-1.png │ │ ├── ipad2mini_portrait@2x-2.png │ │ ├── ipad2mini_portrait@2x.png │ │ ├── iphone4-320x480.png │ │ ├── iphone4-640x960-1.png │ │ ├── iphone4-640x960.png │ │ ├── iphone5-1.png │ │ ├── iphone5.png │ │ ├── iphone6+.png │ │ ├── iphone6+_landscape.png │ │ └── iphone6.png │ ├── LightBlueColor.colorset │ │ └── Contents.json │ ├── LogoTeads-LaunchScreen.imageset │ │ ├── Contents.json │ │ └── LogoTeads-SplashScreen.png │ ├── PageView.imageset │ │ ├── Contents.json │ │ └── PageView150.png │ ├── PrimaryColor.colorset │ │ └── Contents.json │ ├── ScrollView.imageset │ │ ├── Contents.json │ │ ├── ScrollView100.png │ │ ├── ScrollView150.png │ │ └── ScrollView50.png │ ├── TableView.imageset │ │ ├── Contents.json │ │ ├── TableView100.png │ │ ├── TableView150.png │ │ └── TableView50.png │ ├── Teads-Sample-App-White.imageset │ │ ├── Contents.json │ │ └── Teads-Sample-App-white-1.png │ ├── Teads-Sample-App.imageset │ │ ├── Contents.json │ │ ├── Teads-Sample-App-black-1.png │ │ ├── Teads-Sample-App-black.png │ │ └── Teads-Sample-App-white.png │ ├── TeadsBlueColor.colorset │ │ └── Contents.json │ ├── TeadsGrayColor.colorset │ │ └── Contents.json │ ├── TeadsPurpleColor.colorset │ │ └── Contents.json │ ├── WebView.imageset │ │ ├── Contents.json │ │ ├── WebView100.png │ │ ├── WebView150.png │ │ └── WebView50.png │ ├── coffeeDesk.imageset │ │ ├── Contents.json │ │ └── coffeeDesk2.png │ ├── logoTeads.imageset │ │ ├── Contents.json │ │ ├── logoTeads copy.png │ │ ├── logoTeads@2x.png │ │ └── logoTeads@3x.png │ ├── settings_white.imageset │ │ ├── Contents.json │ │ ├── settings_white.png │ │ ├── settings_white@2x.png │ │ └── settings_white@3x.png │ ├── social-covers.imageset │ │ ├── Contents.json │ │ └── social-covers.jpg │ └── teads-logo.imageset │ │ ├── Contents.json │ │ ├── teads-logo-dark.png │ │ └── teads-logo.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Cells │ ├── AdmobNativeAdTableViewCell.swift │ ├── FakeArticleNativeTableViewCell.swift │ ├── NativeAdCollectionViewCell.swift │ ├── NativeAdTableViewCell.swift │ └── NativeTableViewCell.swift ├── Controllers │ ├── InRead │ │ ├── Admob │ │ │ ├── ScrollView │ │ │ │ └── InReadAdmobScrollViewController.swift │ │ │ ├── TableView │ │ │ │ └── InReadAdmobTableViewController.swift │ │ │ └── WebView │ │ │ │ └── InReadAdmobWebViewController.swift │ │ ├── AppLovin │ │ │ ├── AppLovinViewController.swift │ │ │ └── ScrollView │ │ │ │ └── InReadAppLovinScrollViewController.swift │ │ ├── Direct │ │ │ ├── CollectionView │ │ │ │ ├── AdOpportunityTrackerCollectionViewCell.swift │ │ │ │ └── InReadDirectCollectionViewController.swift │ │ │ ├── PageView │ │ │ │ ├── InReadDirectPageViewController.swift │ │ │ │ └── InReadPageViewController.swift │ │ │ ├── ScrollView │ │ │ │ └── InReadDirectScrollViewController.swift │ │ │ ├── TableView │ │ │ │ ├── AdOpportunityTrackerTableViewCell.swift │ │ │ │ └── InReadDirectTableViewController.swift │ │ │ └── WebView │ │ │ │ └── InReadDirectWebViewController.swift │ │ └── SAS │ │ │ ├── ScrollView │ │ │ └── InReadSASScrollViewController.swift │ │ │ └── TableView │ │ │ └── InReadSASTableViewController.swift │ ├── Native │ │ ├── Admob │ │ │ └── TableView │ │ │ │ └── NativeAdmobTableViewController.swift │ │ ├── AppLovin │ │ │ └── TableView │ │ │ │ ├── AppLovinNativeAdView.swift │ │ │ │ ├── AppLovinNativeAdView.xib │ │ │ │ └── NativeAppLovinTableViewController.swift │ │ ├── Direct │ │ │ ├── CollectionView │ │ │ │ └── NativeDirectCollectionViewController.swift │ │ │ └── TableView │ │ │ │ ├── NativeDirectTableViewController.swift │ │ │ │ └── NativeTagDirectTableViewController.swift │ │ └── SAS │ │ │ └── TableView │ │ │ ├── NativeSASTableViewController.swift │ │ │ └── SmartNativeAdTableViewCell.swift │ ├── RootController │ │ ├── RootControllerCells │ │ │ ├── RootButtonCollectionViewCell.swift │ │ │ ├── RootHeaderCollectionReusableView.swift │ │ │ └── RootImageViewLabelCollectionViewCell.swift │ │ └── RootViewController.swift │ └── TeadsViewController.swift ├── Extensions │ ├── ColorExtension.swift │ ├── String.swift │ └── UIView-extension.swift ├── Info.plist ├── Models │ └── Format.swift ├── Ressources │ └── SampleWebsite │ │ ├── coffeeDesk2.png │ │ └── sample.html ├── Views │ ├── FakeArticleView.swift │ └── TeadsGradientImageView.swift └── WebViewHelper │ ├── README.md │ ├── README_WebView_configuration.png │ ├── README_WebView_hierarchy.png │ ├── Resources │ └── bootstrap.js │ └── TeadsWebViewHelper.swift ├── TeadsSampleAppTests └── TeadsSampleAppTests.swift └── TeadsSampleAppUITests └── TeadsSampleAppUITests.swift /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | package.xcworkspace 14 | *.xccheckout 15 | *.moved-aside 16 | DerivedData 17 | *.hmap 18 | *.ipa 19 | *.xcuserstate 20 | .DS_Store 21 | 22 | # CocoaPods 23 | # 24 | # We recommend against adding the Pods directory to your .gitignore. However 25 | # you should judge for yourself, the pros and cons are mentioned at: 26 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 27 | # 28 | Pods/ 29 | .build/ -------------------------------------------------------------------------------- /.swiftformat: -------------------------------------------------------------------------------- 1 | # rules 2 | --disable wrapMultilineStatementBraces 3 | 4 | # format options 5 | --elseposition same-line 6 | --guardelse same-line 7 | --redundanttype inferred 8 | --indentcase true 9 | --ifdef no-indent 10 | --operatorfunc no-space 11 | --wraparguments before-first 12 | --wrapparameters before-first 13 | --wrapcollections before-first -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AvailableLibraries 6 | 7 | 8 | LibraryIdentifier 9 | tvos-arm64 10 | LibraryPath 11 | OMSDK_Teadstv.framework 12 | SupportedArchitectures 13 | 14 | arm64 15 | 16 | SupportedPlatform 17 | tvos 18 | 19 | 20 | LibraryIdentifier 21 | ios-arm64 22 | LibraryPath 23 | OMSDK_Teadstv.framework 24 | SupportedArchitectures 25 | 26 | arm64 27 | 28 | SupportedPlatform 29 | ios 30 | 31 | 32 | LibraryIdentifier 33 | ios-arm64_x86_64-simulator 34 | LibraryPath 35 | OMSDK_Teadstv.framework 36 | SupportedArchitectures 37 | 38 | arm64 39 | x86_64 40 | 41 | SupportedPlatform 42 | ios 43 | SupportedPlatformVariant 44 | simulator 45 | 46 | 47 | LibraryIdentifier 48 | tvos-arm64_x86_64-simulator 49 | LibraryPath 50 | OMSDK_Teadstv.framework 51 | SupportedArchitectures 52 | 53 | arm64 54 | x86_64 55 | 56 | SupportedPlatform 57 | tvos 58 | SupportedPlatformVariant 59 | simulator 60 | 61 | 62 | CFBundlePackageType 63 | XFWK 64 | XCFrameworkFormatVersion 65 | 1.0 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDAdEvents.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDAdEvents.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 22/06/2017. 6 | // 7 | 8 | #import 9 | #import "OMIDAdSession.h" 10 | #import "OMIDVASTProperties.h" 11 | 12 | /** 13 | * Ad event API enabling the integration partner to signal to all verification providers when key events have occurred. 14 | * Only one ad events implementation can be associated with the ad session and any attempt to create multiple instances will result in an error. 15 | */ 16 | @interface OMIDTeadstvAdEvents : NSObject 17 | 18 | /** 19 | * Initializes ad events instance associated with the supplied ad session. 20 | * 21 | * @param session The ad session associated with the ad events. 22 | * @return A new ad events instance associated with the supplied ad session. Returns nil if the supplied ad session is nil or if an ad events instance has already been registered with the ad session. 23 | */ 24 | - (nullable instancetype)initWithAdSession:(nonnull OMIDTeadstvAdSession *)session error:(NSError * _Nullable * _Nullable)error; 25 | 26 | /** 27 | * Notifies the ad session that an impression event has occurred. 28 | * 29 | * When triggered all registered verification providers will be notified of this event. 30 | * 31 | * NOTE: the ad session will be automatically started if this method has been called first. 32 | */ 33 | - (BOOL)impressionOccurredWithError:(NSError *_Nullable *_Nullable)error; 34 | 35 | /** 36 | * Notifies the ad session that display loaded event has occurred. 37 | * 38 | * When triggered all registered verification providers will be notified of this event. 39 | */ 40 | - (BOOL)loadedWithError:(NSError *_Nullable *_Nullable)error; 41 | 42 | /** 43 | * Notifies the ad session that video/audio loaded event has occurred. 44 | * 45 | * When triggered all registered verification providers will be notified of this event. 46 | * @param vastProperties contains static information about the video/audio placement. 47 | */ 48 | - (BOOL)loadedWithVastProperties:(OMIDTeadstvVASTProperties *_Nonnull)vastProperties 49 | error:(NSError *_Nullable *_Nullable)error; 50 | @end 51 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDFriendlyObstructionType.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDFriendlyObstructionType.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Andrew Whitcomb on 4/3/19. 6 | // Copyright © 2019 Integral Ad Science, Inc. All rights reserved. 7 | // 8 | 9 | /** 10 | * List of allowed friendly obstruction purposes. 11 | */ 12 | typedef NS_ENUM(NSUInteger, OMIDFriendlyObstructionType) { 13 | /** 14 | * The friendly obstruction relates to interacting with a video (such as play/pause buttons). 15 | */ 16 | OMIDFriendlyObstructionMediaControls, 17 | /** 18 | * The friendly obstruction relates to closing an ad (such as a close button). 19 | */ 20 | OMIDFriendlyObstructionCloseAd, 21 | /** 22 | * The friendly obstruction is not visibly obstructing the ad but may seem so due to technical 23 | * limitations. 24 | */ 25 | OMIDFriendlyObstructionNotVisible, 26 | /** 27 | * The friendly obstruction is obstructing for any purpose not already described. 28 | */ 29 | OMIDFriendlyObstructionOther 30 | }; 31 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDImports.h: -------------------------------------------------------------------------------- 1 | #import "OMIDSDK.h" 2 | #import "OMIDScriptInjector.h" 3 | #import "OMIDPartner.h" 4 | #import "OMIDVerificationScriptResource.h" 5 | #import "OMIDAdSessionContext.h" 6 | #import "OMIDAdSession.h" 7 | #import "OMIDAdEvents.h" 8 | #import "OMIDVASTProperties.h" 9 | #import "OMIDMediaEvents.h" 10 | #import "OMIDJavaScriptSessionService.h" 11 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDPartner.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDPartner.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the integration partner which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvPartner : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSString *name; 16 | @property(nonatomic, readonly, nonnull) NSString *versionString; 17 | 18 | /** 19 | * Initializes new partner instance providing both name and versionString. 20 | * 21 | * Both name and version are mandatory. 22 | * 23 | * @param name It is used to uniquely identify the integration partner. 24 | * @param versionString It is used to uniquely identify the integration partner. 25 | * @return A new partner instance, or nil if any of the parameters are either null or blank 26 | */ 27 | - (nullable instancetype)initWithName:(nonnull NSString *)name 28 | versionString:(nonnull NSString *)versionString; 29 | 30 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDSDK.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 05/06/2017. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN; 11 | 12 | /** 13 | * This application level class will be called by all integration partners to ensure OM SDK has been activated before calling any other API methods. 14 | * Any attempt to use other API methods prior to activation will result in an error. 15 | * 16 | * Note that OM SDK may only be used on the main UI thread. 17 | * Make sure you are on the main thread when you initialize the SDK, create its 18 | * objects, and invoke its methods. 19 | */ 20 | @interface OMIDTeadstvSDK : NSObject 21 | 22 | /** 23 | * The current semantic version of the integrated OMID library. 24 | */ 25 | + (NSString *)versionString; 26 | 27 | /** 28 | * Shared OMIDSDK instance. 29 | */ 30 | @property(class, readonly) OMIDTeadstvSDK *sharedInstance 31 | NS_SWIFT_NAME(shared); 32 | 33 | /** 34 | * A Boolean value indicating whether OM SDK has been activated. 35 | * 36 | * @discussion Check that OM SDK is active prior to creating any ad sessions. 37 | */ 38 | @property(atomic, readonly, getter=isActive) BOOL active; 39 | 40 | /** 41 | * Activate OM SDK before calling other API methods. 42 | * 43 | * @discussion Activation sets up the OM SDK environment. In CTV apps (running tvOS), `activate` should be called on launch in 44 | * order to capture a "last activity" timestamp on launch and each time the user foregrounds the app). 45 | * 46 | * @return Boolean indicating success. 47 | */ 48 | - (BOOL)activate; 49 | 50 | /** 51 | * Update the last activity time 52 | * After activating OM SDK in CTV apps, refresh the "last activity" timestamp in response to user input prior to starting an ad session. 53 | */ 54 | - (void)updateLastActivity; 55 | 56 | @end 57 | 58 | NS_ASSUME_NONNULL_END; 59 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDScriptInjector.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDScriptInjector.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 21/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Utility class which enables integration partners to use a standard approach for injecting OM SDK JS into the served tag HTML content. 12 | */ 13 | @interface OMIDTeadstvScriptInjector : NSObject 14 | 15 | /* 16 | Injects the downloaded OMID JS content into the served HTML. 17 | @param scriptContent containing the OMID JS service content to be injected into the hidden tracking web view. 18 | @param html of the tag content which should be modified to include the downloaded OMID JS content. 19 | @param error If an error occurs, contains an NSError object. 20 | @return modified HTML including OMID JS or nil if an error occurs. 21 | */ 22 | + (nullable NSString *)injectScriptContent:(nonnull NSString *)scriptContent 23 | intoHTML:(nonnull NSString *)html 24 | error:(NSError *_Nullable *_Nullable)error; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDVASTProperties.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVASTProperties.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 30/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * List of supported media player positions. 12 | */ 13 | typedef NS_ENUM(NSUInteger, OMIDPosition) { 14 | /** 15 | * The ad plays preceding video content. 16 | */ 17 | OMIDPositionPreroll, 18 | /** 19 | * The ad plays in the middle of video content, or between two separate content videos. 20 | */ 21 | OMIDPositionMidroll, 22 | /** 23 | * The ad plays following video content. 24 | */ 25 | OMIDPositionPostroll, 26 | /** 27 | * The ad plays independently of any video content. 28 | */ 29 | OMIDPositionStandalone 30 | }; 31 | 32 | /** 33 | * This object is used to capture key VAST properties so this can be shared with all registered verification providers. 34 | */ 35 | @interface OMIDTeadstvVASTProperties : NSObject 36 | 37 | @property(nonatomic, readonly, getter = isSkippable) BOOL skippable; 38 | @property(nonatomic, readonly) CGFloat skipOffset; 39 | @property(nonatomic, readonly, getter = isAutoPlay) BOOL autoPlay; 40 | @property(nonatomic, readonly) OMIDPosition position; 41 | 42 | /** 43 | * This method enables the media player to create a new VAST properties instance for skippable media ad placement. 44 | * 45 | * @param skipOffset The number of seconds before the skip button is presented. 46 | * @param autoPlay Determines whether the media will auto-play content. 47 | * @param position The position of the media in relation to other content. 48 | * @return A new instance of VAST properties. 49 | */ 50 | - (nonnull instancetype)initWithSkipOffset:(CGFloat)skipOffset 51 | autoPlay:(BOOL)autoPlay 52 | position:(OMIDPosition)position; 53 | 54 | /** 55 | * This method enables the media player to create a new VAST properties instance for non-skippable media ad placement. 56 | * 57 | * @param autoPlay Determines whether the media will auto-play content. 58 | * @param position The position of the media in relation to other content. 59 | * @return A new instance of VAST properties. 60 | */ 61 | - (nonnull instancetype)initWithAutoPlay:(BOOL)autoPlay 62 | position:(OMIDPosition)position; 63 | 64 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 65 | 66 | /** 67 | * For OM SDK internal use only. 68 | */ 69 | - (NSDictionary *_Nonnull)toJSON; 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMIDVerificationScriptResource.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVerificationScriptResource.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the verification provider which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvVerificationScriptResource : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSURL *URL; 16 | @property(nonatomic, readonly, nullable) NSString *vendorKey; 17 | @property(nonatomic, readonly, nullable) NSString *parameters; 18 | 19 | /** 20 | * Initializes new verification script resource instance which requires vendor specific verification parameters. 21 | * 22 | * When calling this method all arguments are mandatory. 23 | * 24 | * @param vendorKey It is used to uniquely identify the verification provider. 25 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 26 | * @param parameters The parameters which the verification provider script is expecting for the ad session. 27 | * @return A new verification script resource instance, or nil if any of the parameters are either null or blank. 28 | */ 29 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL 30 | vendorKey:(nonnull NSString *)vendorKey 31 | parameters:(nonnull NSString *)parameters; 32 | 33 | /** 34 | * Initializes new verification script resource instance which does not require any vendor specific verification parameters. 35 | * 36 | * When calling this method all arguments are mandatory. 37 | * 38 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 39 | * @return A new verification script resource instance, or nil if URL is nil or blank. 40 | */ 41 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL; 42 | 43 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Headers/OMSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMSDK.h 3 | // OMSDK 4 | // 5 | // Created by Nathanael Hardy on 10/16/20. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for OMSDK. 11 | FOUNDATION_EXPORT double OMSDKVersionNumber; 12 | 13 | //! Project version string for OMSDK. 14 | FOUNDATION_EXPORT const unsigned char OMSDKVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | #import 19 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Info.plist -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | module OMSDK_Teadstv { 2 | header "Headers/OMIDImports.h" 3 | export * 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/OMSDK_Teadstv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/OMSDK_Teadstv -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64/OMSDK_Teadstv.framework/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | NSPrivacyCollectedDataTypes 13 | 14 | 15 | NSPrivacyCollectedDataType 16 | NSPrivacyCollectedDataTypeProductInteraction 17 | NSPrivacyCollectedDataTypeLinked 18 | 19 | NSPrivacyCollectedDataTypeTracking 20 | 21 | NSPrivacyCollectedDataTypePurposes 22 | 23 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 24 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 25 | 26 | 27 | 28 | NSPrivacyCollectedDataType 29 | NSPrivacyCollectedDataTypeAdvertisingData 30 | NSPrivacyCollectedDataTypeLinked 31 | 32 | NSPrivacyCollectedDataTypeTracking 33 | 34 | NSPrivacyCollectedDataTypePurposes 35 | 36 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 37 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDAdEvents.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDAdEvents.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 22/06/2017. 6 | // 7 | 8 | #import 9 | #import "OMIDAdSession.h" 10 | #import "OMIDVASTProperties.h" 11 | 12 | /** 13 | * Ad event API enabling the integration partner to signal to all verification providers when key events have occurred. 14 | * Only one ad events implementation can be associated with the ad session and any attempt to create multiple instances will result in an error. 15 | */ 16 | @interface OMIDTeadstvAdEvents : NSObject 17 | 18 | /** 19 | * Initializes ad events instance associated with the supplied ad session. 20 | * 21 | * @param session The ad session associated with the ad events. 22 | * @return A new ad events instance associated with the supplied ad session. Returns nil if the supplied ad session is nil or if an ad events instance has already been registered with the ad session. 23 | */ 24 | - (nullable instancetype)initWithAdSession:(nonnull OMIDTeadstvAdSession *)session error:(NSError * _Nullable * _Nullable)error; 25 | 26 | /** 27 | * Notifies the ad session that an impression event has occurred. 28 | * 29 | * When triggered all registered verification providers will be notified of this event. 30 | * 31 | * NOTE: the ad session will be automatically started if this method has been called first. 32 | */ 33 | - (BOOL)impressionOccurredWithError:(NSError *_Nullable *_Nullable)error; 34 | 35 | /** 36 | * Notifies the ad session that display loaded event has occurred. 37 | * 38 | * When triggered all registered verification providers will be notified of this event. 39 | */ 40 | - (BOOL)loadedWithError:(NSError *_Nullable *_Nullable)error; 41 | 42 | /** 43 | * Notifies the ad session that video/audio loaded event has occurred. 44 | * 45 | * When triggered all registered verification providers will be notified of this event. 46 | * @param vastProperties contains static information about the video/audio placement. 47 | */ 48 | - (BOOL)loadedWithVastProperties:(OMIDTeadstvVASTProperties *_Nonnull)vastProperties 49 | error:(NSError *_Nullable *_Nullable)error; 50 | @end 51 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDFriendlyObstructionType.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDFriendlyObstructionType.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Andrew Whitcomb on 4/3/19. 6 | // Copyright © 2019 Integral Ad Science, Inc. All rights reserved. 7 | // 8 | 9 | /** 10 | * List of allowed friendly obstruction purposes. 11 | */ 12 | typedef NS_ENUM(NSUInteger, OMIDFriendlyObstructionType) { 13 | /** 14 | * The friendly obstruction relates to interacting with a video (such as play/pause buttons). 15 | */ 16 | OMIDFriendlyObstructionMediaControls, 17 | /** 18 | * The friendly obstruction relates to closing an ad (such as a close button). 19 | */ 20 | OMIDFriendlyObstructionCloseAd, 21 | /** 22 | * The friendly obstruction is not visibly obstructing the ad but may seem so due to technical 23 | * limitations. 24 | */ 25 | OMIDFriendlyObstructionNotVisible, 26 | /** 27 | * The friendly obstruction is obstructing for any purpose not already described. 28 | */ 29 | OMIDFriendlyObstructionOther 30 | }; 31 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDImports.h: -------------------------------------------------------------------------------- 1 | #import "OMIDSDK.h" 2 | #import "OMIDScriptInjector.h" 3 | #import "OMIDPartner.h" 4 | #import "OMIDVerificationScriptResource.h" 5 | #import "OMIDAdSessionContext.h" 6 | #import "OMIDAdSession.h" 7 | #import "OMIDAdEvents.h" 8 | #import "OMIDVASTProperties.h" 9 | #import "OMIDMediaEvents.h" 10 | #import "OMIDJavaScriptSessionService.h" 11 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDPartner.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDPartner.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the integration partner which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvPartner : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSString *name; 16 | @property(nonatomic, readonly, nonnull) NSString *versionString; 17 | 18 | /** 19 | * Initializes new partner instance providing both name and versionString. 20 | * 21 | * Both name and version are mandatory. 22 | * 23 | * @param name It is used to uniquely identify the integration partner. 24 | * @param versionString It is used to uniquely identify the integration partner. 25 | * @return A new partner instance, or nil if any of the parameters are either null or blank 26 | */ 27 | - (nullable instancetype)initWithName:(nonnull NSString *)name 28 | versionString:(nonnull NSString *)versionString; 29 | 30 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDSDK.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 05/06/2017. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN; 11 | 12 | /** 13 | * This application level class will be called by all integration partners to ensure OM SDK has been activated before calling any other API methods. 14 | * Any attempt to use other API methods prior to activation will result in an error. 15 | * 16 | * Note that OM SDK may only be used on the main UI thread. 17 | * Make sure you are on the main thread when you initialize the SDK, create its 18 | * objects, and invoke its methods. 19 | */ 20 | @interface OMIDTeadstvSDK : NSObject 21 | 22 | /** 23 | * The current semantic version of the integrated OMID library. 24 | */ 25 | + (NSString *)versionString; 26 | 27 | /** 28 | * Shared OMIDSDK instance. 29 | */ 30 | @property(class, readonly) OMIDTeadstvSDK *sharedInstance 31 | NS_SWIFT_NAME(shared); 32 | 33 | /** 34 | * A Boolean value indicating whether OM SDK has been activated. 35 | * 36 | * @discussion Check that OM SDK is active prior to creating any ad sessions. 37 | */ 38 | @property(atomic, readonly, getter=isActive) BOOL active; 39 | 40 | /** 41 | * Activate OM SDK before calling other API methods. 42 | * 43 | * @discussion Activation sets up the OM SDK environment. In CTV apps (running tvOS), `activate` should be called on launch in 44 | * order to capture a "last activity" timestamp on launch and each time the user foregrounds the app). 45 | * 46 | * @return Boolean indicating success. 47 | */ 48 | - (BOOL)activate; 49 | 50 | /** 51 | * Update the last activity time 52 | * After activating OM SDK in CTV apps, refresh the "last activity" timestamp in response to user input prior to starting an ad session. 53 | */ 54 | - (void)updateLastActivity; 55 | 56 | @end 57 | 58 | NS_ASSUME_NONNULL_END; 59 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDScriptInjector.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDScriptInjector.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 21/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Utility class which enables integration partners to use a standard approach for injecting OM SDK JS into the served tag HTML content. 12 | */ 13 | @interface OMIDTeadstvScriptInjector : NSObject 14 | 15 | /* 16 | Injects the downloaded OMID JS content into the served HTML. 17 | @param scriptContent containing the OMID JS service content to be injected into the hidden tracking web view. 18 | @param html of the tag content which should be modified to include the downloaded OMID JS content. 19 | @param error If an error occurs, contains an NSError object. 20 | @return modified HTML including OMID JS or nil if an error occurs. 21 | */ 22 | + (nullable NSString *)injectScriptContent:(nonnull NSString *)scriptContent 23 | intoHTML:(nonnull NSString *)html 24 | error:(NSError *_Nullable *_Nullable)error; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDVASTProperties.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVASTProperties.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 30/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * List of supported media player positions. 12 | */ 13 | typedef NS_ENUM(NSUInteger, OMIDPosition) { 14 | /** 15 | * The ad plays preceding video content. 16 | */ 17 | OMIDPositionPreroll, 18 | /** 19 | * The ad plays in the middle of video content, or between two separate content videos. 20 | */ 21 | OMIDPositionMidroll, 22 | /** 23 | * The ad plays following video content. 24 | */ 25 | OMIDPositionPostroll, 26 | /** 27 | * The ad plays independently of any video content. 28 | */ 29 | OMIDPositionStandalone 30 | }; 31 | 32 | /** 33 | * This object is used to capture key VAST properties so this can be shared with all registered verification providers. 34 | */ 35 | @interface OMIDTeadstvVASTProperties : NSObject 36 | 37 | @property(nonatomic, readonly, getter = isSkippable) BOOL skippable; 38 | @property(nonatomic, readonly) CGFloat skipOffset; 39 | @property(nonatomic, readonly, getter = isAutoPlay) BOOL autoPlay; 40 | @property(nonatomic, readonly) OMIDPosition position; 41 | 42 | /** 43 | * This method enables the media player to create a new VAST properties instance for skippable media ad placement. 44 | * 45 | * @param skipOffset The number of seconds before the skip button is presented. 46 | * @param autoPlay Determines whether the media will auto-play content. 47 | * @param position The position of the media in relation to other content. 48 | * @return A new instance of VAST properties. 49 | */ 50 | - (nonnull instancetype)initWithSkipOffset:(CGFloat)skipOffset 51 | autoPlay:(BOOL)autoPlay 52 | position:(OMIDPosition)position; 53 | 54 | /** 55 | * This method enables the media player to create a new VAST properties instance for non-skippable media ad placement. 56 | * 57 | * @param autoPlay Determines whether the media will auto-play content. 58 | * @param position The position of the media in relation to other content. 59 | * @return A new instance of VAST properties. 60 | */ 61 | - (nonnull instancetype)initWithAutoPlay:(BOOL)autoPlay 62 | position:(OMIDPosition)position; 63 | 64 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 65 | 66 | /** 67 | * For OM SDK internal use only. 68 | */ 69 | - (NSDictionary *_Nonnull)toJSON; 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDVerificationScriptResource.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVerificationScriptResource.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the verification provider which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvVerificationScriptResource : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSURL *URL; 16 | @property(nonatomic, readonly, nullable) NSString *vendorKey; 17 | @property(nonatomic, readonly, nullable) NSString *parameters; 18 | 19 | /** 20 | * Initializes new verification script resource instance which requires vendor specific verification parameters. 21 | * 22 | * When calling this method all arguments are mandatory. 23 | * 24 | * @param vendorKey It is used to uniquely identify the verification provider. 25 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 26 | * @param parameters The parameters which the verification provider script is expecting for the ad session. 27 | * @return A new verification script resource instance, or nil if any of the parameters are either null or blank. 28 | */ 29 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL 30 | vendorKey:(nonnull NSString *)vendorKey 31 | parameters:(nonnull NSString *)parameters; 32 | 33 | /** 34 | * Initializes new verification script resource instance which does not require any vendor specific verification parameters. 35 | * 36 | * When calling this method all arguments are mandatory. 37 | * 38 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 39 | * @return A new verification script resource instance, or nil if URL is nil or blank. 40 | */ 41 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL; 42 | 43 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMSDK.h 3 | // OMSDK 4 | // 5 | // Created by Nathanael Hardy on 10/16/20. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for OMSDK. 11 | FOUNDATION_EXPORT double OMSDKVersionNumber; 12 | 13 | //! Project version string for OMSDK. 14 | FOUNDATION_EXPORT const unsigned char OMSDKVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | #import 19 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Info.plist -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | module OMSDK_Teadstv { 2 | header "Headers/OMIDImports.h" 3 | export * 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/OMSDK_Teadstv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/OMSDK_Teadstv -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/ios-arm64_x86_64-simulator/OMSDK_Teadstv.framework/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | NSPrivacyCollectedDataTypes 13 | 14 | 15 | NSPrivacyCollectedDataType 16 | NSPrivacyCollectedDataTypeProductInteraction 17 | NSPrivacyCollectedDataTypeLinked 18 | 19 | NSPrivacyCollectedDataTypeTracking 20 | 21 | NSPrivacyCollectedDataTypePurposes 22 | 23 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 24 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 25 | 26 | 27 | 28 | NSPrivacyCollectedDataType 29 | NSPrivacyCollectedDataTypeAdvertisingData 30 | NSPrivacyCollectedDataTypeLinked 31 | 32 | NSPrivacyCollectedDataTypeTracking 33 | 34 | NSPrivacyCollectedDataTypePurposes 35 | 36 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 37 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDAdEvents.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDAdEvents.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 22/06/2017. 6 | // 7 | 8 | #import 9 | #import "OMIDAdSession.h" 10 | #import "OMIDVASTProperties.h" 11 | 12 | /** 13 | * Ad event API enabling the integration partner to signal to all verification providers when key events have occurred. 14 | * Only one ad events implementation can be associated with the ad session and any attempt to create multiple instances will result in an error. 15 | */ 16 | @interface OMIDTeadstvAdEvents : NSObject 17 | 18 | /** 19 | * Initializes ad events instance associated with the supplied ad session. 20 | * 21 | * @param session The ad session associated with the ad events. 22 | * @return A new ad events instance associated with the supplied ad session. Returns nil if the supplied ad session is nil or if an ad events instance has already been registered with the ad session. 23 | */ 24 | - (nullable instancetype)initWithAdSession:(nonnull OMIDTeadstvAdSession *)session error:(NSError * _Nullable * _Nullable)error; 25 | 26 | /** 27 | * Notifies the ad session that an impression event has occurred. 28 | * 29 | * When triggered all registered verification providers will be notified of this event. 30 | * 31 | * NOTE: the ad session will be automatically started if this method has been called first. 32 | */ 33 | - (BOOL)impressionOccurredWithError:(NSError *_Nullable *_Nullable)error; 34 | 35 | /** 36 | * Notifies the ad session that display loaded event has occurred. 37 | * 38 | * When triggered all registered verification providers will be notified of this event. 39 | */ 40 | - (BOOL)loadedWithError:(NSError *_Nullable *_Nullable)error; 41 | 42 | /** 43 | * Notifies the ad session that video/audio loaded event has occurred. 44 | * 45 | * When triggered all registered verification providers will be notified of this event. 46 | * @param vastProperties contains static information about the video/audio placement. 47 | */ 48 | - (BOOL)loadedWithVastProperties:(OMIDTeadstvVASTProperties *_Nonnull)vastProperties 49 | error:(NSError *_Nullable *_Nullable)error; 50 | @end 51 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDFriendlyObstructionType.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDFriendlyObstructionType.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Andrew Whitcomb on 4/3/19. 6 | // Copyright © 2019 Integral Ad Science, Inc. All rights reserved. 7 | // 8 | 9 | /** 10 | * List of allowed friendly obstruction purposes. 11 | */ 12 | typedef NS_ENUM(NSUInteger, OMIDFriendlyObstructionType) { 13 | /** 14 | * The friendly obstruction relates to interacting with a video (such as play/pause buttons). 15 | */ 16 | OMIDFriendlyObstructionMediaControls, 17 | /** 18 | * The friendly obstruction relates to closing an ad (such as a close button). 19 | */ 20 | OMIDFriendlyObstructionCloseAd, 21 | /** 22 | * The friendly obstruction is not visibly obstructing the ad but may seem so due to technical 23 | * limitations. 24 | */ 25 | OMIDFriendlyObstructionNotVisible, 26 | /** 27 | * The friendly obstruction is obstructing for any purpose not already described. 28 | */ 29 | OMIDFriendlyObstructionOther 30 | }; 31 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDImports.h: -------------------------------------------------------------------------------- 1 | #import "OMIDSDK.h" 2 | #import "OMIDScriptInjector.h" 3 | #import "OMIDPartner.h" 4 | #import "OMIDVerificationScriptResource.h" 5 | #import "OMIDAdSessionContext.h" 6 | #import "OMIDAdSession.h" 7 | #import "OMIDAdEvents.h" 8 | #import "OMIDVASTProperties.h" 9 | #import "OMIDMediaEvents.h" 10 | #import "OMIDJavaScriptSessionService.h" 11 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDPartner.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDPartner.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the integration partner which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvPartner : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSString *name; 16 | @property(nonatomic, readonly, nonnull) NSString *versionString; 17 | 18 | /** 19 | * Initializes new partner instance providing both name and versionString. 20 | * 21 | * Both name and version are mandatory. 22 | * 23 | * @param name It is used to uniquely identify the integration partner. 24 | * @param versionString It is used to uniquely identify the integration partner. 25 | * @return A new partner instance, or nil if any of the parameters are either null or blank 26 | */ 27 | - (nullable instancetype)initWithName:(nonnull NSString *)name 28 | versionString:(nonnull NSString *)versionString; 29 | 30 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDSDK.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 05/06/2017. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN; 11 | 12 | /** 13 | * This application level class will be called by all integration partners to ensure OM SDK has been activated before calling any other API methods. 14 | * Any attempt to use other API methods prior to activation will result in an error. 15 | * 16 | * Note that OM SDK may only be used on the main UI thread. 17 | * Make sure you are on the main thread when you initialize the SDK, create its 18 | * objects, and invoke its methods. 19 | */ 20 | @interface OMIDTeadstvSDK : NSObject 21 | 22 | /** 23 | * The current semantic version of the integrated OMID library. 24 | */ 25 | + (NSString *)versionString; 26 | 27 | /** 28 | * Shared OMIDSDK instance. 29 | */ 30 | @property(class, readonly) OMIDTeadstvSDK *sharedInstance 31 | NS_SWIFT_NAME(shared); 32 | 33 | /** 34 | * A Boolean value indicating whether OM SDK has been activated. 35 | * 36 | * @discussion Check that OM SDK is active prior to creating any ad sessions. 37 | */ 38 | @property(atomic, readonly, getter=isActive) BOOL active; 39 | 40 | /** 41 | * Activate OM SDK before calling other API methods. 42 | * 43 | * @discussion Activation sets up the OM SDK environment. In CTV apps (running tvOS), `activate` should be called on launch in 44 | * order to capture a "last activity" timestamp on launch and each time the user foregrounds the app). 45 | * 46 | * @return Boolean indicating success. 47 | */ 48 | - (BOOL)activate; 49 | 50 | /** 51 | * Update the last activity time 52 | * After activating OM SDK in CTV apps, refresh the "last activity" timestamp in response to user input prior to starting an ad session. 53 | */ 54 | - (void)updateLastActivity; 55 | 56 | @end 57 | 58 | NS_ASSUME_NONNULL_END; 59 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDScriptInjector.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDScriptInjector.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 21/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Utility class which enables integration partners to use a standard approach for injecting OM SDK JS into the served tag HTML content. 12 | */ 13 | @interface OMIDTeadstvScriptInjector : NSObject 14 | 15 | /* 16 | Injects the downloaded OMID JS content into the served HTML. 17 | @param scriptContent containing the OMID JS service content to be injected into the hidden tracking web view. 18 | @param html of the tag content which should be modified to include the downloaded OMID JS content. 19 | @param error If an error occurs, contains an NSError object. 20 | @return modified HTML including OMID JS or nil if an error occurs. 21 | */ 22 | + (nullable NSString *)injectScriptContent:(nonnull NSString *)scriptContent 23 | intoHTML:(nonnull NSString *)html 24 | error:(NSError *_Nullable *_Nullable)error; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDVASTProperties.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVASTProperties.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 30/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * List of supported media player positions. 12 | */ 13 | typedef NS_ENUM(NSUInteger, OMIDPosition) { 14 | /** 15 | * The ad plays preceding video content. 16 | */ 17 | OMIDPositionPreroll, 18 | /** 19 | * The ad plays in the middle of video content, or between two separate content videos. 20 | */ 21 | OMIDPositionMidroll, 22 | /** 23 | * The ad plays following video content. 24 | */ 25 | OMIDPositionPostroll, 26 | /** 27 | * The ad plays independently of any video content. 28 | */ 29 | OMIDPositionStandalone 30 | }; 31 | 32 | /** 33 | * This object is used to capture key VAST properties so this can be shared with all registered verification providers. 34 | */ 35 | @interface OMIDTeadstvVASTProperties : NSObject 36 | 37 | @property(nonatomic, readonly, getter = isSkippable) BOOL skippable; 38 | @property(nonatomic, readonly) CGFloat skipOffset; 39 | @property(nonatomic, readonly, getter = isAutoPlay) BOOL autoPlay; 40 | @property(nonatomic, readonly) OMIDPosition position; 41 | 42 | /** 43 | * This method enables the media player to create a new VAST properties instance for skippable media ad placement. 44 | * 45 | * @param skipOffset The number of seconds before the skip button is presented. 46 | * @param autoPlay Determines whether the media will auto-play content. 47 | * @param position The position of the media in relation to other content. 48 | * @return A new instance of VAST properties. 49 | */ 50 | - (nonnull instancetype)initWithSkipOffset:(CGFloat)skipOffset 51 | autoPlay:(BOOL)autoPlay 52 | position:(OMIDPosition)position; 53 | 54 | /** 55 | * This method enables the media player to create a new VAST properties instance for non-skippable media ad placement. 56 | * 57 | * @param autoPlay Determines whether the media will auto-play content. 58 | * @param position The position of the media in relation to other content. 59 | * @return A new instance of VAST properties. 60 | */ 61 | - (nonnull instancetype)initWithAutoPlay:(BOOL)autoPlay 62 | position:(OMIDPosition)position; 63 | 64 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 65 | 66 | /** 67 | * For OM SDK internal use only. 68 | */ 69 | - (NSDictionary *_Nonnull)toJSON; 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMIDVerificationScriptResource.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVerificationScriptResource.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the verification provider which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvVerificationScriptResource : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSURL *URL; 16 | @property(nonatomic, readonly, nullable) NSString *vendorKey; 17 | @property(nonatomic, readonly, nullable) NSString *parameters; 18 | 19 | /** 20 | * Initializes new verification script resource instance which requires vendor specific verification parameters. 21 | * 22 | * When calling this method all arguments are mandatory. 23 | * 24 | * @param vendorKey It is used to uniquely identify the verification provider. 25 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 26 | * @param parameters The parameters which the verification provider script is expecting for the ad session. 27 | * @return A new verification script resource instance, or nil if any of the parameters are either null or blank. 28 | */ 29 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL 30 | vendorKey:(nonnull NSString *)vendorKey 31 | parameters:(nonnull NSString *)parameters; 32 | 33 | /** 34 | * Initializes new verification script resource instance which does not require any vendor specific verification parameters. 35 | * 36 | * When calling this method all arguments are mandatory. 37 | * 38 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 39 | * @return A new verification script resource instance, or nil if URL is nil or blank. 40 | */ 41 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL; 42 | 43 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Headers/OMSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMSDK.h 3 | // OMSDK 4 | // 5 | // Created by Nathanael Hardy on 10/16/20. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for OMSDK. 11 | FOUNDATION_EXPORT double OMSDKVersionNumber; 12 | 13 | //! Project version string for OMSDK. 14 | FOUNDATION_EXPORT const unsigned char OMSDKVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | #import 19 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Info.plist -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | module OMSDK_Teadstv { 2 | header "Headers/OMIDImports.h" 3 | export * 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/OMSDK_Teadstv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/OMSDK_Teadstv -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64/OMSDK_Teadstv.framework/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | NSPrivacyCollectedDataTypes 13 | 14 | 15 | NSPrivacyCollectedDataType 16 | NSPrivacyCollectedDataTypeProductInteraction 17 | NSPrivacyCollectedDataTypeLinked 18 | 19 | NSPrivacyCollectedDataTypeTracking 20 | 21 | NSPrivacyCollectedDataTypePurposes 22 | 23 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 24 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 25 | 26 | 27 | 28 | NSPrivacyCollectedDataType 29 | NSPrivacyCollectedDataTypeAdvertisingData 30 | NSPrivacyCollectedDataTypeLinked 31 | 32 | NSPrivacyCollectedDataTypeTracking 33 | 34 | NSPrivacyCollectedDataTypePurposes 35 | 36 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 37 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDAdEvents.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDAdEvents.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 22/06/2017. 6 | // 7 | 8 | #import 9 | #import "OMIDAdSession.h" 10 | #import "OMIDVASTProperties.h" 11 | 12 | /** 13 | * Ad event API enabling the integration partner to signal to all verification providers when key events have occurred. 14 | * Only one ad events implementation can be associated with the ad session and any attempt to create multiple instances will result in an error. 15 | */ 16 | @interface OMIDTeadstvAdEvents : NSObject 17 | 18 | /** 19 | * Initializes ad events instance associated with the supplied ad session. 20 | * 21 | * @param session The ad session associated with the ad events. 22 | * @return A new ad events instance associated with the supplied ad session. Returns nil if the supplied ad session is nil or if an ad events instance has already been registered with the ad session. 23 | */ 24 | - (nullable instancetype)initWithAdSession:(nonnull OMIDTeadstvAdSession *)session error:(NSError * _Nullable * _Nullable)error; 25 | 26 | /** 27 | * Notifies the ad session that an impression event has occurred. 28 | * 29 | * When triggered all registered verification providers will be notified of this event. 30 | * 31 | * NOTE: the ad session will be automatically started if this method has been called first. 32 | */ 33 | - (BOOL)impressionOccurredWithError:(NSError *_Nullable *_Nullable)error; 34 | 35 | /** 36 | * Notifies the ad session that display loaded event has occurred. 37 | * 38 | * When triggered all registered verification providers will be notified of this event. 39 | */ 40 | - (BOOL)loadedWithError:(NSError *_Nullable *_Nullable)error; 41 | 42 | /** 43 | * Notifies the ad session that video/audio loaded event has occurred. 44 | * 45 | * When triggered all registered verification providers will be notified of this event. 46 | * @param vastProperties contains static information about the video/audio placement. 47 | */ 48 | - (BOOL)loadedWithVastProperties:(OMIDTeadstvVASTProperties *_Nonnull)vastProperties 49 | error:(NSError *_Nullable *_Nullable)error; 50 | @end 51 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDFriendlyObstructionType.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDFriendlyObstructionType.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Andrew Whitcomb on 4/3/19. 6 | // Copyright © 2019 Integral Ad Science, Inc. All rights reserved. 7 | // 8 | 9 | /** 10 | * List of allowed friendly obstruction purposes. 11 | */ 12 | typedef NS_ENUM(NSUInteger, OMIDFriendlyObstructionType) { 13 | /** 14 | * The friendly obstruction relates to interacting with a video (such as play/pause buttons). 15 | */ 16 | OMIDFriendlyObstructionMediaControls, 17 | /** 18 | * The friendly obstruction relates to closing an ad (such as a close button). 19 | */ 20 | OMIDFriendlyObstructionCloseAd, 21 | /** 22 | * The friendly obstruction is not visibly obstructing the ad but may seem so due to technical 23 | * limitations. 24 | */ 25 | OMIDFriendlyObstructionNotVisible, 26 | /** 27 | * The friendly obstruction is obstructing for any purpose not already described. 28 | */ 29 | OMIDFriendlyObstructionOther 30 | }; 31 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDImports.h: -------------------------------------------------------------------------------- 1 | #import "OMIDSDK.h" 2 | #import "OMIDScriptInjector.h" 3 | #import "OMIDPartner.h" 4 | #import "OMIDVerificationScriptResource.h" 5 | #import "OMIDAdSessionContext.h" 6 | #import "OMIDAdSession.h" 7 | #import "OMIDAdEvents.h" 8 | #import "OMIDVASTProperties.h" 9 | #import "OMIDMediaEvents.h" 10 | #import "OMIDJavaScriptSessionService.h" 11 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDPartner.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDPartner.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the integration partner which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvPartner : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSString *name; 16 | @property(nonatomic, readonly, nonnull) NSString *versionString; 17 | 18 | /** 19 | * Initializes new partner instance providing both name and versionString. 20 | * 21 | * Both name and version are mandatory. 22 | * 23 | * @param name It is used to uniquely identify the integration partner. 24 | * @param versionString It is used to uniquely identify the integration partner. 25 | * @return A new partner instance, or nil if any of the parameters are either null or blank 26 | */ 27 | - (nullable instancetype)initWithName:(nonnull NSString *)name 28 | versionString:(nonnull NSString *)versionString; 29 | 30 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDSDK.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 05/06/2017. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN; 11 | 12 | /** 13 | * This application level class will be called by all integration partners to ensure OM SDK has been activated before calling any other API methods. 14 | * Any attempt to use other API methods prior to activation will result in an error. 15 | * 16 | * Note that OM SDK may only be used on the main UI thread. 17 | * Make sure you are on the main thread when you initialize the SDK, create its 18 | * objects, and invoke its methods. 19 | */ 20 | @interface OMIDTeadstvSDK : NSObject 21 | 22 | /** 23 | * The current semantic version of the integrated OMID library. 24 | */ 25 | + (NSString *)versionString; 26 | 27 | /** 28 | * Shared OMIDSDK instance. 29 | */ 30 | @property(class, readonly) OMIDTeadstvSDK *sharedInstance 31 | NS_SWIFT_NAME(shared); 32 | 33 | /** 34 | * A Boolean value indicating whether OM SDK has been activated. 35 | * 36 | * @discussion Check that OM SDK is active prior to creating any ad sessions. 37 | */ 38 | @property(atomic, readonly, getter=isActive) BOOL active; 39 | 40 | /** 41 | * Activate OM SDK before calling other API methods. 42 | * 43 | * @discussion Activation sets up the OM SDK environment. In CTV apps (running tvOS), `activate` should be called on launch in 44 | * order to capture a "last activity" timestamp on launch and each time the user foregrounds the app). 45 | * 46 | * @return Boolean indicating success. 47 | */ 48 | - (BOOL)activate; 49 | 50 | /** 51 | * Update the last activity time 52 | * After activating OM SDK in CTV apps, refresh the "last activity" timestamp in response to user input prior to starting an ad session. 53 | */ 54 | - (void)updateLastActivity; 55 | 56 | @end 57 | 58 | NS_ASSUME_NONNULL_END; 59 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDScriptInjector.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDScriptInjector.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 21/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Utility class which enables integration partners to use a standard approach for injecting OM SDK JS into the served tag HTML content. 12 | */ 13 | @interface OMIDTeadstvScriptInjector : NSObject 14 | 15 | /* 16 | Injects the downloaded OMID JS content into the served HTML. 17 | @param scriptContent containing the OMID JS service content to be injected into the hidden tracking web view. 18 | @param html of the tag content which should be modified to include the downloaded OMID JS content. 19 | @param error If an error occurs, contains an NSError object. 20 | @return modified HTML including OMID JS or nil if an error occurs. 21 | */ 22 | + (nullable NSString *)injectScriptContent:(nonnull NSString *)scriptContent 23 | intoHTML:(nonnull NSString *)html 24 | error:(NSError *_Nullable *_Nullable)error; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDVASTProperties.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVASTProperties.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria Sukhonosova on 30/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * List of supported media player positions. 12 | */ 13 | typedef NS_ENUM(NSUInteger, OMIDPosition) { 14 | /** 15 | * The ad plays preceding video content. 16 | */ 17 | OMIDPositionPreroll, 18 | /** 19 | * The ad plays in the middle of video content, or between two separate content videos. 20 | */ 21 | OMIDPositionMidroll, 22 | /** 23 | * The ad plays following video content. 24 | */ 25 | OMIDPositionPostroll, 26 | /** 27 | * The ad plays independently of any video content. 28 | */ 29 | OMIDPositionStandalone 30 | }; 31 | 32 | /** 33 | * This object is used to capture key VAST properties so this can be shared with all registered verification providers. 34 | */ 35 | @interface OMIDTeadstvVASTProperties : NSObject 36 | 37 | @property(nonatomic, readonly, getter = isSkippable) BOOL skippable; 38 | @property(nonatomic, readonly) CGFloat skipOffset; 39 | @property(nonatomic, readonly, getter = isAutoPlay) BOOL autoPlay; 40 | @property(nonatomic, readonly) OMIDPosition position; 41 | 42 | /** 43 | * This method enables the media player to create a new VAST properties instance for skippable media ad placement. 44 | * 45 | * @param skipOffset The number of seconds before the skip button is presented. 46 | * @param autoPlay Determines whether the media will auto-play content. 47 | * @param position The position of the media in relation to other content. 48 | * @return A new instance of VAST properties. 49 | */ 50 | - (nonnull instancetype)initWithSkipOffset:(CGFloat)skipOffset 51 | autoPlay:(BOOL)autoPlay 52 | position:(OMIDPosition)position; 53 | 54 | /** 55 | * This method enables the media player to create a new VAST properties instance for non-skippable media ad placement. 56 | * 57 | * @param autoPlay Determines whether the media will auto-play content. 58 | * @param position The position of the media in relation to other content. 59 | * @return A new instance of VAST properties. 60 | */ 61 | - (nonnull instancetype)initWithAutoPlay:(BOOL)autoPlay 62 | position:(OMIDPosition)position; 63 | 64 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 65 | 66 | /** 67 | * For OM SDK internal use only. 68 | */ 69 | - (NSDictionary *_Nonnull)toJSON; 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMIDVerificationScriptResource.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMIDVerificationScriptResource.h 3 | // AppVerificationLibrary 4 | // 5 | // Created by Daria on 06/06/2017. 6 | // 7 | 8 | #import 9 | 10 | /** 11 | * Details about the verification provider which will be supplied to the ad session. 12 | */ 13 | @interface OMIDTeadstvVerificationScriptResource : NSObject 14 | 15 | @property(nonatomic, readonly, nonnull) NSURL *URL; 16 | @property(nonatomic, readonly, nullable) NSString *vendorKey; 17 | @property(nonatomic, readonly, nullable) NSString *parameters; 18 | 19 | /** 20 | * Initializes new verification script resource instance which requires vendor specific verification parameters. 21 | * 22 | * When calling this method all arguments are mandatory. 23 | * 24 | * @param vendorKey It is used to uniquely identify the verification provider. 25 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 26 | * @param parameters The parameters which the verification provider script is expecting for the ad session. 27 | * @return A new verification script resource instance, or nil if any of the parameters are either null or blank. 28 | */ 29 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL 30 | vendorKey:(nonnull NSString *)vendorKey 31 | parameters:(nonnull NSString *)parameters; 32 | 33 | /** 34 | * Initializes new verification script resource instance which does not require any vendor specific verification parameters. 35 | * 36 | * When calling this method all arguments are mandatory. 37 | * 38 | * @param URL The URL to be injected into the OMID managed JavaScript execution environment. 39 | * @return A new verification script resource instance, or nil if URL is nil or blank. 40 | */ 41 | - (nullable instancetype)initWithURL:(nonnull NSURL *)URL; 42 | 43 | - (null_unspecified instancetype)init NS_UNAVAILABLE; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Headers/OMSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // OMSDK.h 3 | // OMSDK 4 | // 5 | // Created by Nathanael Hardy on 10/16/20. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for OMSDK. 11 | FOUNDATION_EXPORT double OMSDKVersionNumber; 12 | 13 | //! Project version string for OMSDK. 14 | FOUNDATION_EXPORT const unsigned char OMSDKVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | #import 19 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Info.plist -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | module OMSDK_Teadstv { 2 | header "Headers/OMIDImports.h" 3 | export * 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/OMSDK_Teadstv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/OMSDK_Teadstv -------------------------------------------------------------------------------- /Frameworks/OMSDK_Teadstv.xcframework/tvos-arm64_x86_64-simulator/OMSDK_Teadstv.framework/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | NSPrivacyCollectedDataTypes 13 | 14 | 15 | NSPrivacyCollectedDataType 16 | NSPrivacyCollectedDataTypeProductInteraction 17 | NSPrivacyCollectedDataTypeLinked 18 | 19 | NSPrivacyCollectedDataTypeTracking 20 | 21 | NSPrivacyCollectedDataTypePurposes 22 | 23 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 24 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 25 | 26 | 27 | 28 | NSPrivacyCollectedDataType 29 | NSPrivacyCollectedDataTypeAdvertisingData 30 | NSPrivacyCollectedDataTypeLinked 31 | 32 | NSPrivacyCollectedDataTypeTracking 33 | 34 | NSPrivacyCollectedDataTypePurposes 35 | 36 | NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising 37 | NSPrivacyCollectedDataTypePurposeDeveloperAdvertising 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AvailableLibraries 6 | 7 | 8 | BinaryPath 9 | TeadsSDK.framework/TeadsSDK 10 | LibraryIdentifier 11 | ios-arm64 12 | LibraryPath 13 | TeadsSDK.framework 14 | SupportedArchitectures 15 | 16 | arm64 17 | 18 | SupportedPlatform 19 | ios 20 | 21 | 22 | BinaryPath 23 | TeadsSDK.framework/TeadsSDK 24 | LibraryIdentifier 25 | ios-arm64_x86_64-simulator 26 | LibraryPath 27 | TeadsSDK.framework 28 | SupportedArchitectures 29 | 30 | arm64 31 | x86_64 32 | 33 | SupportedPlatform 34 | ios 35 | SupportedPlatformVariant 36 | simulator 37 | 38 | 39 | CFBundlePackageType 40 | XFWK 41 | XCFrameworkFormatVersion 42 | 1.0 43 | 44 | 45 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeDirectory: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeDirectory -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeRequirements: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeRequirements -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeRequirements-1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeRequirements-1 -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeSignature: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/_CodeSignature/CodeSignature -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Assets.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Assets.car -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Headers/TeadsSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsSDK.h 3 | // TeadsSDK 4 | // 5 | // Created by Gwendal Madouas on 14/10/2020. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for TeadsSDK. 11 | FOUNDATION_EXPORT double TeadsSDKVersionNumber; 12 | 13 | //! Project version string for TeadsSDK. 14 | FOUNDATION_EXPORT const unsigned char TeadsSDKVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | 19 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Info.plist -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Modules/TeadsSDK.swiftmodule/arm64-apple-ios.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Modules/TeadsSDK.swiftmodule/arm64-apple-ios.swiftdoc -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module TeadsSDK { 2 | umbrella header "TeadsSDK.h" 3 | export * 4 | 5 | module * { export * } 6 | } 7 | 8 | module TeadsSDK.Swift { 9 | header "TeadsSDK-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/TeadsSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/TeadsSDK -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64/TeadsSDK.framework/wkMessageHandlerScript.js: -------------------------------------------------------------------------------- 1 | ; 2 | (function() { 3 | window.onerror = function(message, url, lineNumber, columnNumber, error) { 4 | var string = message.toLowerCase(); 5 | var errorJson = { 6 | message: message, 7 | url: url, 8 | line: lineNumber, 9 | column: columnNumber, 10 | object: JSON.stringify(error) 11 | }; 12 | window.adPlayerOutput.error(JSON.stringify(errorJson)); 13 | return false; 14 | }; 15 | 16 | window.adPlayerOutput = {}; 17 | 18 | window.adPlayerOutput.error = function error(jsonValue) { 19 | window.webkit.messageHandlers.error.postMessage(jsonValue); 20 | }; 21 | 22 | window.adPlayerOutput.notifyPlayerReady = function notifyPlayerReady() { 23 | window.webkit.messageHandlers.notifyPlayerReady.postMessage(""); 24 | }; 25 | 26 | window.adPlayerOutput.notifyPlayerFailToLoad = function notifyPlayerFailToLoad(error) { 27 | window.webkit.messageHandlers.notifyPlayerFailToLoad.postMessage(error); 28 | }; 29 | 30 | window.adPlayerOutput.notifyPlayerEvent = function notifyPlayerEvent(jsonEventString) { 31 | window.webkit.messageHandlers.notifyPlayerEvent.postMessage(jsonEventString); 32 | }; 33 | 34 | window.adPlayerOutput.setFixedBackgroundImage = function setFixedBackgroundImage(imageSrc, timeout) { 35 | const message = JSON.stringify({"mediaUrl": imageSrc, "timeoutMilliseconds": timeout}) 36 | window.webkit.messageHandlers.setFixedBackgroundImage.postMessage(message); 37 | }; 38 | })(); 39 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Assets.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Assets.car -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Headers/TeadsSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsSDK.h 3 | // TeadsSDK 4 | // 5 | // Created by Gwendal Madouas on 14/10/2020. 6 | // 7 | 8 | #import 9 | 10 | //! Project version number for TeadsSDK. 11 | FOUNDATION_EXPORT double TeadsSDKVersionNumber; 12 | 13 | //! Project version string for TeadsSDK. 14 | FOUNDATION_EXPORT const unsigned char TeadsSDKVersionString[]; 15 | 16 | // In this header, you should import all the public headers of your framework using statements like #import 17 | 18 | 19 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Info.plist -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Modules/TeadsSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Modules/TeadsSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Modules/TeadsSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Modules/TeadsSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module TeadsSDK { 2 | umbrella header "TeadsSDK.h" 3 | export * 4 | 5 | module * { export * } 6 | } 7 | 8 | module TeadsSDK.Swift { 9 | header "TeadsSDK-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/TeadsSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/TeadsSDK -------------------------------------------------------------------------------- /Frameworks/TeadsSDK.xcframework/ios-arm64_x86_64-simulator/TeadsSDK.framework/wkMessageHandlerScript.js: -------------------------------------------------------------------------------- 1 | ; 2 | (function() { 3 | window.onerror = function(message, url, lineNumber, columnNumber, error) { 4 | var string = message.toLowerCase(); 5 | var errorJson = { 6 | message: message, 7 | url: url, 8 | line: lineNumber, 9 | column: columnNumber, 10 | object: JSON.stringify(error) 11 | }; 12 | window.adPlayerOutput.error(JSON.stringify(errorJson)); 13 | return false; 14 | }; 15 | 16 | window.adPlayerOutput = {}; 17 | 18 | window.adPlayerOutput.error = function error(jsonValue) { 19 | window.webkit.messageHandlers.error.postMessage(jsonValue); 20 | }; 21 | 22 | window.adPlayerOutput.notifyPlayerReady = function notifyPlayerReady() { 23 | window.webkit.messageHandlers.notifyPlayerReady.postMessage(""); 24 | }; 25 | 26 | window.adPlayerOutput.notifyPlayerFailToLoad = function notifyPlayerFailToLoad(error) { 27 | window.webkit.messageHandlers.notifyPlayerFailToLoad.postMessage(error); 28 | }; 29 | 30 | window.adPlayerOutput.notifyPlayerEvent = function notifyPlayerEvent(jsonEventString) { 31 | window.webkit.messageHandlers.notifyPlayerEvent.postMessage(jsonEventString); 32 | }; 33 | 34 | window.adPlayerOutput.setFixedBackgroundImage = function setFixedBackgroundImage(imageSrc, timeout) { 35 | const message = JSON.stringify({"mediaUrl": imageSrc, "timeoutMilliseconds": timeout}) 36 | window.webkit.messageHandlers.setFixedBackgroundImage.postMessage(message); 37 | }; 38 | })(); 39 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "cocoapods", '>=1.10.2' 4 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (3.0.7) 5 | base64 6 | nkf 7 | rexml 8 | activesupport (7.2.2.1) 9 | base64 10 | benchmark (>= 0.3) 11 | bigdecimal 12 | concurrent-ruby (~> 1.0, >= 1.3.1) 13 | connection_pool (>= 2.2.5) 14 | drb 15 | i18n (>= 1.6, < 2) 16 | logger (>= 1.4.2) 17 | minitest (>= 5.1) 18 | securerandom (>= 0.3) 19 | tzinfo (~> 2.0, >= 2.0.5) 20 | addressable (2.8.7) 21 | public_suffix (>= 2.0.2, < 7.0) 22 | algoliasearch (1.27.5) 23 | httpclient (~> 2.8, >= 2.8.3) 24 | json (>= 1.5.1) 25 | atomos (0.1.3) 26 | base64 (0.2.0) 27 | benchmark (0.4.0) 28 | bigdecimal (3.1.8) 29 | claide (1.1.0) 30 | cocoapods (1.16.2) 31 | addressable (~> 2.8) 32 | claide (>= 1.0.2, < 2.0) 33 | cocoapods-core (= 1.16.2) 34 | cocoapods-deintegrate (>= 1.0.3, < 2.0) 35 | cocoapods-downloader (>= 2.1, < 3.0) 36 | cocoapods-plugins (>= 1.0.0, < 2.0) 37 | cocoapods-search (>= 1.0.0, < 2.0) 38 | cocoapods-trunk (>= 1.6.0, < 2.0) 39 | cocoapods-try (>= 1.1.0, < 2.0) 40 | colored2 (~> 3.1) 41 | escape (~> 0.0.4) 42 | fourflusher (>= 2.3.0, < 3.0) 43 | gh_inspector (~> 1.0) 44 | molinillo (~> 0.8.0) 45 | nap (~> 1.0) 46 | ruby-macho (>= 2.3.0, < 3.0) 47 | xcodeproj (>= 1.27.0, < 2.0) 48 | cocoapods-core (1.16.2) 49 | activesupport (>= 5.0, < 8) 50 | addressable (~> 2.8) 51 | algoliasearch (~> 1.0) 52 | concurrent-ruby (~> 1.1) 53 | fuzzy_match (~> 2.0.4) 54 | nap (~> 1.0) 55 | netrc (~> 0.11) 56 | public_suffix (~> 4.0) 57 | typhoeus (~> 1.0) 58 | cocoapods-deintegrate (1.0.5) 59 | cocoapods-downloader (2.1) 60 | cocoapods-plugins (1.0.0) 61 | nap 62 | cocoapods-search (1.0.1) 63 | cocoapods-trunk (1.6.0) 64 | nap (>= 0.8, < 2.0) 65 | netrc (~> 0.11) 66 | cocoapods-try (1.2.0) 67 | colored2 (3.1.2) 68 | concurrent-ruby (1.3.5) 69 | connection_pool (2.5.0) 70 | drb (2.2.1) 71 | escape (0.0.4) 72 | ethon (0.16.0) 73 | ffi (>= 1.15.0) 74 | ffi (1.17.1-arm64-darwin) 75 | fourflusher (2.3.1) 76 | fuzzy_match (2.0.4) 77 | gh_inspector (1.1.3) 78 | httpclient (2.8.3) 79 | i18n (1.14.7) 80 | concurrent-ruby (~> 1.0) 81 | json (2.9.0) 82 | logger (1.7.0) 83 | minitest (5.25.4) 84 | molinillo (0.8.0) 85 | nanaimo (0.4.0) 86 | nap (1.1.0) 87 | netrc (0.11.0) 88 | nkf (0.2.0) 89 | public_suffix (4.0.7) 90 | rexml (3.4.0) 91 | ruby-macho (2.5.1) 92 | securerandom (0.4.0) 93 | typhoeus (1.4.1) 94 | ethon (>= 0.9.0) 95 | tzinfo (2.0.6) 96 | concurrent-ruby (~> 1.0) 97 | xcodeproj (1.27.0) 98 | CFPropertyList (>= 2.3.3, < 4.0) 99 | atomos (~> 0.1.3) 100 | claide (>= 1.0.2, < 2.0) 101 | colored2 (~> 3.1) 102 | nanaimo (~> 0.4.0) 103 | rexml (>= 3.3.6, < 4.0) 104 | 105 | PLATFORMS 106 | arm64-darwin 107 | 108 | DEPENDENCIES 109 | cocoapods (>= 1.10.2) 110 | 111 | BUNDLED WITH 112 | 2.6.3 113 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Teads 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /MediationAdapters/Common/CGFloat-extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGFloat-extensions.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Thibaud Saint-Etienne on 15/07/2021. 6 | // 7 | 8 | import UIKit 9 | 10 | extension CGFloat { 11 | var positive: CGFloat? { 12 | self > 0 ? self : nil 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MediationAdapters/Common/Helper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Helper.swift 3 | // Pods 4 | // 5 | // Created by Thibaud Saint-Etienne on 21/07/2021. 6 | // 7 | 8 | import TeadsSDK 9 | import UIKit 10 | 11 | public enum Helper { 12 | public static func bannerSize(for width: CGFloat) -> CGSize { 13 | CGSize(width: width > 0 ? width : 300, height: width / (16 / 9)) 14 | } 15 | } 16 | 17 | /// Convenience closure typealias for ``TeadsAdSettings`` 18 | /// 19 | /// Has been renamed in favor of TeadsAdapterSettings 20 | @available(*, deprecated, renamed: "TeadsAdapterSettings", message: "Only relevant when using TeadsAdMobAdapter, TeadsAppLovinAdapter, TeadsSmartAdapter") 21 | public typealias TeadsAdSettings = TeadsAdapterSettings 22 | -------------------------------------------------------------------------------- /MediationAdapters/Common/TeadsAdapterErrorCode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsAdapterErrorCode.swift 3 | // MediationAdapters 4 | // 5 | // Created by Antoine Barrault on 16/07/2021. 6 | // 7 | 8 | import Foundation 9 | 10 | /// Enumeration defining possible errors in Teads adapter. 11 | public enum TeadsAdapterErrorCode: Int { 12 | case pidNotFound 13 | case serverParameterError 14 | case loadError 15 | } 16 | 17 | extension TeadsAdapterErrorCode: CustomNSError { 18 | var localizedDescription: String { 19 | switch self { 20 | case .pidNotFound: 21 | return "No valid PID has been provided to load Teads ad." 22 | case .serverParameterError: 23 | return "serverParameterString is not a jSON" 24 | case .loadError: 25 | return "Teads ad can't be initialized" 26 | } 27 | } 28 | 29 | public static var errorDomain: String { 30 | "tv.teads.adapter" 31 | } 32 | 33 | public var errorCode: Int { 34 | rawValue 35 | } 36 | 37 | public var errorUserInfo: [String: Any] { 38 | [NSLocalizedDescriptionKey: localizedDescription, NSLocalizedFailureReasonErrorKey: localizedDescription] 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /MediationAdapters/Common/TeadsInReadAdView-extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsInReadAdView-extensions.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Thibaud Saint-Etienne on 15/07/2021. 6 | // 7 | 8 | import TeadsSDK 9 | import UIKit 10 | 11 | public extension TeadsInReadAdView { 12 | func updateHeight(with adRatio: TeadsAdRatio) { 13 | if let width = superview?.frame.width.positive ?? frame.width.positive { 14 | frame = CGRect(origin: CGPoint.zero, size: CGSize(width: width, height: adRatio.calculateHeight(for: width))) 15 | layoutIfNeeded() 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/AdMobHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AdMobHelper.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Richard Dépierre on 28/03/2024. 6 | // 7 | 8 | import GoogleMobileAds 9 | import TeadsSDK 10 | import UIKit 11 | 12 | public enum AdMobHelper { 13 | public static func getGMAVersionNumber() -> String { 14 | // Get GMA version number 15 | let gmaVersionNumber = MobileAds.shared.versionNumber 16 | 17 | // Extract major, minor, and patch version numbers 18 | let majorVersion = gmaVersionNumber.majorVersion 19 | let minorVersion = gmaVersionNumber.minorVersion 20 | let patchVersion = gmaVersionNumber.patchVersion 21 | 22 | // Construct the formatted version string 23 | let formattedVersion = "\(majorVersion).\(minorVersion).\(patchVersion)" 24 | 25 | return formattedVersion 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/Banner/GADMAdapterTeadsBanner.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GADMAdapterTeadsBanner.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Jérémy Grosjean on 07/06/2021. 6 | // 7 | 8 | import Foundation 9 | import GoogleMobileAds 10 | import TeadsSDK 11 | 12 | @objc(GADMAdapterTeadsBanner) 13 | public final class GADMAdapterTeadsBanner: GADMAdapterTeadsCustomEvent { 14 | fileprivate var bannerAd: GADMAdapterTeadsBannerAd? 15 | 16 | public func loadBanner( 17 | for adConfiguration: MediationBannerAdConfiguration, 18 | completionHandler: @escaping GADMediationBannerLoadCompletionHandler 19 | ) { 20 | bannerAd = GADMAdapterTeadsBannerAd() 21 | bannerAd?.loadBanner(for: adConfiguration, completionHandler: completionHandler) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/Banner/GADMAdapterTeadsBannerAd.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GADMAdapterTeadsBannerAd.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Thibaud Saint-Etienne on 27/10/2022. 6 | // 7 | 8 | import Foundation 9 | import GoogleMobileAds 10 | import TeadsSDK 11 | 12 | @objc(GADMAdapterTeadsBannerAd) 13 | public final class GADMAdapterTeadsBannerAd: NSObject, MediationBannerAd { 14 | /// The Teads Ad network InRead AdView 15 | var bannerAd: TeadsInReadAdView? 16 | 17 | /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. 18 | var delegate: MediationBannerAdEventDelegate? 19 | 20 | /// Completion handler called after ad load 21 | var completionHandler: GADMediationBannerLoadCompletionHandler? 22 | 23 | public var view: UIView { 24 | bannerAd ?? UIView() 25 | } 26 | 27 | private var placement: TeadsInReadAdPlacement? 28 | private var adConfiguration: MediationBannerAdConfiguration? 29 | private var adSettings: TeadsAdapterSettings? 30 | 31 | public func loadBanner( 32 | for adConfiguration: MediationBannerAdConfiguration, 33 | completionHandler: @escaping GADMediationBannerLoadCompletionHandler 34 | ) { 35 | // Check PID 36 | guard let rawPid = adConfiguration.credentials.settings["parameter"] as? String, let pid = Int(rawPid) else { 37 | delegate = completionHandler(nil, TeadsAdapterErrorCode.pidNotFound) 38 | return 39 | } 40 | 41 | self.completionHandler = completionHandler 42 | self.adConfiguration = adConfiguration 43 | 44 | // Prepare ad settings 45 | let adSettings = (adConfiguration.extras as? TeadsAdapterSettings) ?? TeadsAdapterSettings() 46 | adSettings.setIntegration(type: .adMob, version: AdMobHelper.getGMAVersionNumber()) 47 | self.adSettings = adSettings 48 | 49 | let adSize = adConfiguration.adSize 50 | bannerAd = TeadsInReadAdView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: adSize.size.width, height: adSize.size.height))) 51 | 52 | placement = Teads.createInReadPlacement(pid: pid, settings: adSettings.adPlacementSettings, delegate: self) 53 | placement?.requestAd(requestSettings: adSettings.adRequestSettings) 54 | } 55 | } 56 | 57 | extension GADMAdapterTeadsBannerAd: TeadsInReadAdPlacementDelegate { 58 | public func didReceiveAd(ad: TeadsInReadAd, adRatio: TeadsAdRatio) { 59 | ad.delegate = self 60 | bannerAd?.bind(ad) 61 | if adSettings?.hasSubscribedToAdResizing ?? false { 62 | bannerAd?.updateHeight(with: adRatio) 63 | } 64 | delegate = completionHandler?(self, nil) 65 | completionHandler = nil 66 | } 67 | 68 | public func didFailToReceiveAd(reason: AdFailReason) { 69 | delegate = completionHandler?(nil, reason) 70 | completionHandler = nil 71 | } 72 | 73 | public func adOpportunityTrackerView(trackerView _: TeadsAdOpportunityTrackerView) { 74 | // adOpportunityTrackerView is handled by TeadsSDK 75 | } 76 | 77 | public func didUpdateRatio(ad _: TeadsInReadAd, adRatio: TeadsAdRatio) { 78 | if adSettings?.hasSubscribedToAdResizing ?? false { 79 | bannerAd?.updateHeight(with: adRatio) 80 | } 81 | } 82 | } 83 | 84 | extension GADMAdapterTeadsBannerAd: TeadsAdDelegate { 85 | public func didRecordImpression(ad _: TeadsAd) { 86 | delegate?.reportImpression() 87 | } 88 | 89 | public func didRecordClick(ad _: TeadsAd) { 90 | delegate?.reportClick() 91 | } 92 | 93 | public func willPresentModalView(ad _: TeadsAd) -> UIViewController? { 94 | delegate?.willPresentFullScreenView() 95 | return adConfiguration?.topViewController 96 | } 97 | 98 | public func didCatchError(ad _: TeadsAd, error: Error) { 99 | delegate?.didFailToPresentWithError(error) 100 | } 101 | 102 | public func didExpandedToFullscreen(ad _: TeadsAd) { 103 | delegate?.willPresentFullScreenView() 104 | } 105 | 106 | public func didCollapsedFromFullscreen(ad _: TeadsAd) { 107 | delegate?.didDismissFullScreenView() 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/Exports.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Exports.swift 3 | // 4 | // 5 | // Created by Paul NICOLAS on 21/11/2022. 6 | // 7 | 8 | /// SPM compatibility: TeadsAdapterCommon sources are exposed as Swift Module 9 | @_exported import TeadsAdapterCommon 10 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/GADMAdapterTeadsCustomEvent.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GADMAdapterTeadsCustomEvent.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Thibaud Saint-Etienne on 26/10/2022. 6 | // 7 | 8 | import Foundation 9 | import GoogleMobileAds 10 | import TeadsSDK 11 | 12 | @objc(GADMAdapterTeadsCustomEvent) 13 | public class GADMAdapterTeadsCustomEvent: NSObject, MediationAdapter { 14 | public static func adSDKVersion() -> VersionNumber { 15 | let versionComponents = String(Teads.sdkVersion).components( 16 | separatedBy: ".") 17 | 18 | if versionComponents.count >= 3 { 19 | let majorVersion = Int(versionComponents[0]) ?? 0 20 | let minorVersion = Int(versionComponents[1]) ?? 0 21 | let patchVersion = Int(versionComponents[2]) ?? 0 22 | 23 | return VersionNumber( 24 | majorVersion: majorVersion, minorVersion: minorVersion, patchVersion: patchVersion 25 | ) 26 | } 27 | 28 | return VersionNumber() 29 | } 30 | 31 | public static func adapterVersion() -> VersionNumber { 32 | adSDKVersion() 33 | } 34 | 35 | public static func networkExtrasClass() -> AdNetworkExtras.Type? { 36 | TeadsAdapterSettings.self 37 | } 38 | 39 | public static func setUpWith( 40 | _: MediationServerConfiguration, 41 | completionHandler: @escaping GADMediationAdapterSetUpCompletionBlock 42 | ) { 43 | Teads.configure() 44 | completionHandler(nil) 45 | } 46 | 47 | override public required init() { 48 | super.init() 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/Native/GADMAdapterTeadsNative.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GADMAdapterTeadsNative.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Jérémy Grosjean on 15/06/2021. 6 | // 7 | 8 | import GoogleMobileAds 9 | import TeadsSDK 10 | import UIKit 11 | 12 | @objc(GADMAdapterTeadsNative) 13 | public final class GADMAdapterTeadsNative: GADMAdapterTeadsCustomEvent { 14 | fileprivate var nativeAd: GADMAdapterTeadsNativeAd? 15 | 16 | public func loadNativeAd( 17 | for adConfiguration: MediationNativeAdConfiguration, 18 | completionHandler: @escaping GADMediationNativeLoadCompletionHandler 19 | ) { 20 | nativeAd = GADMAdapterTeadsNativeAd() 21 | nativeAd?.loadNativeAd(for: adConfiguration, completionHandler: completionHandler) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/README.md: -------------------------------------------------------------------------------- 1 | # Teads - iOS AdMob Mediation Adapter 2 | 3 | > Mediation adapter to be used in conjunction with AdMob to deliver Teads ads on iOS devices. 4 | 5 | If you want to display Teads ads in your iOS application through AdMob mediation, you’re at the right place. 6 | 7 | ## Requirements 8 | 9 | - ![Platform: iOS 10+](https://img.shields.io/badge/Platform-iOS%2010%2B-blue.svg?style=flat) 10 | - ![Xcode: 12.5+](https://img.shields.io/badge/Xcode-12.5+-blue.svg?style=flat) 11 | - ![GoogleMobileAdsSDK: 8.0+](https://img.shields.io/badge/GoogleMobileAdsSDK-8.0+-blue.svg?style=flat) 12 | - ![Teads SDK: 5.0.3+](https://img.shields.io/badge/Teads%20SDK-5.0.3+-blue.svg?style=flat) 13 | 14 | ## Features 15 | 16 | - ✅ Displaying Teads banners 17 | - ✅ Displaying Teads native ads 18 | 19 | ## Installation 20 | 21 | Before installing Teads adapter, you need to implement [Google Mobile Ads](https://developers.google.com/admob/ios/quick-start) in your application. 22 | 23 | #### CocoaPods 24 | 25 | If your project is managing dependencies through [CocoaPods](https://cocoapods.org/), you just need to add this pod in your `Podfile`. 26 | 27 | It will install Teads adapter and Teads SDK. 28 | 29 | 1. Add pod named `TeadsAdMobAdapter` in your Podfile: 30 | 31 | ```ruby 32 | platform :ios, '10.0' 33 | pod 'TeadsAdMobAdapter', '~> 5.1' 34 | ``` 35 | 36 | 2. Run `pod install --repo-update` to install the adapter in your project. 37 | 3. Follow the [Define Custom Event](https://support.teads.tv/support/solutions/articles/36000314767-inread-google-ad-manager-and-admob-mediation#defining_a_custom_event) step to finish the integration. 38 | 4. You’re done. 39 | 40 | ## Integration Documentation 41 | 42 | Integration instructions are available on [Teads SDK Documentation](https://support.teads.tv/support/solutions/articles/36000314767-inread-google-ad-manager-and-admob-mediation). 43 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAdMobAdapter/TeadsAdapterSettings+GADAdNetworkExtras.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsAdapterSettings+GADAdNetworkExtras.swift 3 | // TeadsAdMobAdapter 4 | // 5 | // Created by Thibaud Saint-Etienne on 27/10/2022. 6 | // 7 | 8 | import Foundation 9 | import GoogleMobileAds 10 | import TeadsSDK 11 | 12 | @objc public final class GADMAdapterTeads: NSObject { 13 | @available(*, deprecated, message: "defaultLabel is not used anymore please pass your label value as parameter of the customEventExtra method") 14 | @objc public static let defaultLabel = "Teads" 15 | 16 | /// customEventExtra is a method used to create GADCustomEventExtras based on teadsAdSettings 17 | /// - Parameters: 18 | /// - teadsAdSettings: the TeadsAdapterSettings that you will pass as extra parameters for the mediation. 19 | /// - label: the same label as it registered on your Google dashboard, default value is Teads. 20 | /// 21 | /// - Important: 22 | /// 23 | /// This method is deprecated if favor of registering directly ``TeadsSDK.TeadsAdapterSettings`` 24 | /// ``` 25 | /// import TeadsAdMobAdapter 26 | /// 27 | /// let request = GADRequest() 28 | /// let adSettings = TeadsAdapterSettings { (settings) in 29 | /// settings.pageUrl("http://page.com/article1") 30 | /// settings.registerAdView(admobAdView, delegate: self) 31 | /// } 32 | /// request.register(adSettings) 33 | /// ``` 34 | @available(*, unavailable, message: "customEventExtra is not available anymore, you can register TeadsAdapterSettings directly calling `GADRequest.register(_ )") 35 | @objc public class func customEventExtra(with teadsAdSettings: TeadsAdapterSettings, for label: String) -> GADCustomEventExtras { 36 | let customEventExtras = CustomEventExtras() 37 | if let parameters = try? teadsAdSettings.toDictionary() { 38 | customEventExtras.setExtras(parameters, forLabel: label) 39 | } 40 | return customEventExtras 41 | } 42 | } 43 | 44 | extension TeadsAdapterSettings: AdNetworkExtras {} 45 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAppLovinAdapter/AppLovinTeadsNativeAd.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppLovinTeadsNativeAd.swift 3 | // TeadsAppLovinAdapter 4 | // 5 | // Created by Paul Nicolas on 14/03/2022. 6 | // 7 | 8 | import AppLovinSDK 9 | 10 | @objc final class AppLovinTeadsNativeAd: MANativeAd { 11 | weak var parentAdatper: TeadsMediationAdapter? 12 | 13 | @objc init(parent: TeadsMediationAdapter, builderBlock: MANativeAdBuilderBlock) { 14 | super.init(format: .native, builderBlock: builderBlock) 15 | parentAdatper = parent 16 | } 17 | 18 | @objc override func prepareView(forInteraction maxNativeAdView: MANativeAdView) { 19 | guard let teadsNativeAd = parentAdatper?.nativeAd else { 20 | parentAdatper?.e("Failed to register native ad views: native ad is nil.", becauseOf: nil) 21 | return 22 | } 23 | teadsNativeAd.register(containerView: maxNativeAdView) 24 | maxNativeAdView.titleLabel?.bind(component: teadsNativeAd.title) 25 | maxNativeAdView.bodyLabel?.bind(component: teadsNativeAd.content) 26 | maxNativeAdView.callToActionButton?.bind(component: teadsNativeAd.callToAction) 27 | maxNativeAdView.iconImageView?.bind(component: teadsNativeAd.icon) 28 | maxNativeAdView.advertiserLabel?.bind(component: teadsNativeAd.sponsored) 29 | 30 | // mediaContentView and optionsContentView are already binded (subview) 31 | 32 | if let adOpportunityView = parentAdatper?.adOpportunityView { 33 | maxNativeAdView.addSubview(adOpportunityView) 34 | parentAdatper?.adOpportunityView = nil 35 | } 36 | } 37 | 38 | override func performClick() { 39 | parentAdatper?.nativeAd?.performTap() 40 | super.performClick() 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAppLovinAdapter/Exports.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Exports.swift 3 | // 4 | // 5 | // Created by Paul NICOLAS on 21/11/2022. 6 | // 7 | 8 | /// SPM compatibility: TeadsAdapterCommon sources are exposed as Swift Module 9 | @_exported import TeadsAdapterCommon 10 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAppLovinAdapter/README.md: -------------------------------------------------------------------------------- 1 | # Teads - iOS AppLovin MAX Mediation Adapter 2 | 3 | > Mediation adapter to be used in conjunction with AppLovin to deliver Teads ads on iOS devices. 4 | 5 | If you want to display Teads ads in your iOS application through AppLovin MAX mediation, you’re at the right place. 6 | 7 | ## Requirements 8 | 9 | - ![Platform: iOS 10+](https://img.shields.io/badge/Platform-iOS%2010%2B-blue.svg?style=flat) 10 | - ![Xcode: 12.5+](https://img.shields.io/badge/Xcode-12.5+-blue.svg?style=flat) 11 | - ![AppLovin SDK: 11.1.1+](https://img.shields.io/badge/AppLovin%20SDK-11.1.1+-blue.svg?style=flat) 12 | - ![Teads SDK: 5.0.12+](https://img.shields.io/badge/Teads%20SDK-5.0.12+-blue.svg?style=flat) 13 | 14 | ## Features 15 | 16 | - ✅ Displaying Teads inRead ads 17 | - ✅ Displaying Teads native ads 18 | 19 | ## Installation 20 | 21 | Before installing Teads adapter, you need to implement [AppLovin Ads](https://dash.applovin.com/documentation/mediation/ios/getting-started/integration) in your application. 22 | 23 | #### CocoaPods 24 | 25 | If your project is managing dependencies through [CocoaPods](https://cocoapods.org/), you just need to add this pod in your `Podfile`. 26 | 27 | It will install Teads adapter and Teads SDK. 28 | 29 | 1. Add pod named `TeadsAppLovinAdapter` in your Podfile: 30 | 31 | ```ruby 32 | platform :ios, '10.0' 33 | pod 'TeadsAppLovinAdapter', '~> 5.1' 34 | ``` 35 | 36 | 2. Run `pod install --repo-update` to install the adapter in your project. 37 | 3. Follow the [Create a custom Network](https://support.teads.tv/support/solutions/articles/36000357700-inread-applovin-mediation#create-a-custom-network) step to finish the integration. 38 | 4. You’re done. 39 | 40 | ## Integration Documentation 41 | 42 | Integration instructions are available on [Teads SDK Documentation](https://support.teads.tv/support/solutions/articles/36000357700-inread-applovin-mediation). 43 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsAppLovinAdapter/TeadsMediationAdapterExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsMediationAdapterExtension.swift 3 | // TeadsAppLovinAdapter 4 | // 5 | // Created by Paul Nicolas on 15/02/2022. 6 | // 7 | 8 | import AppLovinSDK 9 | import TeadsSDK 10 | 11 | @objc public extension MANativeAdLoader { 12 | func register(teadsAdSettings: TeadsAdapterSettings) { 13 | teadsAdSettings.register(into: self) 14 | } 15 | } 16 | 17 | @objc public extension MAAdView { 18 | func register(teadsAdSettings: TeadsAdapterSettings) { 19 | teadsAdSettings.register(into: self) 20 | } 21 | } 22 | 23 | extension TeadsAdapterSettings { 24 | @nonobjc class func instance(fromAppLovinParameters dictionary: [AnyHashable: Any]?) throws -> TeadsAdapterSettings { 25 | let adapterVersion = ALSdk.version() 26 | let adSettings = try TeadsAdapterSettings.instance(from: dictionary ?? Dictionary()) 27 | adSettings.setIntegration(type: .appLovin, version: adapterVersion) 28 | return adSettings 29 | } 30 | } 31 | 32 | public extension TeadsAdapterSettings { 33 | func register(into adView: MAAdView) { 34 | guard let extra = try? toDictionary() else { 35 | return 36 | } 37 | for (hashableKey, value) in extra { 38 | guard let key = hashableKey as? String else { 39 | return 40 | } 41 | adView.setLocalExtraParameterForKey(key, value: value) 42 | } 43 | } 44 | 45 | func register(into adLoader: MANativeAdLoader) { 46 | guard let extra = try? toDictionary() else { 47 | return 48 | } 49 | for (hashableKey, value) in extra { 50 | guard let key = hashableKey as? String else { 51 | return 52 | } 53 | adLoader.setLocalExtraParameterForKey(key, value: value) 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsSASAdapter/README.md: -------------------------------------------------------------------------------- 1 | # Teads - iOS Smart AdServer Mediation Adapter 2 | 3 | > Mediation adapter to be used in conjunction with Smart Ads Server to deliver Teads ads on iOS devices. 4 | 5 | If you want to display Teads ads in your iOS application through Smart Ads Server mediation, you’re at the right place. 6 | 7 | ## Requirements 8 | 9 | - ![Platform: iOS 10+](https://img.shields.io/badge/Platform-iOS%2010%2B-blue.svg?style=flat) 10 | - ![Xcode: 12.5+](https://img.shields.io/badge/Xcode-12.5+-blue.svg?style=flat) 11 | - ![SAS SDK: 7.62+](https://img.shields.io/badge/Smart%20AdServer%20SDK-7.62+-blue.svg?style=flat) 12 | - ![Teads SDK: 5.0.3+](https://img.shields.io/badge/Teads%20SDK-5.0.3+-blue.svg?style=flat) 13 | 14 | ## Features 15 | 16 | - ✅ Displaying Teads banners 17 | 18 | ## Installation 19 | 20 | Before installing Teads adapter, you need to implement [Smart Ads Server ](https://documentation.smartadserver.com/displaySDK/ios/gettingstarted.html) in your application. 21 | 22 | #### CocoaPods 23 | 24 | If your project is managing dependencies through [CocoaPods](https://cocoapods.org/), you just need to add this pod in your `Podfile`. 25 | 26 | It will install Teads adapter and Teads SDK. 27 | 28 | 1. Add pod named `TeadsSASAdapter` in your Podfile: 29 | 30 | ```ruby 31 | platform :ios, '10.0' 32 | pod 'TeadsSASAdapter', '~> 5.1' 33 | ``` 34 | 35 | 2. Run `pod install --repo-update` to install the adapter in your project. 36 | 3. Follow the [Define Custom Event](https://support.teads.tv/support/solutions/articles/36000314771-smart-adserver-mediation#defining_a_custom_event) step to finish the integration. 37 | 4. You’re done. 38 | 39 | ## Integration Documentation 40 | 41 | Integration instructions are available on [Teads SDK Documentation](https://support.teads.tv/support/solutions/articles/36000314771-smart-adserver-mediation). 42 | -------------------------------------------------------------------------------- /MediationAdapters/TeadsSASAdapter/TeadsSASAdapterHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsSASAdapterHelper.swift 3 | // TeadsSASAdapter 4 | // 5 | // Created by Jérémy Grosjean on 06/11/2020. 6 | // 7 | 8 | import TeadsSDK 9 | import UIKit 10 | 11 | @objc public final class TeadsSASAdapterHelper: NSObject { 12 | @objc public static func teadsAdSettingsToString(adSettings: TeadsAdapterSettings) -> String? { 13 | guard let adSettingsEscapedString = adSettings.escapedString else { 14 | return nil 15 | } 16 | return "teadsAdSettingsKey=\(adSettingsEscapedString)" 17 | } 18 | 19 | @objc public static func concatAdSettingsToKeywords(keywordsStrings: String, adSettings: TeadsAdapterSettings) -> String { 20 | if let adSettingsStrings = teadsAdSettingsToString(adSettings: adSettings) { 21 | return "\(keywordsStrings);\(adSettingsStrings)" 22 | } 23 | return keywordsStrings 24 | } 25 | 26 | static func stringToAdSettings(adSettingsString: String?) -> TeadsAdapterSettings? { 27 | if let adSettingsString = adSettingsString?.removingPercentEncoding?.data(using: .utf8) { 28 | return try? JSONDecoder().decode(TeadsAdapterSettings.self, from: adSettingsString) 29 | } 30 | return nil 31 | } 32 | } 33 | 34 | extension TeadsAdapterSettings { 35 | var escapedString: String? { 36 | if let data = try? JSONEncoder().encode(self), let adSettingsString = String(data: data, encoding: .utf8) { 37 | return adSettingsString.addingPercentEncoding(withAllowedCharacters: .urlUserAllowed) 38 | } 39 | return nil 40 | } 41 | } 42 | 43 | struct ServerParameter: Codable { 44 | var placementId: Int? 45 | var teadsAdSettingsKey: String? 46 | 47 | static func instance(from serverParameterString: String) -> Self? { 48 | guard let data = serverParameterString.data(using: .utf8) else { 49 | return nil 50 | } 51 | return try? JSONDecoder().decode(Self.self, from: data) 52 | } 53 | 54 | var adSettings: TeadsAdapterSettings { 55 | TeadsSASAdapterHelper.stringToAdSettings(adSettingsString: teadsAdSettingsKey) ?? TeadsAdapterSettings() 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "AppLovinSDK", 6 | "repositoryURL": "https://github.com/AppLovin/AppLovin-MAX-Swift-Package.git", 7 | "state": { 8 | "branch": null, 9 | "revision": "e662cd201df1da33f989766267283e9b40f7a432", 10 | "version": "12.3.1" 11 | } 12 | }, 13 | { 14 | "package": "GoogleMobileAds", 15 | "repositoryURL": "https://github.com/googleads/swift-package-manager-google-mobile-ads.git", 16 | "state": { 17 | "branch": null, 18 | "revision": "5ff977255c2ba5844e7e9da779f1f2a5a00e0028", 19 | "version": "11.2.0" 20 | } 21 | }, 22 | { 23 | "package": "GoogleUserMessagingPlatform", 24 | "repositoryURL": "https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git", 25 | "state": { 26 | "branch": null, 27 | "revision": "3b924ce3313a5fd2fc6a8dc889a8c38f76890fe3", 28 | "version": "2.0.0" 29 | } 30 | } 31 | ] 32 | }, 33 | "version": 1 34 | } 35 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.3 2 | 3 | import PackageDescription 4 | 5 | let teadsModuleName = "TeadsSDK" 6 | let teadsAdMobAdapterModuleName = "TeadsAdMobAdapter" 7 | let teadsAppLovinAdapterModuleName = "TeadsAppLovinAdapter" 8 | let teadsSASAdapterModuleName = "TeadsSASAdapter" 9 | let mediationAdaptersDirectory = "MediationAdapters" 10 | let googleMobileAdsModuleName = "GoogleMobileAds" 11 | let appLovinMaxModuleName = "AppLovinSDK" 12 | let omModuleName = "OMSDK_Teadstv" 13 | let commonModuleName = "TeadsAdapterCommon" 14 | let commonModuleNamePath = "Common" 15 | 16 | let package = Package( 17 | name: "Teads", 18 | platforms: [ 19 | .iOS(.v12), 20 | ], 21 | products: [ 22 | .library( 23 | name: teadsModuleName, 24 | targets: [teadsModuleName, omModuleName] 25 | ), 26 | .library( 27 | name: teadsAdMobAdapterModuleName, 28 | targets: [teadsAdMobAdapterModuleName] 29 | ), 30 | .library( 31 | name: teadsAppLovinAdapterModuleName, 32 | targets: [teadsAppLovinAdapterModuleName] 33 | ), 34 | ], 35 | dependencies: [ 36 | .package( 37 | name: googleMobileAdsModuleName, 38 | url: "https://github.com/googleads/swift-package-manager-google-mobile-ads.git", 39 | "11.2.0" ..< "12.0.0" 40 | ), 41 | .package( 42 | name: appLovinMaxModuleName, 43 | url: "https://github.com/AppLovin/AppLovin-MAX-Swift-Package.git", 44 | "12.3.1" ..< "13.0.0" 45 | ), 46 | ], 47 | targets: [ 48 | .binaryTarget( 49 | name: teadsModuleName, 50 | path: "Frameworks/\(teadsModuleName).xcframework" 51 | ), 52 | .binaryTarget( 53 | name: omModuleName, 54 | path: "Frameworks/\(omModuleName).xcframework" 55 | ), 56 | .target( 57 | name: commonModuleName, 58 | dependencies: [ 59 | .target(name: teadsModuleName), 60 | .target(name: omModuleName), 61 | ], 62 | path: "\(mediationAdaptersDirectory)/\(commonModuleNamePath)" 63 | ), 64 | .target( 65 | name: teadsAdMobAdapterModuleName, 66 | dependencies: [ 67 | .product(name: googleMobileAdsModuleName, package: googleMobileAdsModuleName), 68 | .target(name: commonModuleName), 69 | ], 70 | path: "\(mediationAdaptersDirectory)/\(teadsAdMobAdapterModuleName)" 71 | ), 72 | .target( 73 | name: teadsAppLovinAdapterModuleName, 74 | dependencies: [ 75 | .product(name: appLovinMaxModuleName, package: appLovinMaxModuleName), 76 | .target(name: commonModuleName), 77 | ], 78 | path: "\(mediationAdaptersDirectory)/\(teadsAppLovinAdapterModuleName)" 79 | ), 80 | ] 81 | ) 82 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | 2 | project 'TeadsSampleApp.xcodeproj' 3 | # Uncomment the next line to define a global platform for your project 4 | platform :ios, '12.0' 5 | 6 | target 'TeadsSampleApp' do 7 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 8 | use_frameworks! 9 | 10 | pod 'TeadsSDK', '~> 5.1.3' 11 | 12 | pod 'TeadsSASAdapter', '~> 5.1.3' 13 | pod 'TeadsAdMobAdapter', '~> 5.1.3' 14 | pod 'TeadsAppLovinAdapter', '~> 5.1.3' 15 | 16 | pod 'SwiftFormat/CLI' 17 | end 18 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AppLovinSDK (13.3.0) 3 | - Google-Mobile-Ads-SDK (12.5.0): 4 | - GoogleUserMessagingPlatform (>= 1.1) 5 | - GoogleUserMessagingPlatform (3.0.0) 6 | - Smart-Display-SDK (7.24.2) 7 | - SwiftFormat/CLI (0.56.3) 8 | - TeadsAdMobAdapter (5.1.9): 9 | - Google-Mobile-Ads-SDK (>= 9.0.0) 10 | - TeadsSDK (= 5.1.9) 11 | - TeadsAppLovinAdapter (5.1.9): 12 | - AppLovinSDK (>= 11.5.1) 13 | - TeadsSDK (= 5.1.9) 14 | - TeadsSASAdapter (5.1.9): 15 | - Smart-Display-SDK (>= 7.6.2) 16 | - TeadsSDK (= 5.1.9) 17 | - TeadsSDK (5.1.9): 18 | - TeadsSDK/Core (= 5.1.9) 19 | - TeadsSDK/Core (5.1.9) 20 | 21 | DEPENDENCIES: 22 | - SwiftFormat/CLI 23 | - TeadsAdMobAdapter (~> 5.1.3) 24 | - TeadsAppLovinAdapter (~> 5.1.3) 25 | - TeadsSASAdapter (~> 5.1.3) 26 | - TeadsSDK (~> 5.1.3) 27 | 28 | SPEC REPOS: 29 | trunk: 30 | - AppLovinSDK 31 | - Google-Mobile-Ads-SDK 32 | - GoogleUserMessagingPlatform 33 | - Smart-Display-SDK 34 | - SwiftFormat 35 | - TeadsAdMobAdapter 36 | - TeadsAppLovinAdapter 37 | - TeadsSASAdapter 38 | - TeadsSDK 39 | 40 | SPEC CHECKSUMS: 41 | AppLovinSDK: 5ed9dbada0de5a80e4546116994470011ed01f53 42 | Google-Mobile-Ads-SDK: 6df9aadcee32bce0ff05bcad56ef2c88a4a5e82b 43 | GoogleUserMessagingPlatform: f8d0cdad3ca835406755d0a69aa634f00e76d576 44 | Smart-Display-SDK: e2c9c881236a0a9f0f6e99e2a2410ca74d9bb41a 45 | SwiftFormat: 46eb9be6acdde74fcaca9275af5ebddd412e3484 46 | TeadsAdMobAdapter: 6f1dbe5f94ddedf05521b90a85b93b91f5df1bfc 47 | TeadsAppLovinAdapter: 4f0938276a8a1fd87651072995cc8705cb143ea1 48 | TeadsSASAdapter: 5776247b330061ec940cc53d36221c6ea92491f0 49 | TeadsSDK: b4b36872a12f71771cf4883ad2c47902c1fddea1 50 | 51 | PODFILE CHECKSUM: 90ba34fb8d06e815de4fcb93225e749cd700095a 52 | 53 | COCOAPODS: 1.16.2 54 | -------------------------------------------------------------------------------- /ReadmeResources/OMCompliant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/ReadmeResources/OMCompliant.png -------------------------------------------------------------------------------- /ReadmeResources/apple-ic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/ReadmeResources/apple-ic.png -------------------------------------------------------------------------------- /ReadmeResources/teads_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/ReadmeResources/teads_logo.png -------------------------------------------------------------------------------- /TeadsAdMobAdapter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = 'TeadsAdMobAdapter' 4 | s.version = '5.3.0' 5 | s.summary = "AdMob Adapter for Teads' iOS SDK" 6 | s.module_name = 'TeadsAdMobAdapter' 7 | s.description = <<-DESC 8 | Use this adapter to include AdMob as a demand source in your mediation waterfall 9 | DESC 10 | s.homepage = 'https://github.com/teads/TeadsSDK-iOS' 11 | s.documentation_url = "https://support.teads.tv/support/solutions/articles/36000314767-inread-google-ad-manager-and-admob-mediation" 12 | s.license = { :type => 'Copyright', :text => 'Copyright Teads 2021' } 13 | s.authors = { 'Teads' => 'support-sdk@teads.tv'} 14 | 15 | s.source = { :git => 'https://github.com/teads/TeadsSDK-iOS.git', :tag => "#{s.version}" } 16 | s.platform = 'ios' 17 | s.ios.deployment_target = '12.0' 18 | s.static_framework = true 19 | s.requires_arc = true 20 | s.source_files = ['MediationAdapters/TeadsAdMobAdapter/**/*{.swift}', 'MediationAdapters/Common/*{.swift}'] 21 | s.exclude_files = ['MediationAdapters/TeadsAdMobAdapter/Exports.swift'] 22 | s.dependency 'TeadsSDK', s.version.to_s 23 | s.dependency 'Google-Mobile-Ads-SDK', '>= 12.2.0' 24 | 25 | s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } 26 | s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } 27 | end 28 | -------------------------------------------------------------------------------- /TeadsAppLovinAdapter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = 'TeadsAppLovinAdapter' 4 | s.version = '5.3.0' 5 | s.summary = "AppLovin MAX Adapter for Teads' iOS SDK" 6 | s.module_name = 'TeadsAppLovinAdapter' 7 | s.description = <<-DESC 8 | Use this adapter to include AppLovin as a demand source in your mediation waterfall 9 | DESC 10 | s.homepage = 'https://github.com/teads/TeadsSDK-iOS' 11 | s.documentation_url = "https://support.teads.tv/support/solutions/articles/36000357700-inread-applovin-mediation" 12 | s.license = { :type => 'Copyright', :text => 'Copyright Teads 2021' } 13 | s.authors = { 'Teads' => 'support-sdk@teads.tv'} 14 | 15 | s.source = { :git => 'https://github.com/teads/TeadsSDK-iOS.git', :tag => "#{s.version}" } 16 | s.platform = 'ios' 17 | s.ios.deployment_target = '12.0' 18 | s.static_framework = true 19 | s.requires_arc = true 20 | s.source_files = ['MediationAdapters/TeadsAppLovinAdapter/**/*{.swift}', 'MediationAdapters/Common/*{.swift}'] 21 | s.exclude_files = ['MediationAdapters/TeadsAppLovinAdapter/Exports.swift'] 22 | s.dependency 'TeadsSDK', s.version.to_s 23 | s.dependency 'AppLovinSDK', '>= 11.5.1' 24 | 25 | s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } 26 | s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } 27 | 28 | end 29 | -------------------------------------------------------------------------------- /TeadsSASAdapter.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = 'TeadsSASAdapter' 4 | s.version = '5.3.0' 5 | s.summary = "SAS Adapter for Teads' iOS SDK" 6 | s.module_name = 'TeadsSASAdapter' 7 | s.description = <<-DESC 8 | Use this adapter to include Teads as a demand source in your mediation waterfall 9 | DESC 10 | s.homepage = 'https://github.com/teads/TeadsSDK-iOS' 11 | s.documentation_url = 'https://support.teads.tv/support/solutions/articles/36000314771-smart-adserver-mediation' 12 | s.license = { :type => 'Copyright', :text => 'Copyright Teads 2021' } 13 | s.authors = { 'Teads' => 'support-sdk@teads.tv'} 14 | 15 | s.source = { :git => 'https://github.com/teads/TeadsSDK-iOS.git', :tag => "#{s.version}" } 16 | s.platform = 'ios' 17 | s.ios.deployment_target = '12.0' 18 | s.static_framework = true 19 | s.requires_arc = true 20 | s.source_files = [ 'MediationAdapters/TeadsSASAdapter/**/*{.swift}', 'MediationAdapters/Common/*{.swift}'] 21 | s.dependency 'TeadsSDK', s.version.to_s 22 | s.dependency 'Smart-Display-SDK', '>= 7.6.2' 23 | 24 | end 25 | -------------------------------------------------------------------------------- /TeadsSDK.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = "TeadsSDK" 4 | s.version = '5.3.0' 5 | s.summary = "Teads' iOS SDK" 6 | s.module_name = s.name 7 | s.description = <<-DESC 8 | Teads allows you to integrate a single SDK into your app, and serve premium branded ads from Teads' SSP. 9 | DESC 10 | s.documentation_url = "https://support.teads.tv/support/solutions/articles/36000314785" 11 | s.ios.deployment_target = "12.0" 12 | s.homepage = "https://github.com/teads/TeadsSDK-iOS" 13 | s.license = { :type => 'Copyright', :text => 'Copyright Teads 2021' } 14 | s.author = { "Teads" => "support-sdk@teads.tv" } 15 | s.source = { :git => 'https://github.com/teads/TeadsSDK-iOS.git', :tag => "#{s.version}" } 16 | s.requires_arc = true 17 | s.swift_versions = ['5.3'] 18 | s.frameworks = 'AdSupport', 'AVFoundation', 'CoreMedia', 'CoreTelephony', 'MediaPlayer', 'SystemConfiguration' 19 | s.default_subspec = 'Core' 20 | 21 | s.subspec 'Core' do |core| 22 | core.preserve_paths = "Frameworks/#{s.name}.xcframework", "Frameworks/OMSDK_Teadstv.xcframework" 23 | core.vendored_frameworks = "Frameworks/#{s.name}.xcframework", "Frameworks/OMSDK_Teadstv.xcframework" 24 | end 25 | 26 | end 27 | -------------------------------------------------------------------------------- /TeadsSampleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TeadsSampleApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TeadsSampleApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /TeadsSampleApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TeadsSampleApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TeadsSampleApp/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 28/09/2017. 6 | // Copyright © 2018 Teads. All rights reserved. 7 | // 8 | 9 | import TeadsSDK 10 | import UIKit 11 | 12 | @UIApplicationMain 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | var window: UIWindow? 15 | 16 | func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | Teads.configure() 18 | let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 19 | if !launchedBefore { 20 | let defaults = UserDefaults.standard 21 | defaults.set(84242, forKey: "PID") 22 | defaults.set(true, forKey: "launchedBefore") 23 | } 24 | return true 25 | } 26 | 27 | func applicationWillResignActive(_: UIApplication) { 28 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call 29 | // or SMS message) or when the user quits the application and it begins the transition to the background state. 30 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 31 | } 32 | 33 | func applicationDidEnterBackground(_: UIApplication) { 34 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 35 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 36 | } 37 | 38 | func applicationWillEnterForeground(_: UIApplication) { 39 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 40 | } 41 | 42 | func applicationDidBecomeActive(_: UIApplication) { 43 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 44 | } 45 | 46 | func applicationWillTerminate(_: UIApplication) { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.000", 27 | "green" : "0.000", 28 | "red" : "0.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/172.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/196.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/216.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/48.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/55.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/AppIcon.appiconset/88.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/AppTextColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.000", 9 | "green" : "0.000", 10 | "red" : "0.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "1.000", 28 | "red" : "1.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/CellBorderColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.702", 9 | "green" : "0.094", 10 | "red" : "0.031" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "1.000", 28 | "red" : "1.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/CollectionView.imageset/CollectionView100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/CollectionView.imageset/CollectionView100.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/CollectionView.imageset/CollectionView150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/CollectionView.imageset/CollectionView150.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/CollectionView.imageset/CollectionView50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/CollectionView.imageset/CollectionView50.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/CollectionView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "CollectionView50.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "CollectionView100.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "CollectionView150.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/FakeArticleColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.316", 8 | "blue" : "0.773", 9 | "green" : "0.773", 10 | "red" : "0.773" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini-2.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape-2.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape@2x-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape@2x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape@2x-2.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_landscape@2x.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_portrait@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_portrait@2x-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_portrait@2x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_portrait@2x-2.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/ipad2mini_portrait@2x.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone4-320x480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone4-320x480.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone4-640x960-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone4-640x960-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone4-640x960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone4-640x960.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone5-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone5.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone6+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone6+.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone6+_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone6+_landscape.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LaunchImage.launchimage/iphone6.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LightBlueColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.878", 9 | "green" : "0.663", 10 | "red" : "0.412" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LogoTeads-LaunchScreen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LogoTeads-SplashScreen.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/LogoTeads-LaunchScreen.imageset/LogoTeads-SplashScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/LogoTeads-LaunchScreen.imageset/LogoTeads-SplashScreen.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/PageView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "filename" : "PageView150.png", 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/PageView.imageset/PageView150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/PageView.imageset/PageView150.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/PrimaryColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.702", 9 | "green" : "0.094", 10 | "red" : "0.031" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/ScrollView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ScrollView50.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "ScrollView100.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "ScrollView150.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/ScrollView.imageset/ScrollView100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/ScrollView.imageset/ScrollView100.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/ScrollView.imageset/ScrollView150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/ScrollView.imageset/ScrollView150.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/ScrollView.imageset/ScrollView50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/ScrollView.imageset/ScrollView50.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TableView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "TableView50.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "TableView100.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "TableView150.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TableView.imageset/TableView100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/TableView.imageset/TableView100.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TableView.imageset/TableView150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/TableView.imageset/TableView150.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TableView.imageset/TableView50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/TableView.imageset/TableView50.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Teads-Sample-App-White.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Teads-Sample-App-white-1.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Teads-Sample-App-White.imageset/Teads-Sample-App-white-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/Teads-Sample-App-White.imageset/Teads-Sample-App-white-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Teads-Sample-App-black.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "light" 13 | } 14 | ], 15 | "filename" : "Teads-Sample-App-black-1.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "appearances" : [ 21 | { 22 | "appearance" : "luminosity", 23 | "value" : "dark" 24 | } 25 | ], 26 | "filename" : "Teads-Sample-App-white.png", 27 | "idiom" : "universal", 28 | "scale" : "1x" 29 | }, 30 | { 31 | "idiom" : "universal", 32 | "scale" : "2x" 33 | }, 34 | { 35 | "appearances" : [ 36 | { 37 | "appearance" : "luminosity", 38 | "value" : "light" 39 | } 40 | ], 41 | "idiom" : "universal", 42 | "scale" : "2x" 43 | }, 44 | { 45 | "appearances" : [ 46 | { 47 | "appearance" : "luminosity", 48 | "value" : "dark" 49 | } 50 | ], 51 | "idiom" : "universal", 52 | "scale" : "2x" 53 | }, 54 | { 55 | "idiom" : "universal", 56 | "scale" : "3x" 57 | }, 58 | { 59 | "appearances" : [ 60 | { 61 | "appearance" : "luminosity", 62 | "value" : "light" 63 | } 64 | ], 65 | "idiom" : "universal", 66 | "scale" : "3x" 67 | }, 68 | { 69 | "appearances" : [ 70 | { 71 | "appearance" : "luminosity", 72 | "value" : "dark" 73 | } 74 | ], 75 | "idiom" : "universal", 76 | "scale" : "3x" 77 | } 78 | ], 79 | "info" : { 80 | "author" : "xcode", 81 | "version" : 1 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Teads-Sample-App-black-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Teads-Sample-App-black-1.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Teads-Sample-App-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Teads-Sample-App-black.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Teads-Sample-App-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/Teads-Sample-App.imageset/Teads-Sample-App-white.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TeadsBlueColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.596", 9 | "green" : "0.341", 10 | "red" : "0.129" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TeadsGrayColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.816", 9 | "green" : "0.725", 10 | "red" : "0.655" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/TeadsPurpleColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.584", 9 | "green" : "0.255", 10 | "red" : "0.671" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/WebView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "WebView50.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "WebView100.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "WebView150.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/WebView.imageset/WebView100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/WebView.imageset/WebView100.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/WebView.imageset/WebView150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/WebView.imageset/WebView150.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/WebView.imageset/WebView50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/WebView.imageset/WebView50.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/coffeeDesk.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "coffeeDesk2.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/coffeeDesk.imageset/coffeeDesk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/coffeeDesk.imageset/coffeeDesk2.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/logoTeads.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "logoTeads copy.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "logoTeads@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "logoTeads@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/logoTeads.imageset/logoTeads copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/logoTeads.imageset/logoTeads copy.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/logoTeads.imageset/logoTeads@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/logoTeads.imageset/logoTeads@2x.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/logoTeads.imageset/logoTeads@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/logoTeads.imageset/logoTeads@3x.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/settings_white.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "settings_white.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "settings_white@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "settings_white@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/settings_white.imageset/settings_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/settings_white.imageset/settings_white.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/settings_white.imageset/settings_white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/settings_white.imageset/settings_white@2x.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/settings_white.imageset/settings_white@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/settings_white.imageset/settings_white@3x.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/social-covers.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "social-covers.jpg", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/social-covers.imageset/social-covers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/social-covers.imageset/social-covers.jpg -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/teads-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "teads-logo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "teads-logo-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "appearances" : [ 25 | { 26 | "appearance" : "luminosity", 27 | "value" : "dark" 28 | } 29 | ], 30 | "idiom" : "universal", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "universal", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "appearances" : [ 39 | { 40 | "appearance" : "luminosity", 41 | "value" : "dark" 42 | } 43 | ], 44 | "idiom" : "universal", 45 | "scale" : "3x" 46 | } 47 | ], 48 | "info" : { 49 | "author" : "xcode", 50 | "version" : 1 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/teads-logo.imageset/teads-logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/teads-logo.imageset/teads-logo-dark.png -------------------------------------------------------------------------------- /TeadsSampleApp/Assets.xcassets/teads-logo.imageset/teads-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Assets.xcassets/teads-logo.imageset/teads-logo.png -------------------------------------------------------------------------------- /TeadsSampleApp/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /TeadsSampleApp/Cells/AdmobNativeAdTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AdmobNativeAdTableViewCell.swift 3 | // TeadsSDKIntegrationTestsApp 4 | // 5 | // Created by Jérémy Grosjean on 16/06/2021. 6 | // 7 | 8 | import GoogleMobileAds 9 | import UIKit 10 | 11 | class AdmobNativeAdTableViewCell: UITableViewCell { 12 | @IBOutlet var nativeAdView: NativeAdView! 13 | } 14 | -------------------------------------------------------------------------------- /TeadsSampleApp/Cells/FakeArticleNativeTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FakeArticleNativeTableViewCell.swift 3 | // TeadsSDKIntegrationTestsApp 4 | // 5 | // Created by Thibaud Saint-Etienne on 02/12/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | @objc protocol FakeNativeCell { 11 | var mediaView: UIImageView! { get } 12 | var iconImageView: UIImageView! { get } 13 | var titleLabel: UILabel! { get } 14 | var contentLabel: UILabel! { get } 15 | var callToActionButton: UIButton! { get } 16 | func openTeadsWebsite() 17 | } 18 | 19 | extension FakeNativeCell { 20 | func setMockValues() { 21 | mediaView.image = UIImage(named: "social-covers") 22 | iconImageView.image = UIImage(named: "teads-logo") 23 | titleLabel.text = "Teads" 24 | contentLabel.text = "The global media platform" 25 | callToActionButton.setTitle("Discover", for: .normal) 26 | callToActionButton.addTarget(self, action: #selector(openTeadsWebsite), for: .touchUpInside) 27 | } 28 | } 29 | 30 | class FakeArticleNativeTableViewCell: UITableViewCell, FakeNativeCell { 31 | @IBOutlet var mediaView: UIImageView! 32 | @IBOutlet var iconImageView: UIImageView! 33 | @IBOutlet var titleLabel: UILabel! 34 | @IBOutlet var contentLabel: UILabel! 35 | @IBOutlet var callToActionButton: UIButton! 36 | 37 | @objc func openTeadsWebsite() { 38 | if let url = URL(string: "https://teads.com") { 39 | UIApplication.shared.open(url) 40 | } 41 | } 42 | } 43 | 44 | class FakeArticleNativeCollectionViewCell: UICollectionViewCell, FakeNativeCell { 45 | @IBOutlet var mediaView: UIImageView! 46 | @IBOutlet var iconImageView: UIImageView! 47 | @IBOutlet var titleLabel: UILabel! 48 | @IBOutlet var contentLabel: UILabel! 49 | @IBOutlet var callToActionButton: UIButton! 50 | 51 | @objc func openTeadsWebsite() { 52 | if let url = URL(string: "https://teads.com") { 53 | UIApplication.shared.open(url) 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /TeadsSampleApp/Cells/NativeAdCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NativeAdCollectionViewCell.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul Nicolas on 01/08/2021. 6 | // Copyright © 2021 Teads. All rights reserved. 7 | // 8 | 9 | import TeadsSDK 10 | import UIKit 11 | 12 | class NativeAdCollectionViewCell: UICollectionViewCell { 13 | @IBOutlet var adView: TeadsNativeAdView! 14 | } 15 | -------------------------------------------------------------------------------- /TeadsSampleApp/Cells/NativeAdTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NativeAdTableViewCell.swift 3 | // TeadsSDKIntegrationTestsApp 4 | // 5 | // Created by Thibaud Saint-Etienne on 02/12/2020. 6 | // 7 | 8 | import TeadsSDK 9 | import UIKit 10 | 11 | class NativeAdTableViewCell: UITableViewCell { 12 | @IBOutlet var adView: TeadsNativeAdView! 13 | } 14 | -------------------------------------------------------------------------------- /TeadsSampleApp/Cells/NativeTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NativeTableViewCell.swift 3 | // TeadsSDKIntegrationTestsApp 4 | // 5 | // Created by Jérémy Grosjean on 24/06/2021. 6 | // 7 | 8 | import UIKit 9 | 10 | class NativeTableViewCell: UITableViewCell { 11 | @IBOutlet var nativeAdView: UIView! 12 | } 13 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/AppLovin/AppLovinViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppLovinViewController.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Vincent Saluzzo on 15/03/2022. 6 | // Copyright © 2022 Teads. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class AppLovinViewController: TeadsViewController { 12 | var isMREC = false 13 | } 14 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/Direct/CollectionView/AdOpportunityTrackerCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AdOpportunityTrackerCollectionViewCell.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul Nicolas on 17/01/2022. 6 | // Copyright © 2022 Teads. All rights reserved. 7 | // 8 | 9 | import TeadsSDK 10 | import UIKit 11 | 12 | /// Implement this cell to track slot 13 | class AdOpportunityTrackerCollectionViewCell: UICollectionViewCell { 14 | static let identifier = "AdOpportunityTrackerCollectionViewCellIdentifier" 15 | func setTrackerView(_ trackerView: TeadsAdOpportunityTrackerView) { 16 | contentView.addSubview(trackerView) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/Direct/PageView/InReadDirectPageViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InReadDirectPageViewController.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul NICOLAS on 29/05/2023. 6 | // Copyright © 2023 Teads. All rights reserved. 7 | // 8 | 9 | import TeadsSDK 10 | import UIKit 11 | 12 | class InReadDirectPageViewController: TeadsViewController { 13 | @IBOutlet var teadsAdView: TeadsInReadAdView! 14 | @IBOutlet var teadsAdHeightConstraint: NSLayoutConstraint! 15 | @IBOutlet private var articleLabel: UILabel! 16 | var articleLabelText: String? 17 | weak var placement: TeadsInReadAdPlacement? // strong reference is maintained by InReadPageViewController 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | articleLabel.text = articleLabelText 22 | loadAd() 23 | } 24 | 25 | override func viewDidDisappear(_ animated: Bool) { 26 | super.viewDidDisappear(animated) 27 | } 28 | 29 | func loadAd() { 30 | placement?.requestAd(requestSettings: TeadsAdRequestSettings { settings in 31 | settings.pageUrl("https://www.teads.com") 32 | }) 33 | } 34 | 35 | func resizeTeadsAd(adRatio: TeadsAdRatio) { 36 | let computedHeight = adRatio.calculateHeight(for: teadsAdView.frame.size.width) 37 | teadsAdHeightConstraint.constant = computedHeight 38 | } 39 | 40 | func closeAd() { 41 | teadsAdHeightConstraint.constant = 0 42 | } 43 | } 44 | 45 | extension InReadDirectPageViewController: TeadsAdDelegate { 46 | func willPresentModalView(ad _: TeadsAd) -> UIViewController? { 47 | self 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/Direct/PageView/InReadPageViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InReadPageViewController.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul NICOLAS on 29/05/2023. 6 | // Copyright © 2023 Teads. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import TeadsSDK 11 | import UIKit 12 | 13 | class InReadPageViewController: UIPageViewController { 14 | var pid: String = PID.directLandscape 15 | var orderedViewControllers: [UIViewController] = [] 16 | var currentViewControlelr: UIViewController? 17 | 18 | // keep a strong reference to placement instance 19 | var placement: TeadsInReadAdPlacement? 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | dataSource = self 24 | 25 | loadPlacement() 26 | 27 | for index in 0 ..< 20 { 28 | if let viewController = storyboard?.instantiateViewController(withIdentifier: "page-view-controller") as? InReadDirectPageViewController { 29 | viewController.placement = placement 30 | viewController.articleLabelText = "ARTICLE \(index + 1) of 20" 31 | orderedViewControllers.append(viewController) 32 | } 33 | } 34 | currentViewControlelr = orderedViewControllers.first 35 | setViewControllers([currentViewControlelr!], direction: .forward, animated: true) 36 | } 37 | 38 | func loadPlacement() { 39 | let placementSettings = TeadsAdPlacementSettings { settings in 40 | settings.enableDebug() 41 | } 42 | placement = Teads.createInReadPlacement(pid: Int(pid) ?? 0, settings: placementSettings, delegate: self) 43 | } 44 | } 45 | 46 | extension InReadPageViewController: UIPageViewControllerDataSource { 47 | func pageViewController(_: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 48 | if let currentIndex = orderedViewControllers.firstIndex(of: viewController), 49 | currentIndex > 0 { 50 | currentViewControlelr = orderedViewControllers[currentIndex - 1] 51 | return currentViewControlelr 52 | } 53 | return nil 54 | } 55 | 56 | func pageViewController(_: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 57 | if let currentIndex = orderedViewControllers.firstIndex(of: viewController), 58 | currentIndex < orderedViewControllers.count - 1 { 59 | currentViewControlelr = orderedViewControllers[currentIndex + 1] 60 | return currentViewControlelr 61 | } 62 | return nil 63 | } 64 | } 65 | 66 | extension InReadPageViewController: TeadsInReadAdPlacementDelegate { 67 | func didReceiveAd(ad: TeadsInReadAd, adRatio: TeadsAdRatio) { 68 | guard let currentViewController = currentViewControlelr as? InReadDirectPageViewController else { 69 | return 70 | } 71 | 72 | ad.delegate = currentViewController 73 | currentViewController.resizeTeadsAd(adRatio: adRatio) 74 | currentViewController.teadsAdView.bind(ad) 75 | } 76 | 77 | func didUpdateRatio(ad _: TeadsInReadAd, adRatio: TeadsAdRatio) { 78 | guard let currentViewController = currentViewControlelr as? InReadDirectPageViewController else { 79 | return 80 | } 81 | currentViewController.resizeTeadsAd(adRatio: adRatio) 82 | } 83 | 84 | func didFailToReceiveAd(reason _: AdFailReason) { 85 | print(#function) 86 | } 87 | 88 | func adOpportunityTrackerView(trackerView _: TeadsAdOpportunityTrackerView) { 89 | print(#function) 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/Direct/ScrollView/InReadDirectScrollViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InReadDirectScrollViewController.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 28/09/2017. 6 | // Copyright © 2018 Teads. All rights reserved. 7 | // 8 | 9 | import TeadsSDK 10 | import UIKit 11 | 12 | class InReadDirectScrollViewController: TeadsViewController { 13 | @IBOutlet var scrollDownImageView: TeadsGradientImageView! 14 | @IBOutlet var teadsAdView: TeadsInReadAdView! 15 | @IBOutlet var teadsAdHeightConstraint: NSLayoutConstraint! 16 | var adRatio: TeadsAdRatio? 17 | var placement: TeadsInReadAdPlacement? 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | let pSettings = TeadsAdPlacementSettings { settings in 22 | settings.enableDebug() 23 | } 24 | 25 | // keep a strong reference to placement instance 26 | placement = Teads.createInReadPlacement(pid: Int(pid) ?? 0, settings: pSettings, delegate: self) 27 | placement?.requestAd(requestSettings: TeadsAdRequestSettings { settings in 28 | settings.pageUrl("https://www.teads.com") 29 | }) 30 | // We use an observer to know when a rotation happened, to resize the ad 31 | // You can use whatever way you want to do so 32 | NotificationCenter.default.addObserver(self, selector: #selector(rotationDetected), name: UIDevice.orientationDidChangeNotification, object: nil) 33 | } 34 | 35 | deinit { 36 | NotificationCenter.default.removeObserver(self) 37 | } 38 | 39 | @objc func rotationDetected() { 40 | if let adRatio = adRatio { 41 | resizeTeadsAd(adRatio: adRatio) 42 | } 43 | } 44 | 45 | func resizeTeadsAd(adRatio: TeadsAdRatio) { 46 | self.adRatio = adRatio 47 | teadsAdHeightConstraint.constant = adRatio.calculateHeight(for: teadsAdView.frame.width) 48 | } 49 | 50 | func closeAd() { 51 | // be careful if you want to load another ad in the same page don't remove the observer 52 | NotificationCenter.default.removeObserver(self) 53 | teadsAdHeightConstraint.constant = 0 54 | } 55 | } 56 | 57 | extension InReadDirectScrollViewController: TeadsInReadAdPlacementDelegate { 58 | func adOpportunityTrackerView(trackerView: TeadsAdOpportunityTrackerView) { 59 | teadsAdView.addSubview(trackerView) 60 | } 61 | 62 | func didReceiveAd(ad: TeadsInReadAd, adRatio: TeadsAdRatio) { 63 | teadsAdView.bind(ad) 64 | ad.delegate = self 65 | resizeTeadsAd(adRatio: adRatio) 66 | } 67 | 68 | func didFailToReceiveAd(reason _: AdFailReason) { 69 | closeAd() 70 | } 71 | 72 | func didUpdateRatio(ad _: TeadsInReadAd, adRatio: TeadsAdRatio) { 73 | resizeTeadsAd(adRatio: adRatio) 74 | } 75 | } 76 | 77 | extension InReadDirectScrollViewController: TeadsAdDelegate { 78 | func willPresentModalView(ad _: TeadsAd) -> UIViewController? { 79 | return self 80 | } 81 | 82 | func didCatchError(ad _: TeadsAd, error _: Error) { 83 | closeAd() 84 | } 85 | 86 | func didClose(ad _: TeadsAd) { 87 | closeAd() 88 | } 89 | 90 | func didRecordImpression(ad _: TeadsAd) {} 91 | 92 | func didRecordClick(ad _: TeadsAd) {} 93 | 94 | func didExpandedToFullscreen(ad _: TeadsAd) {} 95 | 96 | func didCollapsedFromFullscreen(ad _: TeadsAd) {} 97 | } 98 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/Direct/TableView/AdOpportunityTrackerTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AdOpportunityTrackerTableViewCell.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul Nicolas on 17/01/2022. 6 | // Copyright © 2022 Teads. All rights reserved. 7 | // 8 | 9 | import TeadsSDK 10 | import UIKit 11 | 12 | /// Implement this cell to track slot 13 | class AdOpportunityTrackerTableViewCell: UITableViewCell { 14 | static let identifier = "AdOpportunityTrackerTableViewCellIndentifier" 15 | func setTrackerView(_ trackerView: TeadsAdOpportunityTrackerView) { 16 | contentView.addSubview(trackerView) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/InRead/SAS/ScrollView/InReadSASScrollViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InReadSASScrollViewController.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 18/11/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import SASDisplayKit 10 | import TeadsSASAdapter 11 | import TeadsSDK 12 | import UIKit 13 | 14 | class InReadSASScrollViewController: TeadsViewController { 15 | @IBOutlet var slotView: UIView! 16 | 17 | @IBOutlet var adViewHeightConstraint: NSLayoutConstraint! 18 | 19 | var banner: SASBannerView? 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | banner = SASBannerView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 200), loader: .activityIndicatorStyleWhite) 24 | banner?.modalParentViewController = self 25 | let teadsAdSettings = TeadsAdapterSettings { settings in 26 | settings.enableDebug() 27 | settings.pageUrl("https://teads.tv") 28 | try? settings.registerAdView(banner!, delegate: self) 29 | } 30 | 31 | let webSiteId = 385_317 32 | let pageId = 1_399_206 33 | let formatId = Int(pid) ?? 96445 34 | var keywordsTargetting = "yourkw=something" 35 | keywordsTargetting = TeadsSASAdapterHelper.concatAdSettingsToKeywords(keywordsStrings: keywordsTargetting, adSettings: teadsAdSettings) 36 | 37 | // Create a placement 38 | let adPlacement = SASAdPlacement(siteId: webSiteId, pageId: pageId, formatId: formatId, keywordTargeting: keywordsTargetting) 39 | 40 | banner?.load(with: adPlacement) 41 | slotView.addSubview(banner!) 42 | addConstraintsToAdView(toView: slotView) 43 | } 44 | 45 | func addConstraintsToAdView(toView slotView: UIView) { 46 | guard let adView = banner else { 47 | return 48 | } 49 | slotView.addSubview(adView) 50 | adView.translatesAutoresizingMaskIntoConstraints = false 51 | let margins = slotView.layoutMarginsGuide 52 | adView.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 0).isActive = true 53 | adView.topAnchor.constraint(equalTo: margins.topAnchor, constant: 0).isActive = true 54 | adView.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: 0).isActive = true 55 | adView.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: 0).isActive = true 56 | } 57 | } 58 | 59 | extension InReadSASScrollViewController: TeadsMediatedAdViewDelegate { 60 | func didUpdateRatio(_: UIView, adRatio: TeadsAdRatio) { 61 | adViewHeightConstraint.constant = adRatio.calculateHeight(for: slotView.bounds.width) 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/Native/AppLovin/TableView/AppLovinNativeAdView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppLovinNativeAdView.swift 3 | // TeadsSDKIntegrationTestsApp 4 | // 5 | // Created by Paul Nicolas on 15/02/2022. 6 | // 7 | 8 | import AppLovinSDK 9 | import UIKit 10 | 11 | /** 12 | Provides a common native ad view. 13 | */ 14 | @IBDesignable 15 | class AppLovinNativeAdView: MANativeAdView {} 16 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/Native/SAS/TableView/SmartNativeAdTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SmartNativeAdTableViewCell.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul NICOLAS on 13/03/2023. 6 | // Copyright © 2023 Teads. All rights reserved. 7 | // 8 | 9 | import SASDisplayKit 10 | import UIKit 11 | 12 | class SmartNativeAdTableViewCell: UITableViewCell { 13 | @IBOutlet public var titleLabel: UILabel? 14 | @IBOutlet public var contentLabel: UILabel? 15 | @IBOutlet public var mediaView: UIView! 16 | @IBOutlet public var iconImageView: UIImageView? 17 | @IBOutlet public var advertiserLabel: UILabel? 18 | @IBOutlet public var callToActionButton: UIButton? 19 | @IBOutlet public var ratingView: UIView? 20 | @IBOutlet public var priceLabel: UILabel? 21 | } 22 | 23 | extension SmartNativeAdTableViewCell { 24 | func bind(sasNativeAd: SASNativeAd) { 25 | titleLabel?.text = sasNativeAd.title 26 | contentLabel?.text = sasNativeAd.subtitle 27 | 28 | if sasNativeAd.hasMedia { 29 | let sasMediaView = SASNativeAdMediaView() 30 | sasMediaView.frame = mediaView.bounds 31 | sasMediaView.registerNativeAd(sasNativeAd) 32 | mediaView.addSubview(sasMediaView) 33 | } else { 34 | sasNativeAd.coverImage?.load { image in 35 | let imageView = UIImageView(image: image) 36 | imageView.frame = self.mediaView.bounds 37 | imageView.contentMode = .scaleAspectFill 38 | self.mediaView?.addSubview(imageView) 39 | } 40 | } 41 | 42 | sasNativeAd.icon?.load { image in 43 | self.iconImageView?.image = image 44 | self.iconImageView?.contentMode = .scaleAspectFill 45 | } 46 | 47 | advertiserLabel?.text = sasNativeAd.sponsored 48 | callToActionButton?.setTitle(sasNativeAd.callToAction, for: .normal) 49 | priceLabel?.text = sasNativeAd.price 50 | } 51 | } 52 | 53 | extension SASNativeAdImage { 54 | func load(success: @escaping (UIImage) -> Void) { 55 | let defaultSession = URLSession(configuration: URLSessionConfiguration.default) 56 | let dataTask = defaultSession.dataTask(with: url) { data, _, _ in 57 | if let data = data, let image = UIImage(data: data) { 58 | DispatchQueue.main.async { 59 | success(image) 60 | } 61 | } 62 | } 63 | dataTask.resume() 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/RootController/RootControllerCells/RootButtonCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RootButtonCollectionViewCell.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Thibaud Saint-Etienne on 16/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RootButtonCollectionViewCell: UICollectionViewCell { 12 | @IBOutlet var label: UILabel! 13 | 14 | override func awakeFromNib() { 15 | super.awakeFromNib() 16 | 17 | layer.cornerRadius = 12 18 | layer.borderWidth = 1 19 | } 20 | 21 | var isButtonSelected = false { 22 | didSet { 23 | if isButtonSelected { 24 | label.backgroundColor = .primary 25 | label.textColor = .white 26 | layer.borderColor = UIColor.primary.cgColor 27 | } else { 28 | label.backgroundColor = .appBackground 29 | label.textColor = .cellBorder 30 | layer.borderColor = UIColor.cellBorder.cgColor 31 | } 32 | } 33 | } 34 | 35 | override var isHighlighted: Bool { 36 | didSet { 37 | UIView.animate(withDuration: 0.1) { 38 | if self.isHighlighted, !self.isSelected { 39 | self.alpha = 0.5 40 | } else { 41 | self.alpha = 1 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/RootController/RootControllerCells/RootHeaderCollectionReusableView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RootHeaderCollectionReusableView.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Thibaud Saint-Etienne on 16/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RootHeaderCollectionReusableView: UICollectionReusableView { 12 | @IBOutlet var label: UILabel! 13 | } 14 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/RootController/RootControllerCells/RootImageViewLabelCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RootImageViewLabelCollectionViewCell.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Thibaud Saint-Etienne on 16/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RootImageViewLabelCollectionViewCell: UICollectionViewCell { 12 | @IBOutlet var imageView: UIImageView! 13 | @IBOutlet var label: UILabel! 14 | 15 | override func awakeFromNib() { 16 | super.awakeFromNib() 17 | 18 | layer.cornerRadius = 12 19 | layer.borderWidth = 1 20 | layer.borderColor = UIColor.teadsGray.cgColor 21 | 22 | label.textColor = .teadsGray 23 | } 24 | 25 | override var isHighlighted: Bool { 26 | didSet { 27 | UIView.animate(withDuration: 0.1) { 28 | if self.isHighlighted { 29 | self.alpha = 0.5 30 | } else { 31 | self.alpha = 1 32 | } 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /TeadsSampleApp/Controllers/TeadsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsViewController.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 07/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TeadsViewController: UIViewController { 12 | var hasTeadsArticleNavigationBar = true 13 | var pid: String = PID.directLandscape 14 | fileprivate let teadsLogo = UIImage(named: "Teads-Sample-App") 15 | fileprivate let teadsLogoWhite = UIImage(named: "Teads-Sample-App-White") 16 | 17 | override func viewWillAppear(_ animated: Bool) { 18 | super.viewWillAppear(animated) 19 | 20 | hasTeadsArticleNavigationBar ? applyTeadsArticleNavigationBar() : applyDefaultNavigationBar() 21 | } 22 | 23 | override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { 24 | super.traitCollectionDidChange(previousTraitCollection) 25 | 26 | hasTeadsArticleNavigationBar ? applyTeadsArticleNavigationBar() : applyDefaultNavigationBar() 27 | } 28 | 29 | fileprivate func imageFromLayer(layer: CALayer) -> UIImage? { 30 | UIGraphicsBeginImageContext(layer.frame.size) 31 | 32 | layer.render(in: UIGraphicsGetCurrentContext()!) 33 | let outputImage = UIGraphicsGetImageFromCurrentImageContext() 34 | 35 | UIGraphicsEndImageContext() 36 | 37 | return outputImage 38 | } 39 | 40 | fileprivate func applyTeadsArticleNavigationBar() { 41 | guard let navigationBar = navigationController?.navigationBar else { 42 | return 43 | } 44 | let gradientLayer = CAGradientLayer() 45 | gradientLayer.frame = navigationBar.bounds 46 | gradientLayer.colors = [UIColor.teadsPurple.cgColor, UIColor.teadsBlue.cgColor] 47 | gradientLayer.startPoint = CGPoint(x: 0, y: 1) 48 | gradientLayer.endPoint = CGPoint(x: 1, y: 1) 49 | let backgroundImage = imageFromLayer(layer: gradientLayer) 50 | navigationBar.setBackgroundImage(backgroundImage, for: .default) 51 | 52 | let imageView = UIImageView(image: teadsLogoWhite) 53 | imageView.contentMode = .scaleAspectFit 54 | imageView.translatesAutoresizingMaskIntoConstraints = false 55 | imageView.heightAnchor.constraint(equalToConstant: 30).isActive = true 56 | imageView.widthAnchor.constraint(equalToConstant: 200).isActive = true 57 | navigationItem.titleView = imageView 58 | 59 | navigationBar.tintColor = .white 60 | 61 | if #available(iOS 15, *) { 62 | navigationBar.barStyle = .black 63 | 64 | let appearance = navigationBar.standardAppearance 65 | appearance.backgroundImage = backgroundImage 66 | navigationBar.standardAppearance = appearance 67 | navigationBar.scrollEdgeAppearance = appearance 68 | navigationBar.compactAppearance = appearance 69 | } 70 | } 71 | 72 | fileprivate func applyDefaultNavigationBar() { 73 | guard let navigationBar = navigationController?.navigationBar else { 74 | return 75 | } 76 | navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 77 | navigationBar.shadowImage = UIImage() 78 | let imageView = UIImageView(image: teadsLogo) 79 | imageView.contentMode = .scaleAspectFit 80 | imageView.translatesAutoresizingMaskIntoConstraints = false 81 | imageView.heightAnchor.constraint(equalToConstant: 30).isActive = true 82 | navigationItem.titleView = imageView 83 | if #available(iOS 15, *) { 84 | let appearance = navigationBar.standardAppearance 85 | appearance.backgroundImage = UIImage() 86 | appearance.shadowImage = UIImage() 87 | navigationBar.standardAppearance = appearance 88 | navigationBar.scrollEdgeAppearance = appearance 89 | navigationBar.compactAppearance = appearance 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /TeadsSampleApp/Extensions/ColorExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ColorExtension.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Thibaud Saint-Etienne on 06/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension UIColor { 13 | static let appText = UIColor(named: "AppTextColor") ?? UIColor.clear 14 | static let appBackground = UIColor(named: "AppBackgroundColor") ?? UIColor.clear 15 | static let primary = UIColor(named: "PrimaryColor") ?? UIColor.clear 16 | static let lightBlue = UIColor(named: "LightBlueColor") ?? UIColor.clear 17 | static let teadsBlue = UIColor(named: "TeadsBlueColor") ?? UIColor.clear 18 | static let teadsPurple = UIColor(named: "TeadsPurpleColor") ?? UIColor.clear 19 | static let teadsGray = UIColor(named: "TeadsGrayColor") ?? UIColor.clear 20 | static let fakeArticle = UIColor(named: "FakeArticleColor") ?? UIColor.clear 21 | static let cellBorder = UIColor(named: "CellBorderColor") ?? UIColor.clear 22 | 23 | func getRedValue() -> CGFloat { 24 | var red: CGFloat = 0 25 | var green: CGFloat = 0 26 | var blue: CGFloat = 0 27 | var alpha: CGFloat = 0 28 | getRed(&red, green: &green, blue: &blue, alpha: &alpha) 29 | return red 30 | } 31 | 32 | func getBlueValue() -> CGFloat { 33 | var red: CGFloat = 0 34 | var green: CGFloat = 0 35 | var blue: CGFloat = 0 36 | var alpha: CGFloat = 0 37 | getRed(&red, green: &green, blue: &blue, alpha: &alpha) 38 | return blue 39 | } 40 | 41 | func getGreenValue() -> CGFloat { 42 | var red: CGFloat = 0 43 | var green: CGFloat = 0 44 | var blue: CGFloat = 0 45 | var alpha: CGFloat = 0 46 | getRed(&red, green: &green, blue: &blue, alpha: &alpha) 47 | return green 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /TeadsSampleApp/Extensions/String.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 07/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func htmlAttributedString() -> NSAttributedString? { 13 | guard let data = data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil } 14 | guard let html = try? NSMutableAttributedString( 15 | data: data, 16 | options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html], 17 | documentAttributes: nil 18 | ) else { return nil } 19 | return html 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TeadsSampleApp/Extensions/UIView-extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView-extension.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Paul Nicolas on 18/03/2022. 6 | // Copyright © 2022 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIView { 12 | static func loadNib(nibName name: String? = nil) -> Self? { 13 | let nibName = name ?? String(describing: Self.self) 14 | let bundle = Bundle(for: Self.self) 15 | let nib = UINib(nibName: nibName, bundle: bundle) 16 | return nib.instantiate(withOwner: self, options: nil).first as? Self 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /TeadsSampleApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | GADApplicationIdentifier 22 | ca-app-pub-3940256099942544~1458002511 23 | GADIsAdManagerApp 24 | 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | 32 | NSUserTrackingUsageDescription 33 | App would like to access IDFA for tracking purpose 34 | UILaunchStoryboardName 35 | LaunchScreen 36 | UIMainStoryboardFile 37 | Main 38 | UIRequiredDeviceCapabilities 39 | 40 | armv7 41 | 42 | UISupportedInterfaceOrientations 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | UISupportedInterfaceOrientations~ipad 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationPortraitUpsideDown 52 | UIInterfaceOrientationLandscapeLeft 53 | UIInterfaceOrientationLandscapeRight 54 | 55 | AppLovinSdkKey 56 | CtFFIaXEO53aF-hpTnlPDqBiNLXG8e3mPMDLktuvKwHluzobrLE83BvsVhNrTeSeKPJx2Kg98mOuX_N6b5J_8b 57 | 58 | 59 | -------------------------------------------------------------------------------- /TeadsSampleApp/Ressources/SampleWebsite/coffeeDesk2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/Ressources/SampleWebsite/coffeeDesk2.png -------------------------------------------------------------------------------- /TeadsSampleApp/Views/FakeArticleView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FakeArticleView.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 07/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FakeArticleView: UIView { 12 | // Only override draw() if you perform custom drawing. 13 | // An empty implementation adversely affects performance during animation. 14 | override func draw(_: CGRect) { 15 | let height = frame.height 16 | var fakeLineY: CGFloat = 10.0 17 | let spaceBetweenLine: CGFloat = 20 18 | while height > fakeLineY { 19 | let color = UIColor.clear 20 | let drect = CGRect(x: 5, y: fakeLineY, width: frame.width - 10, height: 10) 21 | let bpath = UIBezierPath(roundedRect: drect, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: 10, height: 10)) 22 | UIColor.fakeArticle.setFill() 23 | bpath.fill() 24 | color.set() 25 | bpath.stroke() 26 | fakeLineY += spaceBetweenLine 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /TeadsSampleApp/Views/TeadsGradientImageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsGradientImageView.swift 3 | // TeadsSampleApp 4 | // 5 | // Created by Jérémy Grosjean on 08/10/2020. 6 | // Copyright © 2020 Teads. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @IBDesignable class TeadsGradientImageView: UIImageView { 12 | private lazy var gradientLayer: CAGradientLayer = { 13 | let gradientLayer = CAGradientLayer() 14 | if #available(iOS 13.0, *) { 15 | gradientLayer.colors = [CGColor(red: UIColor.teadsPurple.getRedValue(), green: UIColor.teadsPurple.getGreenValue(), blue: UIColor.teadsPurple.getBlueValue(), alpha: 0.65), CGColor(red: UIColor.teadsBlue.getRedValue(), green: UIColor.teadsBlue.getGreenValue(), blue: UIColor.teadsBlue.getBlueValue(), alpha: 0.65)] 16 | } 17 | gradientLayer.startPoint = CGPoint(x: 0, y: 1) 18 | gradientLayer.endPoint = CGPoint(x: 1, y: 1) 19 | return gradientLayer 20 | }() 21 | 22 | override init(frame: CGRect) { 23 | super.init(frame: frame) 24 | addGradient() 25 | } 26 | 27 | required init?(coder: NSCoder) { 28 | super.init(coder: coder) 29 | addGradient() 30 | } 31 | 32 | override func layoutSubviews() { 33 | addGradient() 34 | } 35 | 36 | func addGradient() { 37 | gradientLayer.frame = bounds 38 | if !(layer.sublayers?.contains(gradientLayer) ?? false) { 39 | layer.addSublayer(gradientLayer) 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /TeadsSampleApp/WebViewHelper/README.md: -------------------------------------------------------------------------------- 1 | # TeadsWebViewHelper 2 | 3 | > **⚠️ Important ⚠️** 4 | > 5 | >This helper has been provided to give you a hand in your integration webview. 6 | > It's not designed to work on every integration, it may need to be customized to suit your needs 7 | 8 | This helper is designed to fill the HTML slot embedded in **your** `WKWebView` 9 | 10 | The Teads Webview Helper adds a JavaScript logic (called bootstrap) into the Webview: 11 | 12 | ## Initial configuration 13 | The HTML element is set into your web content loaded into your webview 14 | ![Configuration](./README_WebView_configuration.png) 15 | 16 | ## When an ad is received 17 | 1. The bootstrap **expands** the `teads-slot` HTML div to the ad height 18 | 2. The `TeadsAdView` is **injected** into `WKWebView.UIScrollView.content` at the `teads-slot` HTML exact position: assuring scroll fluidity 19 | 3. The bootstrap **synchronizes** the `teads-slot` vertical position with the Swift `TeadsAdView` 20 | ![Hierarchy](./README_WebView_hierarchy.png) 21 | 22 | ## When an ad is closed 23 | - The bootstrap **collapses** `teads-slot` height to zero 24 | - The `TeadsAdView` is **removed** from `WKWebView` 25 | 26 | ## When an ad fails to load 27 | - `teads-slot` size remains zero 28 | 29 | ## When the HTML element position is updated 30 | - The `TeadsAdView` position is **updated** accordingly 31 | -------------------------------------------------------------------------------- /TeadsSampleApp/WebViewHelper/README_WebView_configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/WebViewHelper/README_WebView_configuration.png -------------------------------------------------------------------------------- /TeadsSampleApp/WebViewHelper/README_WebView_hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teads/TeadsSDK-iOS/b778e108adfa71c4647b7ae1241811db78307435/TeadsSampleApp/WebViewHelper/README_WebView_hierarchy.png -------------------------------------------------------------------------------- /TeadsSampleAppTests/TeadsSampleAppTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsSampleAppTests.swift 3 | // TeadsSampleAppTests 4 | // 5 | // Created by Antoine Barrault on 03/03/2022. 6 | // Copyright © 2022 Teads. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class TeadsSampleAppTests: XCTestCase { 12 | override func setUpWithError() throws { 13 | // Put setup code here. This method is called before the invocation of each test method in the class. 14 | } 15 | 16 | override func tearDownWithError() throws { 17 | // Put teardown code here. This method is called after the invocation of each test method in the class. 18 | } 19 | 20 | func testExample() throws { 21 | // This is an example of a functional test case. 22 | // Use XCTAssert and related functions to verify your tests produce the correct results. 23 | // Any test you write for XCTest can be annotated as throws and async. 24 | // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. 25 | // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. 26 | } 27 | 28 | func testPerformanceExample() throws { 29 | // This is an example of a performance test case. 30 | measure { 31 | // Put the code you want to measure the time of here. 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /TeadsSampleAppUITests/TeadsSampleAppUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeadsSampleAppUITests.swift 3 | // TeadsSampleAppUITests 4 | // 5 | // Created by Antoine Barrault on 14/01/2022. 6 | // Copyright © 2022 Teads. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class TeadsSampleAppUITests: XCTestCase { 12 | private let mediaViewIdentifier = "teads-mediaView" 13 | 14 | override func setUpWithError() throws { 15 | continueAfterFailure = false 16 | } 17 | 18 | func testInReadIntegrationInScrollView() throws { 19 | let app = XCUIApplication() 20 | app.launch() 21 | let collectionViewsQuery = app.collectionViews 22 | collectionViewsQuery.otherElements.containing(.staticText, identifier: "Creatives").element.swipeUp() 23 | app.collectionViews.cells.staticTexts["ScrollView"].tap() 24 | let scrollViewsQuery = XCUIApplication().scrollViews.firstMatch 25 | let articleElement = scrollViewsQuery.otherElements.containing(.staticText, identifier: "ARTICLE").element 26 | let elementsQuery = scrollViewsQuery.otherElements 27 | while !elementsQuery.otherElements[mediaViewIdentifier].exists { 28 | articleElement.swipeUp() 29 | } 30 | let player = elementsQuery.otherElements[mediaViewIdentifier] 31 | XCTAssert(player.frame.height > 80) 32 | } 33 | 34 | func testInReadIntegrationVerticalInScrollView() throws { 35 | let app = XCUIApplication() 36 | app.launch() 37 | let collectionViewsQuery = app.collectionViews 38 | app.collectionViews.cells.staticTexts["Vertical"].tap() 39 | collectionViewsQuery.otherElements.containing(.staticText, identifier: "Creatives").element.swipeUp() 40 | app.collectionViews.cells.staticTexts["ScrollView"].tap() 41 | let scrollViewsQuery = XCUIApplication().scrollViews.firstMatch 42 | let articleElement = scrollViewsQuery.otherElements.containing(.staticText, identifier: "ARTICLE").element 43 | let elementsQuery = scrollViewsQuery.otherElements 44 | while !elementsQuery.otherElements[mediaViewIdentifier].exists { 45 | articleElement.swipeUp() 46 | } 47 | let player = elementsQuery.otherElements[mediaViewIdentifier] 48 | XCTAssert(player.frame.height > 80) 49 | } 50 | } 51 | --------------------------------------------------------------------------------