Skip to content

1.0.19

Choose a tag to compare

@OhBehive OhBehive released this 03 Jul 01:18
81ba5b3

[1.0.19] - 2026-07-02

⚠️ Behavior changes for integrators

  • prepare() no longer auto-links the Tap to Pay account. Previously
    prepare() (which also runs from the didBecomeActive observer) silently
    presented the Apple account-linking sheet when the device wasn't linked. If
    the merchant declined, it threw and got re-presented on every app activation —
    an endless link prompt. prepare() now throws the new
    KoardMerchantSDKError.accountNotLinked instead of auto-linking. Guard for it
    and drive linking explicitly via the public linkAccount() API (this restores
    merchant-side control over how and when linking is presented). The background
    prepare retry loop treats not-linked as terminal and no longer retries it.

Added

  • KoardMerchantSDKError.accountNotLinked — thrown by prepare() when the
    device isn't linked to the merchant's Tap to Pay account, so callers can guard
    it and explicitly call linkAccount() instead of the SDK silently presenting
    the Apple linking sheet.

Fixed

  • Endless Tap to Pay account-linking prompt after a decline. A merchant who
    declined the Apple account-linking sheet was re-prompted on every app
    activation, because prepare() (run from didBecomeActive) auto-linked and
    the retry loop re-presented the sheet. prepare() now surfaces
    accountNotLinked and leaves linking to the explicit linkAccount() call
    (see Behavior changes), breaking the loop.
  • Reader stuck reporting .preparing on an unlinked account. prepare()
    set the reader status to .preparing before the linked-account check; when the
    account wasn't linked it threw without clearing the status, so callers polling
    status saw .preparing forever (the UI showed "preparing card reader"
    indefinitely). The status is now reset to .notReady before the
    accountNotLinked error is thrown.