Swift: Как распаковать файл, не содержащийся в моем комплекте? - PullRequest
0 голосов
/ 15 февраля 2019

Я не очень знаком с программированием на 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-файл не содержится в моем комплекте?Может кто-нибудь сказать мне, что я сделал не так?Заранее спасибо

1 Ответ

0 голосов
/ 15 февраля 2019

@ trojanfoe, упомянутое в комментариях:

Приложения Mac по умолчанию помещаются в «песочницу», что означает, что они не имеют доступа к файлам пользователя, если не попросят его, заставив пользователя открыть файл / папку.,Вы должны убедиться, что он отключен для вашего приложения, однако вы проверяете, существует ли файл, и если это успешно, то похоже, что песочница не включена?

Я посмотрел файл .entitlements вмой проект и обнаружил, что "App Sandbox" был установлен в "ДА".Я установил для него «НЕТ», и он работал отлично.

Кажется, что вы можете проверить файл в режиме песочницы (как я делал с моим условием), но не получить к ним доступ при попытке разархивировать их.

Еще раз спасибо @trojanfoe:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...