Skip to content

Releases: LinkForty/mobile-sdk-ios

v1.4.0

Choose a tag to compare

@onamfc onamfc released this 11 Jun 16:04
  • SDK identitysdkName/sdkVersion on install + event payloads and an X-LinkForty-SDK header on all requests.
  • Last-click attribution — every in-app event is stamped with the deep link that most recently opened the app plus a per-app-open sessionId; the newest open supersedes, the active link persists across restarts, and organic activity stays session-only.
  • Screen-view trackingtrackScreenView(name:) plus a SwiftUI .linkfortyScreen("Name") modifier emit screen_view events carrying the attribution stamp.

All additive and backward compatible.

v1.3.0

Choose a tag to compare

@onamfc onamfc released this 04 May 23:16

Added

App token (LinkForty Cloud organic-install attribution)

`appToken` is a new optional field on `LinkFortyConfig` that lets LinkForty Cloud attribute organic installs (App Store discovery, social mentions, etc.) to your workspace. Without it, only fingerprint-attributed installs (deeplink click → app open) get scoped to your workspace.

```swift
let config = LinkFortyConfig(
baseURL: URL(string: "https://go.yourdomain.com")!,
apiKey: "your-api-key",
appToken: "at_a1b2c3d4...", // recommended for Cloud
debug: true
)
try await LinkForty.shared.initialize(config: config)
```

  • Format: `at_<32 hex>`
  • Public: Safe to ship inside your app bundle — it only identifies which workspace owns the install; it cannot authenticate API actions or expose private data.
  • Self-hosted Core: Field is accepted and ignored.
  • Find it: Cloud Dashboard → Workspace Settings → App Token

External user ID

`setExternalUserId(_:)` and `getExternalUserId()` are new methods on `LinkForty` for SDK-level user attribution. The set value is automatically attached to all `createLink()` calls (unless overridden per-call), enabling per-user deduplication and share attribution on the dashboard.

```swift
LinkForty.shared.setExternalUserId("user-123")

// Now all createLink calls include externalUserId: "user-123"
let link = try await LinkForty.shared.createLink(options: CreateLinkOptions(
deepLinkParameters: ["productId": "abc"]
))

// Per-call override still works:
let oneOffLink = try await LinkForty.shared.createLink(options: CreateLinkOptions(
deepLinkParameters: ["productId": "abc"],
externalUserId: "different-user"
))

LinkForty.shared.setExternalUserId(nil) // clear
```

  • Stored in memory only — not persisted to disk.
  • Cleared by `clearData()` and `reset()`.

Compatibility

  • Backwards-compatible: Existing apps continue to work without changes — both new fields are optional.
  • Min iOS: 16.0 (unchanged)
  • Min Xcode: 15.0 (unchanged)
  • Swift: 5.9+ (unchanged)

Install

Swift Package Manager

```swift
.package(url: "https://github.com/LinkForty/mobile-sdk-ios.git", from: "1.3.0")
```

CocoaPods

```ruby
pod 'LinkFortySDK', '~> 1.3'
```

Changelog

See CHANGELOG.md for the full history.

v1.2.0

Choose a tag to compare

@onamfc onamfc released this 03 Mar 23:19

Added

  • Added externalUserId parameter to CreateLinkOptions for per-user deduplication and share attribution
  • Added deduplicated field to CreateLinkResult indicating when an existing link was returned

v1.1.3

Choose a tag to compare

@onamfc onamfc released this 16 Feb 22:01

contains updates from v1.1.0 - 1.1.3. Review CHANGELOG for list of updates

v1.1.0

Choose a tag to compare

@onamfc onamfc released this 16 Feb 21:08

Added

  • createLink(options:) method for programmatic short link creation from the app
  • CreateLinkOptions and CreateLinkResult public types
  • missingApiKey error case on LinkFortyError
  • Server-side URL resolution in handleDeepLink(url:) via GET /api/sdk/v1/resolve/{shortCode} with device fingerprint query parameters — returns enriched deep link data including custom parameters, deep link path, and app scheme
  • deepLinkPath and appScheme fields on DeepLinkData

Changed

  • DeepLinkHandler now accepts a NetworkManager and FingerprintCollector via configure() for server-side resolution, with automatic fallback to local URL parsing on failure