Releases: LinkForty/mobile-sdk-ios
Release list
v1.4.0
- SDK identity —
sdkName/sdkVersionon install + event payloads and anX-LinkForty-SDKheader 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 tracking —
trackScreenView(name:)plus a SwiftUI.linkfortyScreen("Name")modifier emitscreen_viewevents carrying the attribution stamp.
All additive and backward compatible.
v1.3.0
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
v1.1.3
v1.1.0
Added
createLink(options:)method for programmatic short link creation from the appCreateLinkOptionsandCreateLinkResultpublic typesmissingApiKeyerror case onLinkFortyError- Server-side URL resolution in
handleDeepLink(url:)viaGET /api/sdk/v1/resolve/{shortCode}with device fingerprint query parameters — returns enriched deep link data including custom parameters, deep link path, and app scheme deepLinkPathandappSchemefields onDeepLinkData
Changed
DeepLinkHandlernow accepts aNetworkManagerandFingerprintCollectorviaconfigure()for server-side resolution, with automatic fallback to local URL parsing on failure