9

Ruby( Sass )で記述されたパッケージをCocoaアプリケーション(Ruby CocoaではなくObjective-C)にバンドルして実行できるようにする方法を見つけようとしています(簡単な方法がない限り、NSTask経由で問題ありません)。ブリッジObjC<->私が知らないココア)。

Sassパッケージは、「geminstall」または「 rakeinstall」を使用してインストールする必要があるものです。そうすることで、大量のファイルが私の〜/.gemディレクトリに配置されます。Cocoaベースのアプリケーションをインストールした人なら誰でも、アプリ内からこのツールを実行できるようにしたいので、ユーザーに追加のインストールプロセスを実行させたくないので、できることを望んでいます。アプリパッケージのResourcesディレクトリに必要なものをすべて埋め込みます。

ただし、Rubyの内部と構造にあまり精通していないため(申し訳ありませんが、ObjC / Cocoaを頭に入れておくだけで問題が発生します!)、〜/にインストールされた1,444個のファイルのどれかがわかりません。 .gemディレクトリ(はい、数えました)アプリケーションに埋め込む必要があり、ディレクトリ参照などを正しく機能させるために何をする必要があるか。

誰かがルビーツールをCocoaアプリケーションに埋め込んだ経験があれば、私は本当にあなたの入力をいただければ幸いです。ルビーがMacOSXにインストールされていることを考えると、これがそれほど難しいとは思っていませんでした...しかし、このパッケージは(通常?非通常?)単一のスクリプトファイル以上のものであるようです...。

4

3 に答える 3

1

gem を特定の場所にインストールできます。

GEM_HOME=path/to/your/project/gems gem install sass

次に、ビルド プロセスの一環として、フォルダーをリソースにコピーします。sass を実行する場合は、gem フォルダーを見つけます。次のように ruby​​ を呼び出します。

NSString *gems_path = …;
NSTask *task = [[NSTask alloc] init];
// you may want to copy NSProcessInfo.processInfo.environment and modify it instead
task.environment = @{ @"GEM_HOME": gems_path };
task.launchPath = @"/usr/bin/ruby";
task.arguments = @[[gems_path stringByAppendingPaths:@[@"bin",@"sass"]], @"rest", @"of", @"your", @"arguments"];
// add handling for I/O
[task launch];

(github に入力、ばかげた間違いがあるかもしれません)

互換性の問題を防ぐために、Ruby (おそらく macruby) もバンドルしたい場合があることに注意してください。そうでない場合は、サポートしている OS X のすべてのバージョン、特に 10.9 を必ずテストしてください。これは、ruby が 2.0 にアップグレードされたためです。

于 2013-10-18T16:59:39.190 に答える