【问题标题】:create plist and copy it to folder MacOS Swift创建 plist 并将其复制到文件夹 MacOS Swift
【发布时间】:2019-05-03 19:24:08
【问题描述】:

我一直在思考如何在 MacOS 中创建 plist 并将其写入某个文件夹目录。在我的情况下,到 /Library 中的 LaunchDaemons 文件夹。我知道如何创建 plist,但它写入我遇到问题的 LaunchDaemons 文件夹。根据我的理解,下面的这段代码是针对沙盒的,但是我该如何在沙盒之外进行呢?干杯

 let fileManager = FileManager.default
 let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
 let path = documentDirectory.appending("test.plist")

我在收到的帮助下添加了代码,没有错误,但它没有向文件夹写入任何内容。这是代码:

 let libraryDirectory = try! FileManager.default.url(for: .libraryDirectory, in: .localDomainMask, appropriateFor: nil, create: false)
    let launchDaemonsFolder = libraryDirectory.appendingPathComponent("LaunchDaemons/test.plist")

    if FileManager.default.fileExists(atPath: launchDaemonsFolder.path) {

        print(launchDaemonsFolder)


        let plistDictionary : [String: Any] = [
            "ExitTimeOut": 600,
            "Label": "BOOT.SHUTDOWN.SERVICE",
            "ProgramArguments": ["/test.sh"] as Array,
            "RunAtLoad": false,
            "WorkingDirectory": "/"

        ]

        let dictionaryResult = NSDictionary(dictionary: plistDictionary)
        let fileWritten = dictionaryResult.write(to: launchDaemonsFolder, atomically: true)
        print("is the file created: \(fileWritten)")



    } else {

        print("File Exists")

    }

【问题讨论】:

    标签: swift macos plist nsfilemanager


    【解决方案1】:

    首先NSSearchPathForDirectoriesInDomains已经过时了,还是强烈推荐使用URL相关的API。

    这段代码创建了一个指向/Library/LaunchDaemons的URL

    let libraryDirectory = try! FileManager.default.url(for: .libraryDirectory, in: .localDomainMask, appropriateFor: nil, create: false)
    let launchDaemonsFolder = libraryDirectory.appendingPathComponent("LaunchDaemons")
    

    【讨论】:

    • 谢谢。这很有帮助。由于这改变了我的代码,现在如何在创建 plist 后写入文件夹并在写入之前检查文件是否存在?不过,检查它是否存在并不是那么重要。
    • 如果您有let launchDaemonsFile = launchDaemonsFolder.appendingPathComponent("test.plist"),请检查FileManager.default.fileExists(atPath: launchDaemonsFile.path)
    • 我已经在上面添加了我的测试代码,它没有任何错误,但它没有写入文件夹。有什么建议吗?
    • 您无权写入/Library。此文件夹归system 所有。您需要一个具有提升权限的帮助应用程序,创建起来并不容易。
    • 好的,我会尝试这样做。我假设您的意思是一个对话框,要求用户在尝试写入文件夹之前输入系统密码?
    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多