AMSMB2
这是一个为 iOS、macOS 和 tvOS 捕获 libsmb2 的 Swift 库,允许连接 SMB2/3 共享并执行文件操作。
安装
Cocoapods / Carthage
将此行添加到您的 pods 文件中
pod "AMSMB2"
或者将此添加到 Cartfile
github "amosavian/AMSMB2"
手动
为了轻松获得最新更新,在终端中运行此命令以克隆
git clone https://github.com/amosavian/AMSMB2
您可以在 AMSMB2 文件夹中使用此命令更新您的库
git pull
如果您的项目是基于 Git 的,请在使用该项目的目录中运行以下命令,以将此项目添加为子模块到您的项目中
git submodule add https://github.com/amosavian/AMSMB2
然后,将 AMSMB2.xcodeproj
拖到您的 Xcode 工作区中,并将框架添加到目标的 Embeded Binaries 中。
使用方法
只需阅读内联帮助,即可了解每个函数的功能。很简单。它是线程安全的,并且可以与任何队列一起使用。
要列出目录中的文件和执行文件操作,您必须使用此模板。
import AMSMB2
class SMBClient {
/// connect to: `smb://[email protected]/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 = AMSMB2(url: self.serverURL, credential: self.credential)!
private func connect(handler: @escaping (Result<AMSMB2, Error>) -> Void) {
// AMSMB2 can handle queueing connection requests
client.connectShare(name: self.share) { error in
if let error = error {
handler(.failure(error))
} else {
handler(.success(self.client))
}
}
}
func listDirectory(path: String) {
connect { result in
switch result {
case .success(let client):
client.contentsOfDirectory(atPath: path) { result in
switch result {
case .success(let files):
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)
}
case .failure(let error):
print(error)
}
}
case .failure(let error):
print(error)
}
}
}
func moveItem(path: String, to toPath: String) {
self.connect { result in
switch result {
case .success(let client):
client.moveItem(atPath: path, toPath: toPath) { error in
if let error = error {
print(error)
} else {
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.
client.disconnectShare(completionHandler: { (error) in
if let error = error {
print(error)
}
})
}
case .failure(let error):
print(error)
}
}
}
}
许可证
虽然项目附带源代码的许可证是MIT,但它静态链接到了libsmb2
(许可证为LGPL v2.1
),因此整个项目成为LGPL v2.1
。
如果您想在App Store上分发应用程序,则必须将此库动态链接到您的应用程序。