Xcode Swift 3.0 macOS(Sierra)应用程序无法创建文件,没有权限。

10
我对Xcode和Swift还不是很熟悉。我试图在我的“文档”目录中创建一个名为“file.txt”的文件,但出现了“您没有权限保存文件”的错误。
最终,我不想使用默认的“文档”目录,因为我正在使用FIFinderSyncController来监视所有内容(“/”)。
    let targetFile = (FIFinderSyncController.default().targetedURL()?.path)! + "/file.txt"

    NSLog("%@", targetFile as NSString)

    let fileManager = FileManager.default
    if fileManager.fileExists( atPath: (targetFile) ) == false {

        do {
            let targetString = (FIFinderSyncController.default().targetedURL()?.path)! + "/Untitled.txt"

            NSLog("%@", targetString as NSString)

            let fileManager = FileManager.default

            if fileManager.fileExists( atPath: targetString ) == false {
                let content = "" // Just creating empty file.

                //writing
                try content.write(toFile: targetString, atomically: false, encoding: String.Encoding.utf8)

                //reading
                let readingText = try NSString(contentsOfFile: targetString, encoding: String.Encoding.utf8.rawValue)

                NSLog("%@", readingText as NSString)
            }
        }
        catch {
            print(error.localizedDescription)
        }
    }

日志显示:

2017-04-06 13:35:46.450077-0700 Open New Text File[5177:1035580]     /Users/david/Documents/file.txt
2017-04-06 13:35:46.450257-0700 Open New Text File[5177:1035580]     /Users/david/Documents/file.txt
You don’t have permission to save the file “file.txt” in the folder “Documents”.
3个回答

11

我在这里找到了答案,所以我想帮忙解决。问题出在沙盒的限制上。如果你添加

com.apple.security.temporary-exception.files.home-relative-path.read-write

将目标的授权文件作为一个字符串数组添加到父文件夹中以进行监视。在我的情况下,我只添加了"/"来监视所有内容。这是我的:

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
<array>
    <string>/</string>
</array>

这将允许您访问与所提到的文件夹相关的所有内容。

警告:似乎(没有进行彻底测试)如果有其他 FIFinderSyncController 配置(在其他应用程序中),它们可能会相互影响。


谢谢,这对我有用。在我的情况下,我只需将其添加为键,并将类型设置为布尔值YES,它允许我写入(我知道指定单个文件系统位置更安全,但在紧急情况下这很有效)。奇怪的是,我在功能中没有启用沙箱,但仍然被拒绝写入所有本地文件夹。这是使用Xcode 9.2 beta-4 + macOS 10.13.3(目标为10.12.X)。 - Ben Stahl
另外,如果您需要的不是相对于主目录的路径,而是绝对路径,可以使用:com.apple.security.temporary-exception.files.absolute-path.read-write。 - Zaporozhchenko Oleksandr
@BenStahl 我也遇到了同样的问题,即沙盒被禁用,但我无法写入主目录的子目录... - Paulius Liekis

7
在类似情况下,我成功的解决方法是在沙盒功能的“用户选择文件”中选择“读/写”权限。请参考以下截图:enter image description here

3

我曾遇到同样的问题。我通过在“Entitlements File”中将“App Sandbox”键设置为“No”来解决它。

希望这能帮到你。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接