├── .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 | - 
10 | - 
11 | - 
12 | - 
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 | - 
10 | - 
11 | - 
12 | - 
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 | - 
10 | - 
11 | - 
12 | - 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------