4

我正在尝试使用 Mono 制作可在 Windows、Mac 和 Linux 上运行的便携式应用程序,但我想要一个标准 DMG 文件,允许用户简单地单击我的应用程序并将其拖到他们 Mac 上的 Applications 文件夹中。在这篇文章的最佳答案中,我发现通过创建一个以文件夹开头的可执行脚本#!MyAppName.app/Contents/MacOSX/它可以运行我喜欢的任何东西。

如何让脚本实际运行?

我在 XCode 中制作了一个空白的“Hello World”Cocoa 应用程序,并将 .app 文件复制到 Applications 目录,一切正常。但是当我用一个以它开头的脚本替换 MacOSX 文件夹中的可执行文件时#!,并没有运行该脚本。

我试过chmod 755 myscript了,我尝试删除旧的可执行文件并将我的脚本重命名为旧的文件名,但所做的只是阻止应用程序运行。脚本的权限和文件名都是正确的。

因此,我假设脚本可能不起作用,并且 XCoded 是一个命令行实用程序,它会再次简单地输出“Hello World!”,但它仍然没有运行。

“.app”扩展名正式称为应用程序包,它们有一些非常好的文档,但似乎没有一个告诉我为什么我的方法不起作用。

这是我正在处理的 .app 包。在 MasOSX 目录中,您会找到 hello(Hello Word 命令行实用程序)和 script(以 a#!作为第一行的单行脚本)和 XCodeTest(Hello World 可可应用程序)。

4

1 回答 1

4

Unix 中的脚本

好吧,首先,脚本第一行的正确语法是

#! <path-to-script-interpreter> [<optional-args>]

例如

#! /usr/bin/perl -wT
... perl code here

使用open命令

但是,这对您没有帮助,因为该open命令不支持将 shell 脚本作为启动器。您需要编写一些 C / Objective-C 代码并将其编译为本机可执行文件。简单地使用system()execv()在该工具内部也行不通,您必须dlopen()使用 Mono 运行时。

monodevelop/mainbuild/MacOSX/monostub.m为例。这就是 MonoDevelop 用来启动 MonoMac 应用程序的方法。

当您使用 XCode 编写 Cocoa 应用程序时,它会将您的应用程序编译为本机代码,并将生成的二进制文件作为启动器放在Contents/MacOS目录中。

简单的解决方案

为什么不简单地使用 MonoDevelop 创建一个 MonoMac 应用程序?这将自动.app为您创建包 - 无需摆弄脚本或自定义启动器。

于 2013-02-01T08:15:46.943 回答