我想通过Mac App Store分发应用程序,因此需要使用沙盒。问题是我不知道如何以Sandbox兼容的方式配置Graphviz。 Graphviz基于插件,需要I:
以下屏幕截图基于使用Xcode工具运行,监控文件访问,但过滤到dot_layout插件。
正如你所看到的,当应用程序启动时会发现它(我将它作为依赖项,你会看到FD返回" 3" - 我真的不知道这意味着什么)。但是后来,当graphviz触发对插件的访问时,dyld找不到它。
我做错了什么?
有什么想法吗?非常感谢提前!
答案 0 :(得分: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} \;
进一步评论:
brew install --build-from-source graphviz
~/Library/Caches/Homebrew
解压缩到GRVIZ目录中。 (在我的情况下/ Users / wizardofkneup / graphviz)sh autogen.sh
${GVTARGET}
现在我们可以专注于Xcode中的Swift项目。
看起来当前(= 2019)graphviz构建依赖于glib。
为了获得静态glib,首先需要在本地构建。
为此,在构建时应用meson _build -Diconv=native
。可能需要先安装libiconv
。
我的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);
}
我的builtins.h文件:
#ifndef builtins_h
#define builtins_h
#include "/Users/wizardofkneup/graphviz/lib/gvc/gvplugin.h" //
#include "gvc.h"
extern lt_symlist_t lt_preloaded_symbols[];
void loadGraphvizLibraries(GVC_t *gvc);
#endif /* builtins_h */
应用程序的Bridging-header.h
#include <gvc.h>
#import "builtins.h"
我希望这会有所帮助。祝好运。如果我错过了什么,请告诉我。