Skip to main content

TIM API Swift SDK Guide

Introduction

The TIM API Swift SDK provides a native Swift implementation for ECR integration with Worldline terminals on iOS and macOS platforms.

Getting Started

Swift Package Manager

Add to your Package.swift:

dependencies: [
.package(url: "https://github.com/worldline/timapi-swift.git", from: "1.0.0")
]

CocoaPods

Add to your Podfile:

pod 'WorldlineTimApi'

Basic Setup

import TimApi

class TerminalManager {
private var terminal: Terminal?

func setup() {
// Create terminal settings
let settings = TerminalSettings()
settings.terminalId = "TERMINAL001"
settings.guides = [.retail, .dialog]

// Create terminal instance
terminal = Terminal(settings: settings)

// Set delegate
terminal?.delegate = self
}

func performTransaction() {
let request = TransactionRequest()
request.amount = 1000 // Amount in cents
request.currency = "EUR"
request.transactionType = .purchase

terminal?.transaction(request) { response in
if response.result == .success {
print("Transaction successful")
}
}
}
}

extension TerminalManager: TerminalDelegate {
func terminal(_ terminal: Terminal, didCompleteTransactionWith response: TransactionResponse) {
print("Transaction completed: \(response.result)")
}
}

Configuration

Network Settings

let settings = TerminalSettings()

// Broadcast mode
settings.terminalId = "TERMINAL001"

// Or direct connect
settings.connectionType = .direct
settings.hostAddress = "192.168.1.100"
settings.hostPort = 7784

Guide Configuration

// Enable multiple guides
settings.guides = [.retail, .petrol, .dialog]

Async/Await (iOS 15+)

func processTransaction() async throws {
let request = TransactionRequest()
request.amount = 1000
request.currency = "EUR"

do {
let response = try await terminal?.transaction(request)

if response?.result == .success {
print("Transaction successful")
}
} catch let error as TerminalError {
print("Error: \(error.code) - \(error.localizedDescription)")
}
}

Combine Framework

import Combine

var cancellables = Set<AnyCancellable>()

terminal?.transactionPublisher(request)
.sink(
receiveCompletion: { completion in
if case .failure(let error) = completion {
print("Error: \(error)")
}
},
receiveValue: { response in
print("Transaction result: \(response.result)")
}
)
.store(in: &cancellables)

Resources