我对Swift编程不是很熟悉,但是我需要在Swift中编写一个可以解压缩文件(然后启动程序)的小工具。我需要解压缩我的应用程序捆绑包中未包含的文件。它位于/Users/me/folder1/folder2/openjdk-11.0.2.zip
我尝试了库“ Zip”,“ ZipFoundation”和“ SSZipArchive”。从到目前为止的内容来看,我认为尝试过的库需要将zip文件放在应用程序捆绑包中,但我不确定。
我尝试使用“ 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
导入了它。我的Podfile中也有它(和其他库)。
我尝试使用“ 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文件确实是一个问题吗?有人可以告诉我我做错了什么吗? 预先感谢
答案 0 :(得分:0)
@trojanfoe在评论中提到:
Mac应用程序默认情况下为沙箱,这意味着它们无法访问用户的文件,除非他们通过让用户打开文件/文件夹来请求。您应该确保已为您的应用程序将其关闭,但是您正在测试文件是否存在,如果成功,则好像沙箱未打开?
我查看了项目中的.entitlements文件,发现“应用程序沙箱”设置为“是”。我将其设置为“否”,效果很好。
似乎您可以在沙盒模式下检查文件(就像我对我的条件所做的那样),但是在尝试解压缩文件时无法访问它们。
再次感谢@trojanfoe:)