2017-03-24 63 views
0

我想通過Mac App Store發佈應用程序,因此需要使用沙盒。問題是我不知道如何以兼容Sandbox的方式配置Graphviz。 Graphviz基於插件,需要我:如何配置&打包Graphviz for Mac App Store?

  1. 使用環境變量(GVBINDIR)來設置插件目錄。變量必須指向沙箱中的一個目錄。
  2. 在GVBINDIR目錄中有一個名爲config6的文件,用於註冊插件庫。我可以從那裏複製Name.app/Contents/Resources中的文件。
  3. 在同一個GVBINDIR中有2個插件dylib。如果我理解正確,那麼在部署之前必須爲插件庫正確設置Mach-O鏈接器設置並與目錄保持一致。

以下屏幕截圖基於使用Xcode儀器運行,監視文件訪問,但過濾到dot_layout插件。你可以看到它在應用程序啓動時找到(我將它作爲依賴項,你會看到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目錄中。 (在我的例子/用戶/ wizardofkneup/graphviz)
  • 定義環境變量GRVIZ,指向dev目錄。 組信頭路,迅速導入路徑爲$ {GRVIZ}/**
  • 爲了讓C++鏈接標準庫(需要插件),你需要有一個空.mm文件(以下Walter的想法:Compile errors with C++ static library include in Swift project
  • 包含所有_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文件:

#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" 

而且在Xcode配置。 enter image description here enter image description here enter image description here

我以後需要在這一個:不知道這是否是graphviz的相關。 enter image description here

我希望這有助於。祝你好運。讓我知道如果我錯過了什麼。