У меня есть приложение в песочнице (для развертывания в App Store), которому необходимо установить один файл в /usr/libexec/cups/filter/ и два файла в /private/etc/cups/ . Эта установка выполняется не регулярно, а при выполнении из пользовательского интерфейса. Возможно ли это при запросе «Полный доступ к диску» или другими способами?
var inFilePath = Bundle.main.url(forResource: "thnucups", withExtension: nil, subdirectory: "thnuclnt/x86_64-darwin")!
let inFile: FileHandle? = try! FileHandle(forReadingFrom: inFilePath)
let data = inFile?.readDataToEndOfFile()
inFile?.closeFile()
var destPath = "/usr/libexec/cups/filter/test";
let outFileUrl = URL(fileURLWithPath: destPath)
FileManager.default.createFile(atPath: destPath, contents: nil, attributes: nil)
let outFile: FileHandle? = try! FileHandle(forWritingTo: outFileUrl)
outFile?.write(data!)
outFile?.closeFile()
let outFile: FileHandle? = попробуй! FileHandle(forWritingTo: outFileUrl) выдает следующее исключение:
2019-07-29 15:16:46.985094+0200 ezeep Connector для macOS [33450:488523] Неустранимая ошибка: «попробуйте!» выражение неожиданно вызвало ошибку: Error Domain=NSCocoaErrorDomain Code=4 «Файл «тест» не существует». UserInfo={NSFilePath=/usr/libexec/cups/filter/test, NSUunderlyingError=0x600000c5e610 {Домен ошибки=NSPOSIXErrorDomain Code=2 "Нет такого файла или каталога"}}: файл /Users/rwelz/Documents/Develop/PROJEKTE/ThinPrint /in GIT/ThinPrint/EZEEP/Xcode/ezeep Connector для macOS/ezeep Connector для macOS/AppDelegate.swift, строка 146
Теперь с:
let dialog = NSOpenPanel()
dialog.allowsMultipleSelection = false
dialog.canCreateDirectories = false
dialog.canChooseDirectories = true
dialog.canChooseFiles = false
dialog.begin
{ (result) -> Void in
if result == .OK
{
let url = dialog.url
do
{
try data?.write(to: outFileUrl)
}
catch
{
print("Error: Exception caught: " + error.localizedDescription)
}
}
}
Я больше не получаю исключение, но поскольку /usr/libexec/cups/filter имеет корневое колесо drwxr-xr-x (нет прав доступа для записи, когда он не работает от имени root), я получаю «У вас нет разрешения на сохранение файл "тест" в папке filter"
Мне нужно запустить как root, что не разрешено в песочнице.
Любые другие идеи?
с уважением Роберт