我正在尝试使用Mono制作适用于Windows,Mac和Linux的便携式应用程序,但我希望有一个标准的DMG文件,允许用户只需单击并将我的应用程序拖到他们的Applications文件夹中苹果电脑。在对this post的最佳答案中,我发现通过在#!
文件夹中创建以MyAppName.app/Contents/MacOSX/
开头的可执行脚本,它可以运行我喜欢的任何内容。
如何让脚本实际运行?
我在XCode中创建了一个空白的“Hello World”Cocoa应用程序,并将.app文件复制到了Applications目录,一切都运行良好。但是,当我用一个以#!
开头的脚本替换MacOSX文件夹中的可执行文件时,它没有运行该脚本。
我尝试了chmod 755 myscript
,我尝试删除旧的可执行文件并将我的脚本重命名为旧文件名,但所有这些操作都是让应用程序停止运行。脚本的权限和文件名都是正确的。
然后我假设可能脚本不起作用,并且XCoded命令行实用程序,再一次只是喷出“Hello World!”,但它仍然没有运行。
“.app”扩展名正式称为“应用程序包”,它们有一些相当不错的文档,但它们似乎都没有告诉我为什么我的方法不起作用。
Here is the .app bundle that I'm working on.在MasOSX目录中,您将找到hello(Hello Word命令行实用程序)和脚本(一行脚本,#!
作为第一行)和XCodeTest(Hello World)可可app)。
答案 0 :(得分: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
包 - 无需使用脚本或自定义启动器。