diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 62c2972..719b861 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -41,10 +41,12 @@ jobs: LC_ALL: en_US.UTF-8 run: | for i in 1 2 3; do - bundle exec pod install --repo-update && break + bundle exec pod install --repo-update && exit 0 echo "pod install attempt $i failed; retrying…" sleep 5 done + echo "pod install failed after 3 attempts" >&2 + exit 1 - name: Build (Debug, iOS simulator) working-directory: example/ios diff --git a/CHANGELOG.md b/CHANGELOG.md index 299f849..f2690f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.0.4 + +- Bump the iOS native SDK to **`LinkTrailSDK ~> 0.0.11`** (from `0.0.10`). +- New `clickTokenSource: 'none'` mode (iOS) — the SDK never touches the clipboard (no paste + button, no "Allow Paste" alert); deferred matching falls back to probabilistic IP matching. + ## 0.0.3 - Bump the Android native SDK to **`io.linktrail:sdk:0.0.5`** (from `0.0.4`). diff --git a/LinktrailReactNative.podspec b/LinktrailReactNative.podspec index 75be4cd..37ddda6 100644 --- a/LinktrailReactNative.podspec +++ b/LinktrailReactNative.podspec @@ -18,7 +18,7 @@ Pod::Spec.new do |s| # The binary LinkTrail iOS SDK, published to the CocoaPods trunk — CocoaPods # resolves it automatically, so the consuming app needs no extra Podfile line. - s.dependency "LinkTrailSDK", "~> 0.0.10" + s.dependency "LinkTrailSDK", "~> 0.0.11" s.pod_target_xcconfig = { "DEFINES_MODULE" => "YES", diff --git a/README.md b/README.md index 8e601b2..25b178f 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,8 @@ On iOS, deferred attribution recovers a **click token** the tapped link left on - **`'pasteButton'`** (default) — the token is read **only** when the user taps `` (Apple's `UIPasteControl`), with **no "Allow Paste" alert**. You render the button and set **`autoTrackInstall: false`** so the install waits for the tap. +- **`'none'`** — the SDK **never touches the clipboard** (no button, no alert); deferred matching + falls back to probabilistic IP matching only. Android uses the Play Install Referrer instead, so `clickTokenSource` is ignored there and `` renders nothing. diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 0852809..a535ef0 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -37,14 +37,14 @@ PODS: - hermes-engine (0.80.3): - hermes-engine/Pre-built (= 0.80.3) - hermes-engine/Pre-built (0.80.3) - - LinktrailReactNative (0.0.3): + - LinktrailReactNative (0.0.4): - boost - DoubleConversion - fast_float - fmt - glog - hermes-engine - - LinkTrailSDK (~> 0.0.10) + - LinkTrailSDK (~> 0.0.11) - RCT-Folly - RCT-Folly/Fabric - RCTRequired @@ -67,7 +67,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - LinkTrailSDK (0.0.10) + - LinkTrailSDK (0.0.11) - RCT-Folly (2024.11.18.00): - boost - DoubleConversion @@ -2521,8 +2521,8 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: fff23161928673afcd95f63146e651726f68b384 - LinktrailReactNative: 7ec4b501092c29257ae7ab64d4b44a8748139c32 - LinkTrailSDK: b243fcedba4f7437df1171e460294cf81f256e25 + LinktrailReactNative: cdb6994035080e1edcb3697dcf8f2e287c5db30c + LinkTrailSDK: 53a14d30eb2cd9cbde0d41c3468be80a7a414e5d RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: 2ebc9cc0329ede460c5d52956ce5e1ab715c2c2c RCTRequired: b83daef658afafdc68d85b97ed082f4497a8ffa4 @@ -2586,7 +2586,7 @@ SPEC CHECKSUMS: React-timing: 16e462e136f8c6efca6ae9f555ddf5f8af267be6 React-utils: a087aa6f63ccb58ccf347f25c3552ddbdf5bc0dc ReactAppDependencyProvider: bd4d54d31d1a9e2eddff7675bb7628731a42b98c - ReactCodegen: 4903a7bb00a13fd83fccf4f9e1f8a1cbf8352e64 + ReactCodegen: 8e8c7dc0113d08d218f409fbb2cd3b966b982e11 ReactCommon: 04362bc6625a80fa21b174f527352db70e5ad06a SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: fb21153542336c6e7c4855022f4a93a286865259 diff --git a/example/package-lock.json b/example/package-lock.json index f4f0382..591cff1 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -40,11 +40,14 @@ }, "..": { "name": "linktrail-react-native", - "version": "0.0.1", + "version": "0.0.4", "license": "MIT", "devDependencies": { + "@react-native/eslint-config": "0.80.3", "@types/react": "^19.0.0", "del-cli": "^6.0.0", + "eslint": "^8.57.1", + "prettier": "2.8.8", "react": "19.1.0", "react-native": "^0.80.0", "react-native-builder-bob": "^0.40.6", diff --git a/ios/LinkTrailModuleImpl.swift b/ios/LinkTrailModuleImpl.swift index 646a74f..a9befed 100644 --- a/ios/LinkTrailModuleImpl.swift +++ b/ios/LinkTrailModuleImpl.swift @@ -205,6 +205,7 @@ public final class LinkTrailModuleImpl: NSObject { switch name { case "pasteButton": return .pasteButton case "automatic": return .automatic + case "none": return LinkTrailClickTokenSource.none default: return nil } } diff --git a/package.json b/package.json index 68a9a2e..41e3a33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "linktrail-react-native", - "version": "0.0.3", + "version": "0.0.4", "description": "React Native SDK for LinkTrail — mobile attribution and deferred deep linking. A New Architecture TurboModule wrapping the native LinkTrail iOS and Android SDKs.", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/src/types.ts b/src/types.ts index cab593d..a290324 100644 --- a/src/types.ts +++ b/src/types.ts @@ -101,8 +101,10 @@ export interface LinkTrailOptions { * iOS only. How the SDK obtains the deferred-attribution click token from the * clipboard. `'pasteButton'` (default) reads it only when the user taps an * Apple paste control (no "Allow Paste" alert); `'automatic'` reads the - * clipboard at install (shows the system "Allow Paste" alert). Ignored on - * Android (which uses the Play Install Referrer). + * clipboard at install (shows the system "Allow Paste" alert); `'none'` never + * touches the clipboard at all (no button, no alert) and relies on + * probabilistic IP matching only. Ignored on Android (which uses the Play + * Install Referrer). */ clickTokenSource?: LinkTrailClickTokenSource; /** @@ -115,7 +117,7 @@ export interface LinkTrailOptions { } /** Where the iOS SDK reads the deferred-attribution click token from. */ -export type LinkTrailClickTokenSource = 'pasteButton' | 'automatic'; +export type LinkTrailClickTokenSource = 'pasteButton' | 'automatic' | 'none'; /** SKAdNetwork 4.0+ coarse conversion value bucket (iOS only). */ export type LinkTrailCoarseConversionValue = 'low' | 'medium' | 'high';