2015-01-29 5 views
7

Qt 5.3.2를 사용하여 Mac 응용 프로그램을 개발했습니다. 이 응용 프로그램은 특정 확장명을 가진 파일을 처리합니다 (.xyz).Mac OS X 파일 연결은 작동하지만 파일 아이콘이 변경되지 않았습니다.

이름이 XYZ.icns 인 아이콘 파일을 만들고이를 내 응용 프로그램 번들 Resource 폴더 (MyApp.app/Contents/Resources/XYZ.icns)에 추가했습니다.

또한 파일 연결을 설정하기 위해 번들의 Info.plist 파일을 수정했습니다. 나는이 항목을 추가 한 :

<key>CFBundleDocumentTypes</key> 
<array> 
    <!-- Registered file accociation --> 
    <dict> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>CFBundleTypeName</key> 
     <string>XYZ</string> 
     <key>CFBundleTypeExtensions</key> 
     <array> 
      <string>xyz</string> 
     </array> 
     <key>CFBundleTypeIconFile</key> 
     <string>XYZ</string> 
    </dict> 
<array> 

그 결과 협회는 그러나 (내 응용 프로그램을 열 않는 파일을 더블 클릭)에 작업 한 파일이 아이콘이 교체되지 않은 (여전히 빈 문서 아이콘 표시).

내가 빠뜨린 것이 있습니까? 나는 예제를 위해 다른 어플리케이션을 살펴 보았고, 내가했던 것 이상은 보이지 않는다.

편집 : 나는 더 많은 테스트를했다.

... 

-------------------------------------------------------------------------------- 
Container mount state: mounted 
bundle id:   105396 
    ... 
    path:   /Applications/MyApp.app 
    name:   MyApp 
    ... 
    -------------------------------------------------------- 
    claim id:   27628 
     name:   XYZ 
     rank:   Default 
     reqCaps:  
     roles:   Editor 
     flags:   relative-icon-path doc-type 
     icon:   Contents/Resources/XYZ.icns 
     bindings:  .xyz 
-------------------------------------------------------------------------------- 
... 

EDIT2 : 나는 파일 아이콘 정보를 포함한 파일 형식에 대한 주장을 찾을 수 있습니다, 그 결과에

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister -dump 

: 나는이 명령으로 실행 서비스 데이터를 덤프 시간 후 마침내 독자적으로 작업해야합니다. 밤새 OS 업데이트가 설치되어 있고 컴퓨터를 종료해야했습니다 (Launch Service는 아마도 스스로를 새로 고쳤습니다). 내 질문을 업데이트 할 것입니다 : 응용 프로그램을 설치하거나 수정할 때 Launch Service가 관련 파일 아이콘을 새로 고치는 방법을 확인하려면 어떻게합니까?

+1

http://www.tekrevue.com/tip/rebuild-launchservices-fix-duplicate-entries-os-xs-open-menu/ –

+0

안녕하세요,이 질문에 대한 답변을 찾았습니까? – Vijay

+0

@vijay se 편집 2. 그것은 독자적으로 작동하지만 나는 이유를 모른다. – gfrigon

답변

1

내 이해가 확실한 (기본 제공) 작업은 데이터베이스를 새로 고치기 위해 서비스 시작을 트리거합니다. 새 .app 번들을 Applications 폴더로 드래그하는 것은 PackageMaker 설치 프로그램을 실행하는 것과 같은 하나의 방아쇠입니다. 그러나 Launch Services 데이터베이스에있는 것과 Finder에서 보여주는 것 사이의 연결이 끊어 질 수 있습니다 (다른 새로 고침/다시 시작할 때까지).

빠른 구글 검색은 명령 줄에서 다시 힘 수 있습니다 제안 : /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

그러나,이 단계 인해 내장 트리거 될 필요가 없습니다, 그래서 당신 않는 한 사용을 주저 할 것 응용 프로그램에서 기본 제공 트리거가 실패하는 이유를 명확하게 식별 할 수 있습니다. 그리고 문제가 Finder의 아이콘 캐시 인 경우이 방법이 도움이되지 않을 수 있습니다.