使用NSTask启动可执行文件-沙箱问题?

奥斯卡

我有一个Mac OSX应用程序,该应用程序启动/ Contents / Resources中的可执行文件。该应用程序不打算在App Store上发布,因此我没有打开沙箱。

启动代码:

toolPath = [[[NSBundle mainBundle] pathForResource:@"myexecutable" ofType:@""] copy];
task = [[NSTask alloc] init];
[task setLaunchPath: toolPath];
pipe = [[NSPipe alloc] init];
[task setArguments:[NSArray arrayWithObjects:@"-someArg", someVariable, nil]];
file = [[NSFileHandle alloc] initWithFileDescriptor:[pipe fileHandleForReading].fileDescriptor];
[task setStandardOutput: stderrPipe];
[task launch];

问题是-在Xcode中运行时,所有这些都可以正常工作。将应用程序导出到桌面并运行时,它也可以正常工作。

但是,如果我压缩应用程序,将其上传到Web服务器,然后将其下载到同一台计算机上(或将其直接放入其他Mac的Dropbox中),则该任务将不再启动!我没有在系统控制台中发现任何错误。

我对此问题进行了研究,发现OSX将把一个新的应用标记为“隔离的”特殊许可权。因此,我研究了下载的应用程序与导出的应用程序之间的区别:

从Xcode导出我的应用程序后,对可执行文件的权限:

-rwxr-xr-x  1 Username  staff   65724 21 Jul 16:31 executableName

此时,该应用程序可以正常运行,并且可以通过应用程序内部的按钮启动可执行文件。

压缩应用程序后,将其上传到服务器,下载,解压缩并打开该应用程序,并接受“此应用程序是从Internet下载的”对话框:

-rwxr-xr-x  1 Username  staff   65724 21 Jul 16:31 executableName
    com.apple.quarantine        26 

此时,当我按下应用程序中的按钮时,什么也不会发生。

如果我随后xattr -rd com.apple.quarantine在整个应用程序上运行,则隔离通知将被删除:

-rwxr-xr-x  1 Username  staff   65724 21 Jul 16:31 executableName

但是可执行文件仍然没有启动!

至此,我现在对桌面应用程序具有以下权限:

/目录/ MacOS:

-rwxr-xr-x  1 Username  staff  407728 21 Jul 16:31 appName

/目录/资源:

-rwxr-xr-x  1 Username  staff   65724 21 Jul 16:31 executableName

在我使用xattr -rd的下载应用程序上:

/目录/ MacOS:

-rwxr-xr-x  1 Username  staff  407728 21 Jul 16:31 appName

/目录/资源:

-rwxr-xr-x  1 Username  staff   65724 21 Jul 16:31 executableName

第一个应用程序运行正常,第二个应用程序从不启动可执行文件。到底他妈发生了什么?这是同一台应用程序,在同一台计算机上,具有相同的权限,但是下载的应用程序无法正常工作。

在不同计算机上的所有OSX版本中都会出现此问题。

赫利兹

com.apple.security.inherit权利添加到助手应用程序中为我解决了此问题。

Could not set sandbox profile data: Operation not permitted (1)当我尝试使用NSTask启动我的助手应用程序时,该应用程序崩溃了

从Apple文档中:

如果您的应用程序使用通过posix_spawn函数或NSTask类创建的子进程,则可以配置该子进程以继承其父级的沙箱。但是,使用子进程不能提供使用XPC服务所提供的安全性。

要启用沙箱继承,子目标必须恰好使用两个应用程序沙箱授权密钥:com.apple.security.app-sandboxcom.apple.security.inherit如果您指定任何其他应用程序沙盒授权,则系统将中止子进程。但是,您可以通过iCloud和通知权利将其他功能授予子进程。

Xcode项目中的主应用程序的继承权利绝不能具有YES值。

希望此解决方案有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用NSTask启动可执行文件-沙箱问题?

来自分类Dev

cabal通过沙箱从Hackage安装可执行文件?

来自分类Dev

在Java的“沙箱”中运行可执行文件

来自分类Dev

在哪里可以找到(并运行)使用阴谋沙箱编译的可执行文件?

来自分类Dev

我在哪里可以找到(并运行)使用阴谋沙箱编译的可执行文件?

来自分类Dev

$ PATH和可执行文件有问题

来自分类Dev

JaCoCo缺少可执行文件问题

来自分类Dev

C ++可执行文件的问题:While循环和If / Else If / Else

来自分类Dev

Flatpak Intellij Idea-Subversion可执行文件问题

来自分类Dev

Windows上的PyInstaller可执行文件由于PortAudio库问题而无法运行(OSError)

来自分类Dev

函数,别名和可执行文件中的连字符是否存在问题?

来自分类Dev

chmod 001或111?Unix可执行文件的权限问题

来自分类Dev

如何解决类似的“链接 CXX 可执行文件”问题

来自分类Dev

启动可执行文件

来自分类Dev

Android棒棒糖的FFMPEG问题。错误:仅支持与位置无关的可执行文件(PIE)

来自分类Dev

在Sublime Text 2上设置git时出现问题“在PATH中找不到可执行文件'[''git']'”。

来自分类Dev

Git:使用可执行文件

来自分类Dev

Git:使用可执行文件

来自分类Dev

dyld:尝试使用NSTask从Objective-C运行Fortran可执行文件时未加载库

来自分类Dev

在启动时使用 sudo 启动可执行文件 - 找不到命令

来自分类Dev

“使用回滚可执行文件”不强制设置可执行文件

来自分类Dev

从C ++启动独立可执行文件

来自分类Dev

无法从C ++启动可执行文件

来自分类Dev

在bash中启动的可执行文件顺序

来自分类Dev

从辅助线程启动可执行文件

来自分类Dev

如何防止这些可执行文件启动?

来自分类Dev

更改MSVC中可执行文件的启动目录

来自分类Dev

需要输入“ Y”的Powershell启动可执行文件

来自分类Dev

无法在Nautilus中启动图形可执行文件

Related 相关文章

  1. 1

    使用NSTask启动可执行文件-沙箱问题?

  2. 2

    cabal通过沙箱从Hackage安装可执行文件?

  3. 3

    在Java的“沙箱”中运行可执行文件

  4. 4

    在哪里可以找到(并运行)使用阴谋沙箱编译的可执行文件?

  5. 5

    我在哪里可以找到(并运行)使用阴谋沙箱编译的可执行文件?

  6. 6

    $ PATH和可执行文件有问题

  7. 7

    JaCoCo缺少可执行文件问题

  8. 8

    C ++可执行文件的问题:While循环和If / Else If / Else

  9. 9

    Flatpak Intellij Idea-Subversion可执行文件问题

  10. 10

    Windows上的PyInstaller可执行文件由于PortAudio库问题而无法运行(OSError)

  11. 11

    函数,别名和可执行文件中的连字符是否存在问题?

  12. 12

    chmod 001或111?Unix可执行文件的权限问题

  13. 13

    如何解决类似的“链接 CXX 可执行文件”问题

  14. 14

    启动可执行文件

  15. 15

    Android棒棒糖的FFMPEG问题。错误:仅支持与位置无关的可执行文件(PIE)

  16. 16

    在Sublime Text 2上设置git时出现问题“在PATH中找不到可执行文件'[''git']'”。

  17. 17

    Git:使用可执行文件

  18. 18

    Git:使用可执行文件

  19. 19

    dyld:尝试使用NSTask从Objective-C运行Fortran可执行文件时未加载库

  20. 20

    在启动时使用 sudo 启动可执行文件 - 找不到命令

  21. 21

    “使用回滚可执行文件”不强制设置可执行文件

  22. 22

    从C ++启动独立可执行文件

  23. 23

    无法从C ++启动可执行文件

  24. 24

    在bash中启动的可执行文件顺序

  25. 25

    从辅助线程启动可执行文件

  26. 26

    如何防止这些可执行文件启动?

  27. 27

    更改MSVC中可执行文件的启动目录

  28. 28

    需要输入“ Y”的Powershell启动可执行文件

  29. 29

    无法在Nautilus中启动图形可执行文件

热门标签

归档