我对Swift编程不是很熟悉,但是我需要在Swift中编写一个小工具,该工具可以解压缩文件(然后启动程序)。我需要解开我的应用程序捆绑包中未包含的文件。它位于/users/me/folder1/folder2/openjdk-11.0.2.2.zip
中我尝试了库" zip"," zipfoundation"one_answers" ssziparchive"。从到目前为止阅读的内容来看,我认为我尝试的库需要ZIP文件位于App Bundle中,但我不确定。
用" zip"我尝试:
_ = try Zip.quickUnzipFile(URL(string: openjdkZipUrl!.relativePath)!)
用" zipfoundation"我尝试:
let fileManager = FileManager()
let archive = openjdkZipUrl
let destinationURL = openjdkFolderUrl
do {
try fileManager.unzipItem(at: archive.url, to: destinationURL)
} catch {
}
zipfoundation告诉我"类型'filemanager'的值没有成员'unzipitem'",但我用 import Foundation
导入它。我也有(以及其他库)。
用" ssziparchive"我尝试:
let success = SSZipArchive.unzipFile(atPath: openjdkZipUrl!.path, toDestination: openjdkFolderUrl!.path)
使用的路径是
let openjdkZip = "file:///Users/" + user + "/folder1/folder2/openjdk-11.0.2.zip"
let openjdkZipUrl = URL(string: openjdkZip)
和
let openjdkFolder = "file:///Users/" + user + "/folder1/folder2/openjdk-11.0.2"
let openjdkFolderUrl = URL(string: openjdkFolder)
我的捆绑包中不包含zip文件真的是一个问题吗?有人可以告诉我我做错了什么吗?预先感谢
@trojanfoe在评论中提到:
Mac应用程序默认情况下是沙盒,这意味着他们无法访问用户文件,除非他们通过让用户打开文件/文件夹来要求它。您应该确保将其关闭的应用程序关闭,但是您正在测试文件是否存在,如果该文件成功,则似乎没有打开沙盒?
我查看了项目中的.entiTlement文件,发现" App Sandbox"设置为"是"。我将其设置为"否",并且效果很好。
似乎您可以在沙盒模式下检查文件(就像我对我的状况一样),但在试图解压缩时不能访问它们。
再次感谢@trojanfoe:)