4

Monoを使用して、Windows、Mac、およびLinuxで動作するポータブルアプリケーションを作成しようとしていますが、ユーザーがアプリケーションをクリックしてMacのアプリケーションフォルダーにドラッグするだけの標準のDMGファイルが必要です。この投稿へのベストアンサーで#!は、フォルダーで始まる実行可能スクリプトを作成することで、MyAppName.app/Contents/MacOSX/好きなように実行できることがわかりました。

スクリプトを実際に実行するにはどうすればよいですか?

XCodeで空白の「HelloWorld」Cocoaアプリを作成し、.appファイルをApplicationsディレクトリにコピーしたところ、すべてがうまく機能しました。しかし、MacOSXフォルダー内の実行可能ファイルを、それで始まるスクリプトに置き換えたところ、スクリプトが実行され#!ませんでした。

chmod 755 myscript古い実行可能ファイルを削除し、スクリプトの名前を古いファイル名に変更しようとしましたが、アプリの実行を完全に停止するだけでした。スクリプトの権限とファイル名はどちらも正しいです。

そこで、スクリプトが機能しない可能性があると想定し、コマンドラインユーティリティをXCodedしました。これも、単に「Hello World!」を出力しますが、それでも実行されませんでした。

「.app」拡張子は正式にはアプリケーションバンドルと呼ばれ、かなり優れたドキュメントがありますが、私のアプローチが機能しない理由はわかりません。

これが私が取り組んでいる.appバンドルです。MasOSXディレクトリ内には、hello(Hello Wordコマンドラインユーティリティ)とscript(最初の行がaである1行のスクリプト#!)とXCodeTest(Hello World cocoaアプリ)があります。

4

1 に答える 1

4

Unixのスクリプト

まず第一に、スクリプトの最初の行の正しい構文は次のとおりです。

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

例えば

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

openコマンドの使用

ただし、openコマンドはランチャーとしてシェルスクリプトをサポートしていないため、これは役に立ちません。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 に答える