Skip to main content

Requirements

iOS 14.0 or later. Built and tested with Xcode 26.3; Swift tools 5.9. The package brings its own privacy manifest and needs no Info.plist key or entitlement to run.

Install

In Xcode you can also use File, Add Package Dependencies, with the same URL. Keep the releases source first in a Podfile: CocoaPods takes a pod from the first source that has it.

Build the configuration

One SessionConfig per session the user starts. Field names are the same in Swift and Kotlin.

Run a session

show, send and message(for:) are yours.

Things to know

  • Begin the lifecycle after login. The login page is the user’s to take time over, for example to fetch an SMS code. ZkTlsLifecycle asks iOS for background time while the capture runs, usually about 30 seconds.
  • Network changes. The lifecycle notices a Wi-Fi to cellular handover and reconnects.
  • The login is private. Each login runs on a new non-persistent WKWebsiteDataStore and touches none of your app’s cookies.
  • The disclosure. WebViewLoginPresenter shows it before the page, every time. Pass disclosure: to translate it. A custom presenter must show an equivalent one.
  • Threads. Every verb runs on the SDK’s own threads. onProgress calls you on an SDK thread, so hop to the main actor for UI.
  • Logging. Log error variants and their text only. print(config) shows every field, the app credential included.