BNAMSMB2 2.7.2

BNAMSMB2 2.7.2

kakaiikaka 维护。



BNAMSMB2 2.7.2

AMSMB2

这是一个为 iOS、macOS 和 tvOS 捕获 libsmb2 的 Swift 库,允许连接 SMB2/3 共享并执行文件操作。

Swift Version Platform License

Build Status Release version CocoaPods version Carthage compatible

安装

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上分发应用程序,则必须将此库动态链接到您的应用程序。