Library Reference

Use the NamiECR SDK to integrate payment functionality into iOS and iPadOS applications. The SDK supports native Swift and Objective‑C, enabling developers to initialize connections, send transaction requests, and process responses with Nami terminals.

For integration steps, refer to iOS ECR Integration.

Prerequisites

  • Xcode 14+
  • Swift 5.7+ or Objective-C
  • iOS 13.0 or later
  • Nami terminal connected to Wi-Fi
  • Proper app entitlements and permissions configured for networking (App Transport Security in Info.plist)

Library Import

Add the NamiECR SDK framework to your project and import it in your code.

Swift

import NamiECRSDK

Objective-C

@import NamiECRSDK;

Core Components

  • ECRSDK.shared – Singleton for managing SDK operations
  • connectTCP() – Establish a direct TCP/IP connection to the terminal
  • scanDevice() – Discover available terminals automatically
  • onSelectDevice() – Select and connect to a discovered terminal
  • disconnectTCP() – Disconnect from the terminal
  • doTransaction() – Execute a transaction using a request object
  • PurchaseRequest() – Create a purchase transaction request
  • PurchaseWithNaqdRequest() – Create a purchase with Naqd transaction request
  • RefundRequest() – Create a refund transaction request
  • AuthorizationRequest() – Create an authorization transaction request
  • AdviseRequest() – Create an advice transaction request
  • AuthExtensionRequest() – Create an authorization extension request
  • AuthVoidRequest() – Create an authorization void transaction request
  • CashAdvanceRequest() – Create a cash advance transaction request
  • DuplicateRequest() – Create a duplicate transaction request
  • ReversalRequest() – Create a reversal transaction request
  • ReconcilationRequest() – Create a reconciliation transaction request

Permissions (Info.plist Example)

Add the following entries to your Info.plist for network access.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Integration Example

Swift

// Connect via TCP/IP
ECRSDK.shared.connectTCP(ip: "192.168.0.102", port: 8888) { status, result in
    DispatchQueue.main.async {
        if status {
            print("Connected successfully")
        } else {
            print("Connection failed")
        }
    }
}

// Configure CRN and terminal printer
ECRSDK.shared.cashRegisterNumber = "12345678"
ECRSDK.shared.enableTerminalPrinter = true

// Create a purchase transaction request
let transactionRequest = PurchaseRequest(amount: "000000001000")

// Execute transaction
ECRSDK.shared.doTransaction(request: transactionRequest) { status, response in
    DispatchQueue.main.async {
        if status {
            print("Transaction approved")
        } else {
            print("Transaction failed")
        }
    }
}

Response Handling Example

Swift

private func handleTransactionResponse(
    status: Bool,
    response: String,
    selectedTransactionType: SupportedTransactions
) {

    guard status else {

        if !ECRSDK.shared.isDeviceConnected() {
            updateConnectivityStatus()
        }

        showAlert(message: "Transaction failed")

        return
    }

    let components = transactionResponse.responseBody.components(separatedBy: ";")

    if transactionResponse.responseBody.caseInsensitiveCompare("Transaction Not Allowed") == .orderedSame {

        displayResponseReceived(
            for: selectedTransactionType,
            with: [transactionResponse.responseBody]
        )

    } else if components.count > 2 {

        let trimmed = Array(components.dropFirst().dropLast())

        displayResponseReceived(
            for: selectedTransactionType,
            with: trimmed
        )

    } else {

        displayResponseReceived(
            for: selectedTransactionType,
            with: [transactionResponse.responseBody]
        )
    }
}

Error Handling

  • Connection failure → Display an error message and allow the user to retry.
  • Scan failure → Display an alert and restart device discovery if required.
  • Invalid CRN → Ensure the CRN is an 8-digit numeric value before initiating a transaction.
  • Timeout → Retry the operation or prompt the user to reconnect.
  • Invalid request data → Validate all required transaction fields before calling doTransaction().

Configuration

Configure the following properties before initiating a transaction:

  • Cash Register Number (CRN)
  • Terminal printer preference (true = Enable, false = Disable)

No external configuration files are required.

Runtime Behavior

  • The SDK supports TCP/IP and automatic terminal discovery.
  • Connect to the terminal before initiating a transaction.
  • Configure the CRN and terminal printer preference.
  • Create the appropriate transaction request object.
  • Execute the transaction using doTransaction(request:).
  • Process the transaction response returned by the SDK.
  • Disconnect from the terminal after transaction completion.

Transaction Flow

Initialize SDK → Configure POS Terminal → Connect Device (TCP/IP or Scan) → Register (txnType 17) → Start Session (txnType 18) → Create Transaction Request → Execute Transaction → Receive Response → Process Response → Disconnect


Did this page help you?