What's new — clickTokenSource: .none
A third option beside .pasteButton and .automatic:
LinkTrailOptions(clickTokenSource: .none)The SDK never touches the clipboard, by any path — no deferred click token, no iOS "Allow Paste" alert, nothing to add to your UI. Attribution falls back to the probabilistic (IP) match.
Use it when your links don't stage a token (no web interstitial), or when you'd rather not ask for clipboard access at all.
The guarantee is enforced, not just documented: under .none, trackInstall(clickToken:) ignores a token even when handed one explicitly, so a stray LinkTrailPasteButton left in the UI can't quietly re-enable clipboard reads.
⚠️ Probabilistic matching is lossy. It misses on shared IPs (offices, CGNAT, public wifi), VPNs, and the common case of clicking on cellular then installing on wifi — and it can occasionally match the wrong user, so treat deferred link content as best-effort personalization. Only a click token gives a deterministic, IP-independent match.
Note: spelled
.none, it shadowsOptional.noneif you store the value asLinkTrailClickTokenSource?— writeLinkTrailClickTokenSource.nonethere.
Choosing a mode
| Mode | Clipboard | User sees |
|---|---|---|
.pasteButton (default) |
read on the user's tap of a native UIPasteControl |
your paste button — no system alert |
.automatic |
read by the SDK at install | the iOS "Allow Paste" alert |
.none (new) |
never read | nothing — no alert, no button |
Demo app
The KickFlip demo in example/ now covers all three modes: a consent gate for .pasteButton, and a tracking-consent screen for .none so the install carries the user's real consent value. The API key is baked in at build time (LINKTRAIL_KEY=lt_live_… xcodegen generate) instead of pasted into source.
Install
.package(url: "https://github.com/linktrail-io/ios-sdk.git", from: "0.0.11")pod 'LinkTrailSDK', '~> 0.0.11'No breaking changes — .none is purely additive. iOS 15+.
Full changelog: 0.0.10...0.0.11