2012-02-07 14 views
9

WebKit、WebCore、およびJavaScriptCore用のカスタムバンドルにアプリケーションバンドルがあります。 WebKit、WebCore、またはJavaScriptCoreのシステムバージョンに依存している他のすべてのフレームワークもカスタムバージョンを使用したいと思います。たとえば、Webkitの私のカスタムバージョンは、WebKitのシステムバージョンに依存するプライベートシステムフレームワークを読み込みます。これは、私のWebKitとシステムWebKitの両方がロードされ、通常はクラッシュが直後に起こることを意味します。リリースビルドの環境変数DYLD_FRAMEWORK_PATHを設定する最もクリーンな方法は何ですか?

これは、実行する必要があることを理解する方法は、アプリケーションバンドルが実行を開始する前にDYLD_FRAMEWORK_PATH環境変数を設定することです(フレームワークをロードするための検索順序はここにあります:http://code.google.com/p/macdependency/wiki/SearchPaths)。環境変数はsetenvでコード内で設定できますが、現在実行中のプロセスでは有効になりません。私はそれを再び有効にするためにプロセスを再起動する必要があります。私もこれを避けたいと思います。

私の質問は、私のアプリケーションバンドルを実行する前にDYLD_FRAMEWORK_PATHを設定する最も良い方法です。これはリリースアプリのバンドルでも動作する必要があります。実行可能ファイルが実行される前に誰かが私のアプリケーションバンドルをクリックするたびにスクリプトを実行する方法はありますか?それとも、そこに他の提案がありますか?

ありがとうございます。

+0

「他のすべてのフレームワーク」とはどういう意味ですか?それがプライベートフレームワークだけの場合、プライベートWebKitと関連するフレームワークにリンクするだけでは構いませんか? –

+0

私のカスタムWebkitであるコード山のどこかで、DataDectors.frameworkはウィンドウを右クリック(OSX Lionのみ)し、DataDectorsがプライベートシステムフレームワーク(私によって構築されていない)であればロードされます。これが起こると、DataDectorsはWebKitとJavaScriptCoreのシステムバージョンに依存するため、一度これが起こると、WebKitの2つのコピー、鉱山とシステムが現れます。これは予期せぬ結果とクラッシュを引き起こします。 –

+1

あなたはこれを稼働させることができましたか?私は似たようなことをしようとしています。提案されたアプローチのどれにも幸運を祈ることはありません。 – starkos

答えて

1

info.plistenvironment.plistまたはLSEnvironmentキーをお勧めします。下のリンクをチェックしてください。

https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html

+1

info.plistは絶対パスしか取らず、技術的に移動できるアプリケーションバンドル内にパスが必要です。環境変数を使用している可能性があるため、環境変数を使用している可能性もあります。 –

2

ジェフ・ウォルスキーhas the right idea対象に、Appleのドキュメントを直接参照することもできます。 This threadは、代替の仕様方法に関連するコーナーケース(例えば、~/.bash_profileをあなたのユーザーに直接使用するなど)を含めて、Xcodeでそれをどうやって得るかについての優れた助言も提供します。

私がキミをする理由はあなたですはあなたを助けることができるかもしれないスクリプトを要求しました(そして賞金提供者は同じ問題を抱えているようです)。 Webkit references such a script in its documentationが出てきました。これはthe applicable Webkit source codeから抜き出したいかもしれません。これは、少なくとも開発者によると、これを適切に行う方法についての追加のガイダンスを与えるはずです。

あなたのプロジェクトで最高の運があります。

+0

私はrun-safariスクリプトを見ましたが、スクリプトはうまくいきましたが、誰かがアプリバンドルをクリックするたびにスクリプトを強制的に実行させる方法がわかりません。私は、アプリケーションバンドル内の実行可能ファイルのセッションに設定された環境変数が必要です。 –

+0

@MichaelWildermuth [この質問](http://stackoverflow.com/questions/281372/executing-shell-scripts-from-the-os-x-dock)によると、多くのオプションが存在します。これらのうちの少なくとも1つは、[.command'ファイル](http://stackoverflow.com/a/281386/517815)または[もっと精巧なScript Editorのアプローチ](http: /stackoverflow.com/a/310183/517815)。これらがあなたのために働かないなら、私たちはいくつかの他のオプションについて議論します。 :) – MrGomez