这是一个小型的 Swift 库,适用于 iOS、macOS 和 tvOS,它封装了 libsmb2,允许连接 SMB2/3 共享并执行文件操作。
要使用 AMSMB2,请将以下依赖项添加到您的 Package.swift 文件中
dependencies: [
.package(url: "https://github.com/amosavian/AMSMB2", .upToNextMinor(from: "3.0.0"))
]
然后,您可以将特定的产品依赖项添加到您的目标中
dependencies: [
.product(name: "AMSMB2", package: "AMSMB2"),
]
只需阅读内联帮助即可了解每个函数的功能。 这非常简单,而且是线程安全的。
要列出目录中的文件和进行文件操作,您必须使用以下模板
import AMSMB2
class SMBClient: @unchecked Sendable {
/// connect to: `smb://guest@XXX.XXX.XX.XX/share`
let serverURL = URL(string: "smb://XXX.XXX.XX.XX")!
let credential = URLCredential(user: "guest", password: "", persistence: URLCredential.Persistence.forSession)
let share = "share"
lazy private var client = SMB2Manager(url: self.serverURL, credential: self.credential)!
private func connect() async throws -> SMB2Manager {
// AMSMB2 can handle queueing connection requests
try await client.connectShare(name: self.share)
return self.client
}
func listDirectory(path: String) {
Task {
do {
let client = try await connect()
let files = try await client.contentsOfDirectory(atPath: path)
for entry in files {
print(
"name:", entry[.nameKey] as! String,
", path:", entry[.pathKey] as! String,
", type:", entry[.fileResourceTypeKey] as! URLFileResourceType,
", size:", entry[.fileSizeKey] as! Int64,
", modified:", entry[.contentModificationDateKey] as! Date,
", created:", entry[.creationDateKey] as! Date)
}
} catch {
print(error)
}
}
}
func moveItem(path: String, to toPath: String) {
Task {
do {
let client = try await self.connect()
try await client.moveItem(atPath: path, toPath: toPath)
print("\(path) moved successfully.")
// Disconnecting is optional, it will be called eventually
// when `AMSMB2` object is freed.
// You may call it explicitly to detect errors.
try await client.disconnectShare()
} catch {
print(error)
}
}
}
}
虽然项目附带的源代码采用 MIT 许可证,但它静态链接到 libsmb2
,后者采用 LGPL v2.1
,因此整个项目变为 LGPL v2.1
。
如果您打算在 App Store 上发布您的应用程序,您必须将此库动态链接到您的应用程序。