Skip to main content
The Uplink iOS SDK embeds a worker inside your iOS app, making the device controllable from server-side code written with the JavaScript SDK. Use it when you want Uplink automation to run inside your own branded app.
Key concepts:
  • Device: A physical iOS device running your app
  • Worker: A worker created by the Uplink SDK inside your app (one app can create multiple workers)
  • Session: An authenticated connection that pairs your worker with a JavaScript SDK client

Requirements

  • iOS 15.0 or later
  • Xcode 26.1 or later

Installation

The iOS SDK is distributed via Swift Package Manager.
1

Add the package

In Xcode, go to File → Add Package Dependencies… and enter:
2

Select a framework variant

Choose either the static Uplink library product or the Uplink-Dynamic library product and add it to your app target. Link only one variant.
3

Import the module

If you manage dependencies with a Package.swift file:
Uplink is static by default. If your app requires dynamic linking, depend on .product(name: "Uplink-Dynamic", package: "uplink-ios-public") instead. Do not link both variants.

Quick example

Initialization

Create a Worker with the UIViewController that will present the browser, usually the view controller currently on screen. Retain each active worker for as long as its connection is active.

Worker(controller:)

Creates a new Worker associated with a UIViewController. The SDK uses that controller to host its WKWebView.
Parameters:
  • controller: The UIViewController that will host the SDK’s web view
Returns: A new Worker ready to connect to a session
Keep a strong reference to the Worker for as long as the connection is active. If the worker is deallocated, the session will close.

Obtaining a session

Your backend creates a session using the JavaScript SDK’s uplink.session() and delivers the resulting session URL to the app. How you deliver it — a backend API response, a universal link, a QR code — is up to you.
See Sessions for how sessions are created on the server side.

Connecting and accepting

worker.connect(session:)

Connects the worker to an Uplink session.
Parameters:
  • session: The session URL provided by your backend

worker.accept()

Begins accepting commands from the JavaScript SDK client. accept() suspends until the worker closes, so call it from a Task to avoid blocking the rest of your app.

worker.watch(_:)

Registers a callback for worker events. Callbacks are not delivered on the MainActor. If a callback updates UIKit or other main-actor-isolated state, explicitly hop to the main actor.

Cleanup

worker.close()

Closes the worker and releases its resources.
Closing a worker ends its session. Any browsers the JavaScript SDK has launched on the worker will be terminated.

Complete example

A minimal UIViewController that starts an Uplink worker when it appears: For a complete working app, see the Connect example.

Android SDK

Integrate Uplink into your Android app

JavaScript SDK

Control your worker from server-side code

Sessions

How sessions are created and secured

Core concepts

Architecture overview