2017-03-24 15 views
0

私はMac App Storeを通じてアプリケーションを配布したいので、Sandboxingを使用する必要があります。問題は、サンドボックスと互換性のある方法でGraphvizを設定する方法がわかりません。 Graphvizのは、プラグインに基づいており、私がいることを必要とします:Mac App Store用のGraphvizの設定とパッケージ化の方法は?

  1. は、プラグインディレクトリを設定するには、環境変数(GVBINDIR)を使用します。変数はサンドボックス内のディレクトリを指していなければなりません。
  2. GVBINDIRディレクトリに、プラグインライブラリを登録するためのconfig6というファイルがあります。 Name.app/Contents/Resourcesからファイルをコピーすることができます。
  3. 同じGVBINDIRに2つのプラグインdylibを持っています。私がそれを正しく理解していれば、展開前とディレクトリとの位置合わせの前に、Mach-O Linkerの設定をプラグインライブラリ用に正しく設定する必要があります。

次のスクリーンショットは、ファイルアクセスを監視し、dot_layoutプラグインにフィルタリングするXcode計測器での実行に基づいています。 dydl access to one of the libraries これは、アプリケーションが起動したときに見つかる(私はそれを依存関係として持っているので、FDが "3"を返すのを見る - それはどういう意味なのか分からない)。しかし、後で、graphvizがプラグインへのアクセスをトリガーすると、dyldはそれを見つけることができません。

私は間違っていますか?

アイデア?事前に多くの感謝!

答えて

1

私はしばらく時間がかかりましたが、結局解決策が見つかりました。 私はgraphvizディレクトリ内に置く以下の内容のスクリプトを作成しました。

INSTALLER_ROOT="/Users/wizardofkneup" 
GVROOT="${INSTALLER_ROOT}/graphviz" 
GVTARGET="${INSTALLER_ROOT}/Documents/xcode/VisualThinkingWorkspace/graphviz" 
PLATFORM_DEVELOPER_BIN_DIR="/usr/bin" 

./configure \ 
    --disable-dependency-tracking \ 
    --enable-shared=no \ 
    --enable-static=yes \ 
    --enable-ltdl=no \ 
    --enable-swig=no \ 
    --enable-tcl=no \ 
    -srcdir=/Users/wizardofkneup/graphviz \ 
    --with-codegens=no \ 
    --with-cgraph=yes \ 
    --with-expat=no \ 
    --with-fontconfig=no \ 
    --with-freetype2=no \ 
    --with-ipsepcola=yes \ 
    --with-libgd=no \ 
    --with-xdot=yes \ 
--with-quartz=yes \ 
    --with-visio=yes \ 
    --with-x=no \ 
    CC="${PLATFORM_DEVELOPER_BIN_DIR}/clang" \ 
    CPP="${PLATFORM_DEVELOPER_BIN_DIR}/clang -E" \ 
    CXX="${PLATFORM_DEVELOPER_BIN_DIR}/clang++" \ 
    OBJC="${PLATFORM_DEVELOPER_BIN_DIR}/clang" \ 
    LD="${PLATFORM_DEVELOPER_BIN_DIR}/ld" 

make 

rm -rf ${GVTARGET} 
mkdir -p ${GVTARGET} 
find . -type f -name '*_C.a' -exec cp -i {} ${GVTARGET} \; 
find . -type f -name '*.h' -exec cp {} -i ${GVTARGET} \; 

いくつかのさらなるコメント:

  • 使用自作はgraphvizのためのソースを取得します。 brew install --build-from-source graphviz
  • コピー& ~/Library/Caches/HomebrewからGRVIZディレクトリにダウンロードしたソースを解凍します。 (私の場合/ Users/wizardofkneup/graphviz)
  • devディレクトリを指す環境変数GRVIZを定義します。 設定し、ヘッダのパスと$ {GRVIZ} /への迅速なインポートパスが**
  • (プラグインのために必要な)リンクC++標準ライブラリを持つために、あなたが(ウォルターのアイデア以下:Compile errors with C++ static library include in Swift project)空.mmファイルを持っている必要があり
  • すべての_C.aファイルを含める - >私たちはCインタフェースにしたい。
  • 名前のマングリングの問題を回避するには、Builtins.cをcファイルにする必要があります。ファイルインスペクタでこれを設定してください
  • まだ知られていない理由で、GRVIZとGVTARGET の両方のディレクトリが必要です。
  • ロードライブラリ: Unable to use dot layout (graphviz as a library)

マイbuiltins.cファイル:

#include "builtins.h" 

extern gvplugin_library_t gvplugin_dot_layout_LTX_library; 
extern gvplugin_library_t gvplugin_neato_layout_LTX_library; 
extern gvplugin_library_t gvplugin_core_LTX_library; 
extern gvplugin_library_t gvplugin_quartz_LTX_library; 
extern gvplugin_library_t gvplugin_visio_LTX_library; 

void loadGraphvizLibraries(GVC_t *gvc) { 
    gvAddLibrary(gvc, &gvplugin_dot_layout_LTX_library); 
    gvAddLibrary(gvc, &gvplugin_neato_layout_LTX_library); 
    gvAddLibrary(gvc, &gvplugin_core_LTX_library); 
    gvAddLibrary(gvc, &gvplugin_quartz_LTX_library); 
    gvAddLibrary(gvc, &gvplugin_visio_LTX_library); 
} 

マイ組み込みコマンド。Hファイル:Xcodeで

#ifndef builtins_h 
#define builtins_h 

#include "/Users/klauskneupner/graphviz/lib/gvc/gvplugin.h" // 
#include "gvc.h" 

extern lt_symlist_t lt_preloaded_symbols[]; 
void loadGraphvizLibraries(GVC_t *gvc); 

#endif /* builtins_h */ 

アプリのブリッジング-がheader.h

#include <gvc.h> 
#import "builtins.h" 

と設定。 enter image description here enter image description here enter image description here

私はこの1つに後で必要:それはgraphvizの関連であったかどうかわかりません。 enter image description here

これが役立つことを願っています。がんばろう。私が何かを見逃したら私に知らせてください。

関連する問題