Swift
Swift Personal Loans Mobile SDK Integration Guide
Overview
The Personal Loans vertical is delivered through the Engine Mobile SDK for iOS. This guide covers installation, prerequisites, the core configuration props (channel, zone, productTypes), a basic usage example, prefilling lead data, client tags, and event handlers.
You'll need the correct channel and zone values for your integration. Ask your Partner Manager to provide these values for Personal Loans.
Requirements
Xcode 15 or higher
iOS 15.0 or higher deployment target
Swift 5.9 or higher
Install
Add the package via Swift Package Manager. In Xcode, select your project → Package Dependencies → “+”, enter the repository URL, then choose a version rule (Up to Next Major Version is recommended) and add the SwiftEngineSDK library to your app target. Use the latest published release — check the repository's Releases for the current version:
https://github.com/MoneyLion/engine-mobile-native-sdk.gitBecause the repo is public, no GitHub account or token is required — SwiftPM downloads the binary directly.
Or add it to your Package.swift:
dependencies: [
.package(
url: "https://github.com/MoneyLion/engine-mobile-native-sdk.git",
from: "1.0.0" // use the latest published release
)
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "SwiftEngineSDK", package: "engine-mobile-native-sdk")
]
)
]Initialize
Import the SDK in any file where you want to render the Engine flow:
Basic Example
EngineSDK is a UIView — construct it with its convenience initializer and add it to your view hierarchy. Use [.loan] for productTypes to render the Personal Loans flow. Your channel and zone values are provided by your Partner Manager.
Properties
channel
String
Yes
Identifies your integration in Engine. Provided by your Partner Manager (e.g. "direct").
zone
String
Yes
Identifies the placement or distribution surface for the SDK. Provided by your Partner Manager (e.g. "marketplace").
productTypes
[ProductType]
Yes
Product flow(s) to render. ProductType is imported from the Engine SDK package — use [.loan] for Personal Loans, which maps to the string value "loan".
bearerToken
String
For prefill
API token from your Partner Manager. Required to use the Prefill API. Without it, the standard non-prefilled flow renders.
onExit
EngineSDKCallbacks.OnExit
Yes
Fired when the user exits the flow. Passed directly to EngineSDK(...).
onInitialize, onCreate, onUpdate, onNavigate, onSubmit, onRateTableRender, onOfferClick, onErrorPageView, onErrorPageRetry, onEmbedError, onEmbedErrorRetry
Callbacks
No
Optional tracking hooks passed to EngineSDK(...). See Event Handlers.
Prefilling Lead Data
Prefill any user data you already have to reduce what the user has to type in-flow. Prefilled data is grouped into typed information objects, each passed to EngineSDK(...) (e.g. personalInformation, loanInformation, financialInformation).
Example
Type Definitions
Every prop and field is optional — pass only what you have.
Enums / Accepted Values
Fields backed by an enum must use a valid value.
Client Tags
The Engine SDK supports adding your unique Client Tags to track performance of specific campaigns or users. All Client Tag data is attributed to the lead level.
Client Tags are added via the clientTags parameter on EngineSDK, a map of string keys to lists of string values. We strongly recommend including only one element per list for ease of reporting and attribution — if you want two separate tags, include the second tag under a different key. There is no limit to the number of keys.
Supported Client Tag Keys for Reporting
If you plan for the Engine team to set up reporting (i.e., you do not plan to hit the Analytics API), these are the only keys that are currently fully supported. If a different key is needed, please reach out to your partner manager.
agentId
campaignId
clientId
deviceid
medium
sourceId
subid
subid1
subid2
subid3
target
trafficsource
userid
Event Handlers
EngineSDK accepts optional callbacks that notify your app when key moments occur during the user's journey. Each callback receives an event object containing a timestamp (ISO 8601 UTC) and event-specific fields.
All callbacks are optional. Pass any combination when constructing EngineSDK. If a callback is not provided, the SDK will still log the event to the debug console in development mode.
Available Events
For Personal Loans, onRateTableRender populates loanOffers and specialOffers, and onOfferClick includes loan-specific fields such as financialInstitutionName, loanAmount, apr, termLength, and monthlyPayment.
onInitialize
InitializeEvent
SDK finished loading the embed
onCreate
CreateEvent
New lead created
onUpdate
UpdateEvent
Lead data updated
onNavigate
NavigateEvent
Page navigation within the flow
onSubmit
SubmitEvent
Lead form submitted
onRateTableRender
RateTableRenderEvent
Rate table displayed with offers
onOfferClick
OfferClickEvent
User clicked an offer
onErrorPageView
ErrorPageViewEvent
Error page displayed in the flow
onErrorPageRetry
ErrorPageRetryEvent
User retried from the error page
onExit
ExitEvent
User exited the SDK
onEmbedError
EmbedErrorEvent
Web embed failed to load
onEmbedErrorRetry
EmbedErrorRetryEvent
User retried after embed failure
Every event includes a timestamp (ISO 8601 UTC). All fields are optional and may be null or absent. For events that vary by product (onRateTableRender and onOfferClick), each field is tagged as Common, Loan only, or Credit Card only.
onInitialize
Fired once, when the SDK finishes loading the embedded experience for the first time.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
onCreate
Fired when a new lead is created.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
leadUuid
String
Unique identifier for the newly created lead
createPage
String
The page where the lead was created
editingPage
String
The page that the user is currently editing
onUpdate
Fired when existing lead data is updated.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
leadUuid
String
Unique identifier for the lead
updatePage
String
The page where the update occurred
editingPage
Any
The page or pages that the user is currently editing. Can be a string or a list of strings
onNavigate
Fired on page navigation within the flow.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
leadUuid
String
Unique identifier for the lead
fromPage
String
The page the user is navigating away from
toPage
String
The page the user is navigating to
editingPage
String
The page that the user is currently editing
onSubmit
Fired when the lead form is submitted.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
leadUuid
String
Unique identifier for the submitted lead
onRateTableRender
Fired when the rate table is rendered with offers. Offer objects are passed through from the embedded experience as-is.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted (Common)
rateTableUuid
String
Unique identifier for the Engine rate table (Common)
loanOffers
List
Array of loan offers returned for the lead (Loan only)
specialOffers
List
Array of special offers returned for the lead (Loan only)
creditCardOffers
List
Array of credit card offers returned for the lead (Credit Card only)
onOfferClick
Fired when the user clicks an offer in the rate table.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted (Common)
leadUuid
String
Unique identifier for the lead (Common)
offerUuid
String
Unique identifier for the clicked offer (Common)
productType
String
Type of product (e.g. "loan") (Common)
productSubType
String
Sub-type of product (Common)
financialInstitutionName
String
Name of the lending institution (Loan only)
financialInstitutionUuid
String
Unique identifier for the lending institution (Loan only)
loanAmount
Any
Loan amount offered. Can be a number or a string (Loan only)
apr
Any
Annual percentage rate. Can be a number or a string (Loan only)
termLength
Any
Length of the loan term. Can be a number or a string (Loan only)
monthlyPayment
Any
Estimated monthly payment. Can be a number or a string (Loan only)
financialInstitutionBrandName
String
Brand name of the card issuer (Credit Card only)
cardName
String
Name of the credit card (Credit Card only)
isITA
Boolean
Whether the offer is an instant-to-apply offer (Credit Card only)
cardNetwork
String
Card network (e.g. Visa, Mastercard) (Credit Card only)
onErrorPageView
Fired when the error page is displayed within the embedded flow. This is different from onEmbedError, which fires when the embedded experience itself fails to load.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
leadUuid
String
Unique identifier for the lead
fromPage
String
The page the user was on before the error
editingPage
String
The page that the user was editing
onErrorPageRetry
Fired when the user taps "Retry" on the error page within the embedded flow.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
leadUuid
String
Unique identifier for the lead
toPage
String
The page the user is retrying to navigate to
editingPage
String
The page that the user was editing
onExit
Fired when the user dismisses the SDK, either by tapping "Close" on the SDK's error screen or by exiting from within the embedded flow.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
onEmbedError
Fired when the embedded experience fails to load (network error, or an HTTP status of 400 or above). The SDK then shows an error screen with "Retry" and "Close" options.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
errorMessage
String
Description of the error that occurred
onEmbedErrorRetry
Fired when the user taps "Retry" on the SDK's error screen after a load failure.
timestamp
String
ISO 8601 UTC timestamp of when the event was emitted
errorMessage
String
Description of the original error that triggered the retry
Signing process
The Swift SDK's XCFramework binaries are code-signed with an Apple Distribution certificate (Apple Distribution: MoneyLion Inc) using Apple's codesign. This lets Apple and Xcode confirm that the framework was produced by Engine and has not been tampered with.
Verifying the artifact
Verification is automatic — Xcode and iOS validate the signature when the framework is integrated into your app. To check it manually:
Download
xcframework.zipfrom the releases page:
Extract the zip to get the
.xcframework.Run
codesignagainst the framework:
Confirm the output shows Authority=Apple Distribution: MoneyLion Inc.
Changelog
Last updated
Was this helpful?

