2011-12-17 3 views
13

CFBundleDocumentTypes를 Cocoa 응용 프로그램에 동적으로 할당 할 수 있습니까? 런타임 중에 앱이 처리 할 확장을 더 할당 할 수 있습니다.Cocoa 응용 프로그램에 CFBundleDocumentTypes를 동적으로 할당 할 수 있습니까?

현재 Info.plist에서 CFBundleDocumentTypes를 사용하여 처리 할 수있는 응용 프로그램의 일부 확장을 설정했지만 응용 프로그램이 실행되는 동안 (런타임 중에) 코드를 통해이 작업을 수행하려고합니다. 기본적으로 Info.plist 파일을 수정하지 않고도 Launch Services가 새 확장을 인식하도록 할 수 있습니다.

감사합니다.

답변

9

현재 런타임 중에 실행 서비스로 문서 유형을 동적으로 등록 취소하는 응용 프로그램의 공용 API는 입니다.

Open Emu이 바로이 문제에 직면 해 있습니다. 사용자는 Info.plist 파일이 문서 유형을 정의하는 번들 인 에뮬레이터를 선택적으로 다운로드/설치할 수 있습니다. 에뮬레이터를 설치할 때 번들에 정의 된 유형은 응용 프로그램 Info.plist에 정의 된 유형의 일부 여야합니다. Open Emu는 응용 프로그램 Info.plist를 다시 작성합니다 (-updateInfoPlist in OEGameDocumentController 참조).

번들 Info.plist를 덮어 쓰는 것은 Mac App Store의 정책을 위반하는 것입니다.

은 문서 유형의 런타임 등록을 요청합니다. #2526726의 사본으로 마감해야하는 다른 파일도 제출하는 것이 좋습니다. 복제본이라 할지라도 애플은이 기능이 필요한 사람들의 수를 예상 할 수 있도록 파일을 보관하는 것이 중요합니다.

SPI를 통해 가능할 수도 있습니다. 내가 이것을 조사했을 때, 나는 Launch Services에서 _LSRegisterItemFromItemInfo()을 우연히 만났습니다.