AMSMB2
这是一个为 iOS、macOS 和 tvOS 编写的 Swift 库,它包装了 libsmb2,允许连接 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,则必须此库动态链接到您的应用。