1

次のような状況があります。

いくつかのサードパーティの動的ライブラリを使用するアプリケーションを含む Mac OS バンドルがあり、それらのライブラリはいくつかの環境変数に依存しています。名前を付けましょうENV_VARENV_VARシステム全体に設定すると、他のアプリが壊れる可能性があるため、アプリケーションに何らかの値を設定したいだけです。そして、それはユーザーに対して透過的に機能するはずです。つまり、アプリケーションフォルダーをダブルクリックしてアプリケーションを実行するだけです。どうすれば達成できますか?

注: 動的ライブラリはメイン関数が開始する前にロードされるため、メインでこの変数を設定しても役に立ちません。

4

2 に答える 2

8

キー「LSEnvironment」をアプリ バンドルの Info.plist に追加できます。値は、キーと値の文字列を含むディクショナリにすることができ、これらのキーと値のペアは、Launch Services によってアプリが起動されたときに環境に追加されます (たとえば、ターミナルからではなく、Finder または Dock から)。

<key>LSEnvironment</key>
<dict>
    <key>ENV_VAR</key>
    <string>value</string>
</dict>

ただし、(Snow Leopard での) 私のテストでは、少なくとも既存のアプリの Info.plist を編集するときは、テストが少し不安定でした。基本的に、Launch Services は最初にアプリに遭遇したときにアプリの Info.plist のこの部分をキャッシュし、ディスク上の変更を必ずしも認識しません。たとえば、App Bundle を複製したり、一時的に別のフォルダーに移動したりすることで、Info.plist を再読み込みするように促すことができます。もちろん、過剰な解決策はlsregister、キャッシュをフラッシュして再構築するために使用することです。

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed

このキャッシュの問題はエンド ユーザーには影響しません。Info.plist を微調整するだけです。また、ソース Info.plist に変更を加えてから Xcode を使用してアプリをビルドしても、影響はありません。

于 2013-04-24T10:10:55.250 に答える
1

試すアプリがないため、以下が機能するかどうかはわかりません。アイデアは、端末から環境変数を設定してから、アプリケーションを呼び出すことです。

ENV_VAR=something open -a YourApplication
于 2013-04-24T06:16:03.007 に答える