通过Swift Package在本地接入ZOLOZ iOS SDK

本文详细介绍通过Swift Package在本地接入ZOLOZ iOS SDK的完整流程,并通过测试代码验证SDK是否接入成功。

前提条件

在接入ZOLOZ iOS SDK之前,请确保您使用的开发工具为Xcode 15.0及以上版本。

接入步骤

本文以示例工程SPMDemo为例,且已在该工程中创建Resources目录,以下步骤将基于此工程演示ZOLOZ iOS SDK的完整接入流程。

步骤1:获取ZOLOZ SDK

  1. 联系ZOLOZ技术支持获取ZOLOZ SDK,该SDK为ZIP格式。
  2. 解压ZIP,解压后您将获得一个完整的SDK文件夹。

步骤2:引入ZOLOZ SDK

  1. 将解压后的zolozkit文件夹复制到您的工程目录中。
    image
  2. 添加包依赖。
    1. 打开Xcode,选择File > Add Package Dependencies...
      image
    2. 在弹窗中选择Add Local...,页面将弹出文件选择窗口。
    3. 在弹窗中选择zolozkit文件夹。
      image
  1. 配置Package Products。
    在弹窗中将ZolozKitWithoutWebContainer设置为None,并单击Add Package完成添加。
    image
  2. 检查链接状态。
    选择TARGETS > Build Phases > Link Binary With Libraries,如果显示ZolozKitWithWebContainer,表示SDK引用成功。
    image

步骤3:添加资源文件到主工程

  1. 进入zolozkit/Resources目录。
    image
  2. 将该目录下的所有bundle文件复制到您的主工程目录中。
    image
  3. 检查资源文件是否引用成功。
    选择TARGETS > Build Phases > Copy Bundle Resources,确认所有bundle文件均已引用到主工程。
    image

验证接入结果

接入完成后,您可以通过下面两个测试代码验证SDK是否接入成功。

检查metainfo是否获取成功

在您的工程中运行以下代码获取metainfo,确认ZOLOZ iOS SDK是否接入成功。

copy
let metainfo = ZLZFacade.getMetaInfo();
showAlert(title: "METAINFO", message: metainfo)

如果成功显示metaInfo内容,表示SDK接入成功。以下是完整的metainfo示例:

copy
{
    "appVersion": "1", 
    "bioMetaInfo": "3.46.0:0,2;RJBBACRJIIFQGQDARIJ4BNJACJA=;2.0.8.251111182808", 
    "appName": "zoloz.demo.spmdemo.mj.SPMDemo", 
    "deviceType": "ios", 
    "osVersion": "iOS 26.1", 
    "keyHash": "5EBC**", 
    "buildVersion": "2.0.8.251111182808", 
    "apdidToken": "ZLZ0307B71E92194BCD843170C4F417****", 
    "deviceModel": "iPhone13,3"
}

检查bundle文件是否引入成功

运行以下测试代码,检查ZOLOZ所需的bundle文件是否引入成功。

  • 如果showAlert返回Success,表示所有bundle文件均引入成功。
  • 如果showAlert返回Missing Bundles,表示有bundle文件引入失败,您可以根据提示信息进行检查。
copy
// 定义需要检查的bundle names
let bundleNames = [
    "BioAuthEngine.bundle",
    "ToygerService.bundle",
    "WebContainerLite.bundle",
    "ZolozKit.bundle",
    "ZolozNfcReader.bundle"
]

// 检查每个bundle文件是否存在
var missingBundles: [String] = []

for bundleName in bundleNames {
    if Bundle.main.path(forResource: bundleName, ofType: nil) == nil {
    missingBundles.append(bundleName)
}
}

// 展示检查结果
if missingBundles.isEmpty {
    showAlert(title: "Success", message: "All bundles exist")
} else {
    showAlert(title: "Missing Bundles", message: "The following bundles are missing: \n\n" + missingBundles.joined(separator: "\n"))
}