3

アプリケーションで使用されているフレームワークに加えて、アプリケーションバンドル内に含まれているいくつかのXPCサービスがあります。すべてのバンドルを、アプリケーションのFrameworksフォルダー内に含まれるフレームワークの単一のコピーにリンクするにはどうすればよいですか(フレームワークをすべてのバンドルにコピーするのではありません)?すべてのサービスとアプリケーションはサンドボックス化されているため、XPCサービスがサンドボックスの外部にあるため、メインのアプリバンドルのフレームワークにアクセスできるかどうかはわかりません。

4

2 に答える 2

4

をご覧になりました@rpathか?これはすべて、フレームワークのビルド設定を変更できることを前提としています (OS X 10.5 以降をターゲットにする必要があります)。

  1. フレームワークのインストール パスと名前を設定します。
    • INSTALL_PATH = @rpath
    • LD_DYLIB_INSTALL_NAME = @rpath/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/$(PRODUCT_NAME)
  2. フレームワークが含まれるように、アプリと XPC の実行パスの検索パスを設定します。
    • アプリの場合:LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks/
    • XPC サービスの場合:LD_RUNPATH_SEARCH_PATHS = @loader_path/../../../../Frameworks
    • ランパスの検索パスは、必要に応じて複数の値に設定できます。

詳細については、 @rpathDave Dribin の投稿「<a href="http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/" rel="nofollow noreferrer">Using @rpath: Why」を参照してください。 and How」および Mike Ash の金曜日の Q&A 「<a href="http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html" rel="nofollow noreferrer">名前のリンクとインストール」。

編集:私はこれをいくつかのプロジェクトに使用しましたが、うまくいきます。

于 2013-01-14T21:03:29.980 に答える
2

これは、を使用して可能install_name_toolです。例:

install_name_tool -change @executable_path/../Frameworks/MyFramework.framework/Versions/A/MyFramework @executable_path/../../../../Frameworks/MyFramework.framework/Versions/A/MyFramework "$BUILT_PRODUCTS_DIR/MyApp.app/Contents/XPCServices/com.me.MyApp.SomeXPC.xpc/Contents/MacOS/com.me.MyApp.SomeXPC"

詳細はこちら

于 2013-01-14T01:34:29.553 に答える