OS X WindowServer (예 : ssh 세션을 통해 실행되는 GUI 응용 프로그램과 명령 줄 응용 프로그램)에 연결되거나 연결되지 않은 응용 프로그램에서 사용할 수있는 OS X 용 프레임 워크를 작성 중입니다. 프레임 워크의 한 클래스는 네트워크 및 모바일 홈 디렉토리 (예 : OS X에서 사용자는 서버의 AFP를 통해 홈 디렉토리 ("네트워크 홈 디렉토리")를 통해 서비스받을 수 있음)를 통해 사용자의 홈 폴더에있는 파일을 추적하는 것입니다. 오프라인 액세스를 위해 동기화 된 동일한 홈 폴더 - "모바일 홈 디렉토리").WindowServer를 사용할 수 있는지 확인 하시겠습니까?
파일 시스템간에 파일을 추적해야하기 때문에 OS X 별칭 (또는 10.6 NSURL
책갈피)보다는 상대 경로를 사용하도록 선택했습니다. 파일을 찾을 수 없으면 별칭 관리자가 사용자에게 깨진 별칭을 다시 연결하라는 메시지를 표시하는 방법과 같이 해당 파일의 위치를 변경하기위한 입력을 사용자에게 요청해야합니다. 응용 프로그램이 WindowServer에 연결되어 있거나 만들 수있는 경우에는 NSOpenPanel
을 사용하는 것처럼 간단합니다. 그러나 응용 프로그램이 WindowServer에 연결할 수 없으면 다른 방법을 사용하여 사용자 입력을 얻어야합니다.
그래서 famework 코드에서 사용할 방법을 어떻게 알 수 있습니까? WindowServer 연결을 사용할 수 있는지 (또는 가능한지) 프로그래밍 방식으로 결정하는 방법이 있습니까?
프레임 워크 클라이언트가 사용자에게 묻는 콜백 메커니즘을 제공하는 대체 아키텍처가 호출 응용 프로그램에서 입력 수집 전략을 제공 할 수 있음을 알고 있습니다. 그러나 호출 응용 프로그램을 최대한 간단하게 만들고 싶습니다. 따라서 가능한 한 프레임 워크에 이러한 세부 정보를 캡슐화하는 것이 가장 좋습니다.
윈도우 서버를 사용할 수없는 경우 CGWindowServerCFMachPort도이 경우 동일한 정보 (이 경우 NULL을 반환 함)를 제공합니다. 포인터 주셔서 감사합니다! –
세션이 현재인지 확인하는 것을 잊지 마십시오 (사용자가 윈도우 서버를 제어합니다 : 빠른 스위치 전환이 없음) –
현재 세션이 없어도'CGWindowServerCFMachPort' 라이온이 성공하므로 좋지 않습니다. 'CGSessionCopyCurrentDictionary'는 조금 더 신뢰할 만하지만 터미널에서 SSH를 말할 수는 없습니다. 왜냐하면 두 가지 모두 현재 전체 세션 정보를 제공하기 때문에 'SSH_CONNECTION'이 유일한 방법입니다. –