Skip to content

docs(ios): Google Integrated Conversion Measurement setup [LIN-2078] - #163

Open
Shofiya2003 wants to merge 5 commits into
mainfrom
lin-2078-google-icm-docs
Open

docs(ios): Google Integrated Conversion Measurement setup [LIN-2078]#163
Shofiya2003 wants to merge 5 commits into
mainfrom
lin-2078-google-icm-docs

Conversation

@Shofiya2003

@Shofiya2003 Shofiya2003 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Documents Google Integrated Conversion Measurement (ICM) for the iOS SDK, shipping in LinkrunnerKit 4.1.0 (linkrunner-ios#26).

What's here

sdk/ios.mdx gains an optional ICM section:

  • Three setup steps: add Google's SDK (SPM or CocoaPods), add -ObjC -lc++, provide consent
  • The consent API with a table explaining what each of the three signals means
  • The TCF alternative for apps whose CMP supports IAB TCF v2.2/v2.3
  • How to verify from the odm_available=... debug line

ad-networks/google-ads-discrepancies.mdx is corrected. It described iOS as effectively SKAN-only, with deterministic attribution available only when ATT is granted and an IDFA exists. That stops being true for the EEA, UK, and Switzerland once ICM is in place.

Notes for review

  • The section is framed as optional and scoped to the EEA, UK, and Switzerland, so customers elsewhere skip it rather than doing setup that cannot help them.
  • It states plainly that Linkrunner does not bundle Google's SDK. That is deliberate: LinkrunnerKit detects it at runtime, so apps that skip ICM take on no dependency, no linkage change, and no size increase. This matches how Branch and Kochava document the same integration.
  • No new screenshots. Every step here is code or Xcode build settings rather than a Linkrunner dashboard screen, so the writing rule about screenshots where the user touches a UI does not apply. Happy to add an Xcode Other Linker Flags screenshot if you would like one.
  • Checked: no em-dashes in the added lines, no relative links, and mintlify broken-links reports nothing in either file (the four hits it reports are pre-existing in other pages).

🤖 Generated with Claude Code

Shofiya2003 and others added 5 commits July 28, 2026 15:47
Adds an optional ICM section to the iOS SDK guide covering the three setup
steps, the consent API, the TCF alternative, and how to verify the integration
from the debug log.

Also corrects the Google Ads discrepancies page, which described iOS as
effectively SKAN-only with deterministic attribution available only when ATT is
granted. That stops being true for the EEA, UK, and Switzerland once ICM is in
place.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The page said CocoaPods applies the linker flags for you. That holds for
-lc++, which Google's podspec declares, but not for -ObjC, which is the flag
that actually matters. Branch documents -ObjC as required regardless of
integration method, and Adjust gives the same reason we have: the SDK
discovers Google's class at runtime, so nothing references it at link time and
the linker strips it from the static library without the flag.

Also notes that a missing flag is the more likely cause of odm_available=false,
since it produces no build warning.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…2078]

The step told every reader to add -ObjC, including CocoaPods users who do not
need it. CocoaPods writes the flag into its generated xcconfig itself when a
target links a vendored static framework, so pod users need no build settings
at all.

Tested in one project, changing only the flag:

  SPM,       -ObjC set     -> ODCConversionManager present (13 symbols)
  SPM,       -ObjC absent  -> stripped (0 symbols), build still succeeded
  CocoaPods, nothing set   -> present (13 symbols)

The step is now titled for Swift Package Manager and opens with a note telling
CocoaPods users to skip it. The troubleshooting line is scoped the same way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ICM shipped in the 4.1.0 native SDKs and the wrappers built on them, but only
the iOS page documented it. Adds a shared feature page and the per-SDK
installation steps.

- features/google-icm.mdx: what ICM is, prerequisites (minimum SDK version,
  an iOS link ID in Google Ads, Google's ODM SDK, setConsent), platform
  support, what each consent signal means and why Google needs it.
- React Native, Flutter, Expo, Unity: ICM sections covering the ODM SDK, the
  linker flag where it is not automatic, setConsent, and verification.
- Android: a Google Ads consent section. ODM is iOS-only, but Android reaches
  Google through the App Conversion API, which reads the same signals.
- Capacitor and Cordova: state plainly that ICM is not supported yet. Both
  pin LinkrunnerKit 4.0.x and android-sdk 4.0.1.
- iOS: the Firebase path is FirebaseAnalytics 11.14.0+, note the $(inherited)
  case where CocoaPods will not supply -ObjC, and initialize early because
  ODM matches on first launch time.

Version pins in the install steps were stale and are corrected to the
published releases: iOS SPM 3.12.0 to 4.1.0, Android gradle 3.10.0 to 4.1.0,
Unity android-sdk 3.6.0 to 4.1.0. The Unity Swift bridge also did not compile
against LinkrunnerKit 4.x, which has required a non-optional paymentId since
4.0.0, and gains a setConsent bridge on both platforms.

Checked against how Adjust, Branch, AppsFlyer and Kochava document the same
integration: all of them have the app supply Google's SDK. The linker flag
claims are verified against Google's Package.swift (linkedLibrary("c++")) and
podspec (libraries 'c++').

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Google's on-device measurement is inactive in the EEA, the UK, and
Switzerland, which is the opposite of what the ICM docs claimed. Correct
the audience across every SDK guide and the feature page: ICM recovers
iOS installs that have no click identifier and no IDFA, and the EEA
framing belongs to the Android side, where Google applies the
improvement automatically.

Also:

- Move the ICM section under Installation in each SDK guide
- Point link ID setup at Integrations > Google Ads instead of Settings
- Show the Podfile target block for the ODM pod, and lead the step with
  the Firebase skip note
- Add features/send-consent.mdx covering the DMA consent signals, what
  to report outside the EEA, and how to collect it
- Drop CMP phrasing and the undocumented TCF path for now

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant