如何在Mac App Store上的os x应用程序中捆绑命令行实用程序(使用沙盒授权)

用户名

我有一个c ++命令行应用程序,我已经将其编译为可执行文件并将其添加到我的Xcode项目中。我还将“复制文件”部分添加到了项目属性的“构建阶段”选项卡中,并将我的可执行文件与“可执行文件”目标一起添加了。当我构建应用程序时,当我在已构建的test.app上查看软件包内容时,会在test.app/Contents/MacOS文件夹中看到它。

我还在项目的“功能”选项卡上启用了“应用沙箱”(这样我就可以通过mac应用商店分发应用了。

我如何向用户公开与应用程序捆绑在一起的命令行可执行文件,以便他们可以从命令行(终端)运行它?我无法在搜索引擎或StackOverflow上找到有关如何将此文件(或指向该文件的符号链接)放入用户PATH的任何信息。我尝试使用NSTask创建符号链接,但只有在禁用应用程序沙箱的情况下才有效(这很有意义)。有人做过吗?您是如何工作的?还是只能在您的应用程序中通过代码执行这些可执行文件?

戈登·戴维森

我看不出这样做的好方法。首先,澄清一下:PATH是包含可执行文件的目录列表,而不是可执行文件列表;无法将单个可执行文件添加到PATH。相反,您需要做的是将可执行文件放入用户PATH中的目录之一,或者将可执行文件所在的目录添加到PATH中。

在OS X上,默认PATH是/ usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin。不应从系统默认值修改前4个目录,因此只能使用/ usr / local / bin。但是创建它(默认情况下不存在)将需要管理员(实际上是root)权限,这是App Store策略所不允许的。这样就可以了。

这样就可以修改用户的PATH。在整个系统范围内执行此操作的“正确”方法是将文件放置在/etc/paths.d中,该文件需要管理员(/ root)权限,所以也没有。从技术上来讲,修改/ etc / paths文件是可以的,但是存在相同的权限问题,而且这是进行自定义的错误方法。

下一种可能性是修改(/创建)用户的外壳初始化脚本。这会行得通,但是完全做到这一点将变得很混乱,因为用户可能会使用多个shell,每个shell都有用户可能会或可能不会创建的几种不同的可能的初始化脚本...

让我们举一个非常简单的例子:一个只使用过bash并且还没有任何初始化脚本的用户。当bash的“登录”实例启动时,它将查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile(按此顺序),并运行找到的第一个实例。但是您的应用程序不知道他使用哪个shell,因此最好创建〜/ .profile,以便zsh和ksh也将使用它。因此,您的应用会创建〜/ .profile并将其放入其中:

PATH="$PATH:/Applications/MyApp.app/Contents/Helpers"

太好了吧?是的,太棒了,直到用户运行其他想要设置其PATH的内容,它会创建〜/ .bash_profile,这将覆盖您的设置。之后,可执行文件将位于zsh和ksh的PATH中,而不是bash。Whee。

然后有一天,用户决定改用tcsh,并且它(和csh)具有完全不同但同样混乱的可能的初始化文件...

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在我的 macOS 应用程序中嵌入第 3 方命令行实用程序并将其提交到 Mac App Store 吗?

Mac App Store上出售的沙盒应用程序可以访问系统文件夹吗?

如何在Mac OS中使用命令行参数运行应用程序

如何为OS X命令行实用程序构建静态Realm库?

OS X的defaults命令如何访问沙盒应用程序的首选项?

如何将Instruments.app附加到OS X上的命令行程序?

使用launchagents mac os x在后台运行命令行应用程序

如何使用.bash_profile中定义的别名从命令行关闭OS X应用程序?

在Mac OS X上使用命令查找扩展的POSIX实用程序?

检查C ++程序是否在Mac上作为应用程序捆绑包或命令行运行

Python-如何在Mac OS X上的GUI应用程序中创建守护程序?

如何在Mac / Windows上捆绑Java应用程序?

在Azure Web App上使用Azure存储运行exe命令行应用程序

Mac命令行应用程序上的CoreBluetooth

如何在Mac OS X的Karabiner应用程序中修复private.xml,以在Preview.app中启用类似Vim的导航?

在Mac OS X上将SVG转换为PNG的命令行应用程序

如何将下载的文件(音频、文档)自动保存到 mac os x 沙盒应用程序中的用户下载文件夹?

Mac OS App Store应用程序的altool upload-app的预期文件格式是什么?

如何在 Mac OS 上使用 xterm

如何在App Store上发布iOS应用程序,但不允许iPad兼容?

在Mac OS X上,如何从终端登录Console.app?

如何在OS X上仅使用GNU实用程序设置单独的bash环境?

py2app pyqt缺少库,应用程序无法在Mac OS X上启动

如何在Mac OS应用程序中使用canOpenURL?

如何在Mac OS X中最大化整个屏幕上的应用程序

如何在Mac OS X上找到正在运行的应用程序的路径

如何在命令行上的Mac OS中完全拉平PDF?

如何在ubuntu中安装vips命令行实用程序?

如何在命令行工具中实现实用程序功能