gpt4 book ai didi

swift - 如何在沙箱外向/usr/libexec/cups/filter/写入数据

转载 作者:行者123 更新时间:2023-11-30 10:39:10 25 4
gpt4 key购买 nike

我在沙箱中有一个应用程序(用于 App Store 部署),需要将一个文件安装到/usr/libexec/cups/filter/中,并将两个文件安装到/private/etc/cups/中。此安装不是定期完成的,而是从 UI 执行时完成的。当要求“完全磁盘访问”或通过其他方式时这可能吗?

    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(forWritingTo: outFileUrl) 抛出以下异常:

2019-07-29 15:16:46.985094+0200 适用于 macOS 的 ezeep 连接器 [33450:488523] fatal error :“尝试!”表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=4“文件“test”不存在。” UserInfo={NSFilePath=/usr/libexec/cups/filter/test,NSUnderlyingError=0x600000c5e610 {Error Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录”}}:文件/Users/rwelz/Documents/Develop/PROJEKTE/ThinPrint/in GIT/ThinPrint/EZEEP/Xcode/ezeep Connector for macOS/ezeep Connector for 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 轮(不以 root 身份运行时没有写入的访问权限),我收到“您没有权限”将文件“test”保存在文件夹过滤器中”

我需要以 root 身份运行,这在沙箱中是不允许的。

还有其他想法吗?

问候罗伯特

最佳答案

我决定构建一个 pkg 安装程序,可以从沙盒应用程序中的菜单项将其保存到磁盘。应用程序首次启动时还会提供保存对话框。然后用户必须打开 pkg 并以管理员身份进行身份验证才能开始安装。在 pkg 的 postflight 脚本中,它向应用程序发送一个 apple 事件( osascript -e '告诉应用程序 PATH to start_action' 让应用程序知道它可以继续。

事实上,安装程序将虚拟 ppd 与 cups 过滤器一起安装到/Library/Printers/PPDs/Contents/Resources/中,并且我的应用程序查询此打印机驱动程序的 cups(相应的 ppd)以确保/usr/libexec/cups/filer/my_filter 已安装。

现在让我们看看苹果在审查我的应用程序时对该解决方案的看法;)

关于swift - 如何在沙箱外向/usr/libexec/cups/filter/写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57255146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com