Swift:如何解开我的bundle中未包含的文件



我对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:)

最新更新