2017-03-24 13 views
0

Mac App Store를 통해 앱을 배포하고 싶습니다. 따라서 Sandboxing을 사용해야합니다. 문제는 샌드 박스와 호환되는 방식으로 Graphviz를 구성하는 방법을 모르겠다는 것입니다. Graphviz는 플러그인을 기반으로하며 다음을 필요로합니다.Mac App Store 용 Graphviz를 구성하고 패키지하는 방법은 무엇입니까?

  1. 플러그인 변수를 설정하려면 환경 변수 (GVBINDIR)를 사용하십시오. 변수는 샌드 박스 내의 디렉토리를 가리켜 야합니다.
  2. 플러그인 라이브러리를 등록하는 데 사용되는 config6이라는 GVBINDIR 디렉토리 위치에 파일이 있습니다. 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}에 대한 신속한 수입 경로/** (월터의 생각 다음 : Compile errors with C++ static library include in Swift project)는 빈 .mm 파일이 필요합니다 C++ 연결 표준 라이브러리 (플러그인 필요)를 가지고하기 위해
  • 모든 _C.a 파일 포함 -> 우리는 C 인터페이스를 원합니다.
  • Buildins.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" 

그리고 엑스 코드의 구성. 그 그림은 GraphVIZ 관련이 있는지 확실하지 : enter image description here enter image description here

enter image description here 나는이 하나 이상 필요합니다. enter image description here

이 정보가 도움이되기를 바랍니다. 행운을 빕니다. 내가 뭔가를 놓친다면 알려줘.