Xcode Swift 3.0 macOS (Sierra) 应用程序无法创建文件,没有权限
Xcode Swift 3.0 macOS (Sierra) app unable to create file, no permission
我是 Xcode 和 Swift 的新手。我试图在我的文档目录中创建一个名为 "file.txt" 的文件并收到错误 "You don’t have permission to save the file."
最后,我不想使用默认的 Documents 目录,因为我正在使用 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”.
我在这里找到了答案,所以我想我会帮忙。问题是沙箱的局限性。如果你加上
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(在其他应用程序中),它们会相互影响。
我遇到了同样的问题。我通过在 "Entitlements File" 中将 "App Sandbox" 键设置为 "No" 来解决它。
希望这会有所帮助。
在类似情况下对我有用的是 select Read/Write in "User Selected Files" in the Capabilities of the Sandbox。
我是 Xcode 和 Swift 的新手。我试图在我的文档目录中创建一个名为 "file.txt" 的文件并收到错误 "You don’t have permission to save the file."
最后,我不想使用默认的 Documents 目录,因为我正在使用 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”.
我在这里找到了答案,所以我想我会帮忙。问题是沙箱的局限性。如果你加上
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(在其他应用程序中),它们会相互影响。
我遇到了同样的问题。我通过在 "Entitlements File" 中将 "App Sandbox" 键设置为 "No" 来解决它。 希望这会有所帮助。
在类似情况下对我有用的是 select Read/Write in "User Selected Files" in the Capabilities of the Sandbox。