Skip to main content

iOS - Using Third-Party SDKs

The Mobile SDK Module swift package architecture enables you to enhance the Q2 Mobile Application using modular, native iOS components. While designing your module, you may need to incorporate third-party Swift packages to extend functionality—whether for networking, analytics, data processing, or other utilities.

This guide explains how to safely and effectively integrate third-party Swift libraries within your module, using two supported methods:

There are two supported ways to include third-party libraries:

1. Package dependency using swift package repository URL

You can declare publicly available swift packages hosted on Git-based repositories directly in your module’s Package.swift file.

Example

Let's assume you are building Mobile SDK Module swift package named q2-demo-ios and you want to add Alamofire then,

Step 1: Update Package.swift of q2-demo-ios dependencies section:

dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.0")
]

Step 2: Update q2-demo-ios target,

.target(
name: "q2-demo-ios",
dependencies: [
...
.product(
name: "Alamofire",
package: "Alamofire"
),
...
],
path: "q2-demo-ios/Sources/Q2Demo",
...
)

Final Package.swift would look like follow:

// swift-tools-version: 5.8

import PackageDescription

let package = Package(
name: "q2-demo-ios",
...
products: [
.library(
name: "Q2Demo",
targets: [
"q2-demo-ios"
]
),
],
dependencies: [
....
.package(
url: "https://github.com/Alamofire/Alamofire.git",
exact: "5.6.0"
),
...
],
targets: [
.target(
name: "q2-demo-ios",
dependencies: [
...
.product(
name: "Alamofire",
package: "Alamofire"
),
...
],
path: "q2-demo-ios/Sources/Q2Demo",
...
),
....
]
)

2. Using Binary .xcframework Files

For closed-source or binary-only libraries, you may include precompiled .xcframework files directly in the module.

Steps:

Example

Let's assume you are building Mobile SDK Module swift package named q2-demo-ios and you want to add ThirdPartyXCFramework (third-party xcframework) then,

Step 1: Place all .xcframework files into the Frameworks directory within your module folder

Update Package.swift of q2-demo-ios dependencies section:

.binaryTarget(
name: "ThirdPartyXCFramework",
path: "q2-demo-ios/Frameworks/ThirdPartyXCFramework.xcframework"
)

Update q2-demo-ios target,

.target(
name: "q2-demo-ios",
dependencies: [
...
.product(
name: "Alamofire",
package: "Alamofire"
),
...
],
path: "q2-demo-ios/Sources/Q2Demo",
...
)

Final Package.swift would look like follow:

// swift-tools-version: 5.8

import PackageDescription

let package = Package(
name: "q2-demo-ios",
...
products: [
.library(
name: "Q2Demo",
targets: [
"q2-demo-ios"
]
),
],
dependencies: [
...
],
targets: [
.target(
name: "q2-demo-ios",
dependencies: [
.product(
name: "Q2ModuleInterfaces",
package: "q2-mobile-ios"
),
...
"ThirdPartyXCFramework"
...
],
path: "q2-demo-ios/Sources/Q2Demo",
...
),
.binaryTarget(
name: "ThirdPartyXCFramework",
path: "q2-demo-ios/Frameworks/ThirdPartyXCFramework.xcframework"
)
]
)

➡️ Once your resources are configured, you can move on to Resources in Module to declare your module in the app runtime.