2014-12-08 2 views
3

저는 편집기 부분과 뷰어 부분의 두 부분으로 구성된 다중 플랫폼 프레젠테이션 응용 프로그램을 개발 중입니다. 두 부분은 별도의 프로그램으로 개발됩니다. 사용자는 편집기와 편집기를 사용하여 개별 슬라이드를 편집 한 다음 사용자가 프레젠테이션을보고 싶어 할 때마다 뷰어를 시작합니다.단일 번들로 여러 응용 프로그램

Windows에서 편집기는 ShellExecute()를 수행하여 뷰어를 간단하게 실행할 수 있습니다. Linux 시스템에서 편집기는 뷰어를 fork() 할 수 있지만 Mac OS X에서는 악명 높은 애플리케이션 번들 개념 때문에 복잡해질 수 있습니다. 나는이 문제는 Mac OS X에 해결하는 방법 궁금하네요

그것은 하나의 응용 프로그램 번들 내부의 여러 응용 프로그램을 가지고 아니면 내가 별도의 응용 프로그램 번들로 편집기 및 뷰어 구성 요소를 저장해야합니까 수 있습니까?

또한 편집기에서 뷰어 응용 프로그램으로 정보를 전달하려면 어떻게해야합니까? 즉 시청자는 어떤 파일을 보여야 하는지를 알아야한다. Windows와 Linux에서 WinMain() 또는 main() 함수에 명령 줄 인수로 전달할 수 있습니다. OS X에서는 LSOpenApplication()이 작업을 수행 할 수있는 것처럼 보이지만 현재는 더 이상 사용되지 않습니다. LSOpenApplication()이 가능한지 여부를 알 수 없기 때문에 LSOpenApplication()이 동일한 애플리케이션 내에서 애플리케이션을 열 수 있는지 여부를 알지 못합니다 ...

누군가이 주제에 대해 설명 할 수 있습니까? 감사!

+0

끔찍한 건축 학적 선택처럼 들립니다. 하나의 앱으로 만들어보세요. – Droppy

+0

그건 쉽지 않습니다. 먼저 기술적으로 하나의 묶음 안에 두 개의 응용 프로그램이 있고 다른 하나의 응용 프로그램을 실행하는 것이 가능한지 알고 싶습니다. – Andreas

+0

특히이 편집기가 편집기없이 뷰어로 패키지화 된 경우이 아키텍처에는 아무런 문제가 없습니다. 잘 수행된다면 두 조각을 분리되어 있지만 통합 된 채로 유지하는 것이 훌륭한 디자인 선택 일 수 있습니다. –

답변

6

단일 응용 프로그램 번들 내에 여러 응용 프로그램을 포함 할 수 있습니까? 아니면 편집기 및 뷰어 구성 요소를 별도의 응용 프로그램 번들로 저장합니까?

예, 예.

각 응용 프로그램은 고유 번들이어야합니다. 그러나 번들을 묶음 안에 포함시키는 것은 무료입니다. 이것은 드물지 않습니다. 예를 들어 아이튠즈의 내부를 살펴 보자

/Applications/iTunes.app/Contents/MacOS$ ls -l 
total 116816 
-rwxr-xr-x 1 root wheel 56643216 Oct 15 09:29 iTunes 
-rwxr-xr-x 1 root wheel  42608 Oct 16 20:31 iTunesASUHelper 
drwxr-xr-x 3 root wheel  102 Oct 16 20:33 iTunesHelper.app 
-rw-r--r-- 1 root wheel 3617952 Oct 16 20:31 libgnsdk_dsp.3.06.0.dylib 
-rw-r--r-- 1 root wheel 328928 Oct 16 20:31 libgnsdk_link.3.06.0.dylib 
-rw-r--r-- 1 root wheel 3831312 Oct 16 20:31 libgnsdk_manager.3.06.0.dylib 
-rw-r--r-- 1 root wheel 1511792 Oct 16 20:31 libgnsdk_musicid.3.06.0.dylib 
-rw-r--r-- 1 root wheel 655328 Oct 16 20:31 libgnsdk_submit.3.06.0.dylib 

iTunes.app의 내부 방법 iTunesHelper.app 생활을 참조하십시오? 또한 명령 줄 도구 인 iTunesASUHelper? 이것은 정상이며 정상입니다. 복사 파일 빌드 단계에서 이동하십시오.

이제 앱을 시작하기위한 일반적인 도구는 NSWorkspace입니다. 특정 경우에 대해 openFile:withApplication:을 원할 수도 있습니다. 그러나 XPC가 귀하의 요구 사항을 더 잘 충족시키는 지 확인하기 위해 XPC를보고 싶을 수도 있습니다. 훨씬 더 쉬운 프로세스 간 통신이 가능하지만 전체 GUI 응용 프로그램이 아니라 도우미 서비스에 가장 적합합니다.

+0

감사합니다. 좋은 해결책 인 것 같습니다. 숨겨진 앱 번들을 특정 파일 확장명과 연결할 수도 있습니까? 즉, "iTunesHelper.app"를 Finder의 파일 확장자 * .xyz와 연결할 수 있습니까? 아니면 최상위 수준 앱 번들에서만 가능합니까?내 뷰어 애플 리케이션 (편집기 애플 리케이션 내부에 저장되어 있기 때문에) 또한 단순히 프로젝트 파일을 두 번 클릭하여 파인더에서 실행할 수 있어야합니다 부탁 해요 ... – Andreas

+0

예, 이것은 가능하지만, 그랬어. Launch Services가 번들 내에서 자동으로이를 감지 할 것인지 아니면'LSRegisterURL()'을 호출해야 하는지를 기억할 수 없습니다. '/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump'를 실행하여 앱이 나타나는지 확인할 수 있습니다 (미안 하다니 유감스럽게 생각합니다.) 긴 경로,하지만 그것이 작동하는 방법입니다. 나는 항상'위치 등록을 사용합니다') –

관련 문제