如何配置&软件包Graphviz for Mac App Store?

时间:2017-03-24 20:58:22

标签: xcode graphviz mac-app-store

我想通过Mac App Store分发应用程序,因此需要使用沙盒。问题是我不知道如何以Sandbox兼容的方式配置Graphviz。 Graphviz基于插件,需要I:

  1. 使用环境变量(GVBINDIR)设置插件目录。该变量必须指向Sandbox中的目录。
  2. 在GVBINDIR目录位置有一个名为config6的文件,用于注册插件库。我可以从那里的Name.app/Contents/Resources复制文件。
  3. 在同一个GVBINDIR中有2个插件dylib。如果我理解正确,那么必须在部署之前为插件库正确设置Mach-O链接器设置并与目录保持一致。
  4. 以下屏幕截图基于使用Xcode工具运行,监控文件访问,但过滤到dot_layout插件。 dydl access to one of the libraries  正如你所看到的,当应用程序启动时会发现它(我将它作为依赖项,你会看到FD返回" 3" - 我真的不知道这意味着什么)。但是后来,当graphviz触发对插件的访问时,dyld找不到它。

    我做错了什么?

    有什么想法吗?非常感谢提前!

1 个答案:

答案 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} \;

进一步评论:

  • 使用Homebrew获取graphviz的源代码。 brew install --build-from-source graphviz
  • copy&将下载的源~/Library/Caches/Homebrew解压缩到GRVIZ目录中。 (在我的情况下/ Users / wizardofkneup / graphviz)
  • 运行sh autogen.sh
  • 使用上面的脚本编译源代码。它会将项目所需的文件复制到${GVTARGET}

现在我们可以专注于Xcode中的Swift项目。

  • 定义环境变量GRVIZ,指向dev目录。 将标题路径和swift导入路径设置为$ {GRVIZ} / **
  • 为了连接c ++标准库(插件需要),你需要一个空的.mm文件(遵循沃尔特的想法: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)

看起来当前(= 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"

Xcode中的配置。 enter image description here enter image description here enter image description here

我稍后需要这个:不确定这是否与graphviz相关。 enter image description here

我希望这会有所帮助。祝好运。如果我错过了什么,请告诉我。