Files
purchases-ios/Examples/VanillaAdTrackingSample/VanillaAdTrackingSample.xcodeproj
Pol MiroandPeter Porfy 918c99dd6e Add VanillaAdTrackingSample example app (#6504)
* ci: test AdMob adapter deploy with hardcoded version 5.66.0

Temporarily hardcode version and simplify deploy-tag workflow to test
the deploy-to-purchases-ios-admob job from the release-admob-adapter branch.

* Revert "ci: test AdMob adapter deploy with hardcoded version 5.66.0"

This reverts commit 104542f0ab0a0dbb590b19187f8e598ca8ece96c.

* feat: add AdMobIntegrationSample example app xcodeproj and config

Add the Xcode project, Info.plist, gitignore, and Package.resolved
for the AdMob example app. Clean up duplicate RevenueCatAdMob package
dependencies and fix project-level deployment target.

* fix: allow example app Package.resolved through gitignore

The root Package.resolved pattern matched at any depth, silently
excluding the example app's Package.resolved from the deployed repo.
Add a negation so the example app keeps reproducible builds.

* fix: gitignore Package.resolved in example app instead of committing it

* feat: add VanillaAdTrackingSample example app for manual ad tracking

Adds a companion example to AdMobIntegrationSample that demonstrates
manual ad event tracking via Purchases.shared.adTracker without the
RevenueCatAdMob adapter library. Covers all ad formats (banner,
interstitial, app open, rewarded, rewarded interstitial, native) with
manual delegate callbacks and paidEventHandler wiring.

* feat: add VanillaAdTrackingSample to Tuist workspace

Adds Tuist project definition and workspace entry for the vanilla ad
tracking example. Introduces vanillaAdTrackingPackages helper that
provides RevenueCat (local) + GoogleMobileAds (remote) without the
adapter dependency.

* Fixup

* docs: remove adapter comparison from VanillaAdTrackingSample README

* fix: use dynamic placement in banner impression and click callbacks

* fix: update Google Mobile Ads version constraint to allow v13

* fix: use configuration-based styling for CTA button in native ad view

* fix: remove unused placement parameter from loadNativeAd

* fix: inline Google Mobile Ads package in Project.swift

Move the Google Mobile Ads package declaration directly into the
VanillaAdTrackingSample Project.swift instead of using a shared
helper, since it's only used by this one project.

* fix: remove unused VanillaAdTrackingSample-Info.plist

The info.plist values are already declared in Project.swift via
infoPlist: .extendingDefault, making this file redundant.

* fix: add didFailToPresentFullScreenContent delegate method

Handle the case where a loaded full-screen ad fails to present by
cleaning up metadata, resetting the ad reference and status. This
prevents leaked metadata entries and stuck "Ready" states.

* fix: mark AdMobManager as @MainActor for thread safety

AdMob callbacks may fire off the main thread, but @Published
properties are observed by SwiftUI and must be mutated on main.

* docs: update build instructions to use tuist generate

The project uses Tuist for workspace generation, not a standalone
.xcodeproj file.

* fix: move native ad delegate assignment before availability guard

The delegate assignment is not iOS 15-dependent and should be set
before the guard so impression/click callbacks work regardless of
the consumer's deployment target.

* refactor: extract shared full-screen ad cleanup into helper method

Deduplicate the identical cleanup logic between
adDidDismissFullScreenContent and
ad(_:didFailToPresentFullScreenContentWithError:) into a single
cleanUpFullScreenAd helper.

* fix(ads): save adLoader before setting delegate

* chore(ads): cleanup vanilla example and project file

* fix(ads): remove hardcoded development team

* fix(ads): move from local to remote package dep

* fix(ads): revert tuist and fix project file

* fix(ads): revert tuist and fix project file

---------

Co-authored-by: Peter Porfy <peter.porfy@revenuecat.com>
2026-03-25 14:28:42 +01:00
..