在线咨询
Skip to content

迅雷下载 Swift SDK 指南 ​

XL Download Swift SDK 适用于在 macOS 和 iOS 应用中接入迅雷下载能力,面向 Swift 项目使用。

基本信息 ​

SDK名称迅雷下载 iOS SDK
开发者深圳市迅雷网文化有限公司
SDK版本1.0.2
SDK包名XlDlSwift
SDK更新时间2026.07.08
SDK大小11.78 MB
SDK MD5值8dfc0659099cb497b30fcc851ed657b4
使用说明迅雷下载SDK合规使用说明
个人信息处理规则隐私政策

支持平台 ​

macOS UniversaliOS
✅✅

环境要求 ​

  • Swift 5.9 或更高版本。
  • Xcode Command Line Tools。
  • macOS 11 或更高版本 / iOS 13 或更高版本。

接入入口 ​

场景文档
macOS示例代码
iOS示例代码

安装 ​

下载 最新版 Swift SDK 并解压:

bash
unzip xunlei-dlsdk-swift.zip

在你的 SwiftPM 项目中通过本地路径引用:

swift
dependencies: [
    .package(path: "../xunlei-dlsdk-swift")
]

然后在 target 中依赖 XlDlSwift:

swift
.target(
    name: "App",
    dependencies: ["XlDlSwift"]
)

命令行运行 macOS 程序时,需要让动态链接器找到 libdk.dylib:

bash
export DYLD_LIBRARY_PATH="$PWD/xunlei-dlsdk-swift/Binaries/macos:$DYLD_LIBRARY_PATH"

iOS 项目需要把 xunlei-dlsdk-swift/Binaries/ios/dk.framework 加到 App target,并由 Xcode 完成 embed 和签名。

最小示例 ​

swift
import Foundation
import XlDlSwift

let sdk = XLDownloadAPI()

let initResult = sdk.initialize(
    appId: "your-app-id",
    appVersion: "1.0",
    configPath: "/tmp/xl_dl_sdk_conf",
    saveTasks: true
)

guard initResult == XLDLSuccess || initResult == XLDLAlreadyInit else {
    fatalError("init failed: \(initResult)")
}
defer {
    _ = sdk.uninit()
}

let token = try sdk.getLoginToken(apiKey: "your-api-key")
let login = sdk.login(token: token.token)
guard login.result == XLDLSuccess else {
    fatalError("login failed: \(login.result)")
}

let task = sdk.createP2SPTask(
    url: "https://example.com/file.zip",
    savePath: "/tmp/ThunderDownload",
    saveName: "file.zip"
)
guard task.result == XLDLSuccess else {
    fatalError("create task failed: \(task.result)")
}

let startResult = sdk.startTask(taskId: task.taskId)
guard startResult == XLDLSuccess else {
    fatalError("start task failed: \(startResult)")
}

while true {
    let stateResult = sdk.getTaskState(taskId: task.taskId)
    if let state = stateResult.state {
        print("\rstate:\(state.stateCode) downloaded:\(state.downloadedSize)/\(state.totalSize) speed:\(state.speed)", terminator: "")
        fflush(stdout)
        if state.stateCode == XLDownloadTaskStatusSucceeded || state.stateCode == XLDownloadTaskStatusFailed {
            print()
            break
        }
    } else {
        break
    }
    Thread.sleep(forTimeInterval: 1)
}

完整示例见 示例代码。

相关文档 ​