macOS 空白文件图标修复

现象

macOS Finder 中 .bib 文件不显示任何图标,呈空白状态。

根因

.bib 文件对应的 UTI(Uniform Type Identifier)是 org.tug.tex.bibtex,该类型由 Syntax Highlight.app(v2.1.30)注册。

该 App 的 Info.plist 中声明:

UTTypeIdentifier = org.tug.tex.bibtex
UTTypeIconFile   = BibTeX

但检查该 App 的 Contents/Resources 目录及编译后的 Assets.car 资源包后确认,并不存在名为 "BibTeX" 的图标资源(无论是独立 .icns 文件还是 asset catalog 中的图片)。这是该 App 本身的资源打包缺陷,导致 Launch Services 按声明查找图标时找不到,Finder 只能显示空白图标。

排查过程

  1. 查询文件 UTI:

    $ mdls -name kMDItemContentType main.bib
    kMDItemContentType = "org.tug.tex.bibtex"
    
  2. 查看 UTI 的注册信息:

    $ PATH="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:$PATH"
    $ lsregister -dump | grep -B1 -A3 "org.tug.tex.bibtex"
    --------------------------------------------------------------------------------
    type id:                    org.tug.tex.bibtex (0x29910)
    bundle:                     Syntax Highlight (0x6ac8)
    uti:                        org.tug.tex.bibtex
    localizedDescription:       "en" = ?, "LSDefaultLocalizedValue" = "BibTeX Database"
    flags:                      active  imported  trusted (0000000000000041)
    iconFiles:                  BibTeX
    --
    

    定位到声明方是 bundle: Syntax Highlight (0x6ac8)iconFiles: BibTeX

  3. 检查该 App bundle 内的图标资源:

    $ find "/Applications/Syntax Highlight.app" -iname "*bibtex*"
    /Applications/Syntax Highlight.app/Contents/Resources/highlight/share/langDefs/bibtex.lang
    /Applications/Syntax Highlight.app/Contents/Extensions/Syntax Hightlight Shortcut Action.appex/Contents/Resources/highlight/share/langDefs/bibtex.lang
    $ find "/Applications/Syntax Highlight.app" -iname "*.icns"
    /Applications/Syntax Highlight.app/Contents/Resources/AppIcon.icns
    $ assetutil -I "/Applications/Syntax Highlight.app/Contents/Resources/Assets.car" | grep -i -A3 "bibtex"
    $ assetutil -I "/Applications/Syntax Highlight.app/Contents/Resources/Assets.car" | grep -i '"Name"'
    

    发现无论是独立的 .icns 文件还是 Assets.car 资源包中,都不存在名为 BibTeX 的图标资源。

  4. 核实 Info.plist 中的声明与实际资源不一致:

    $ plutil -extract UTImportedTypeDeclarations xml1 -o - "/Applications/Syntax Highlight.app/Contents/Info.plist" | grep -B10 "tug.tex.bibtex"
            <dict>
                    <key>UTTypeConformsTo</key>
                    <array>
                            <string>public.text</string>
                    </array>
                    <key>UTTypeDescription</key>
                    <string>BibTeX Database</string>
                    <key>UTTypeIconFile</key>
                    <string>BibTeX</string>
                    <key>UTTypeIdentifier</key>
                    <string>org.tug.tex.bibtex</string>
    

修复步骤

  1. 卸载源头 App:

    brew uninstall --cask syntax-highlight
    
  2. 清理 Launch Services 残留注册:卸载后数据库中仍保留指向已删除 App 的过期类型声明,需手动清理:

    $ lsregister -gc
    $ lsregister -apps local,system,user -R
    
  3. 验证清理结果:

    $ lsregister -dump | grep org.tug.tex.bibtex
    handlerpref id:             org.tug.tex.bibtex (0x4e9c)
    
  4. 刷新 Finder 图标缓存:

    killall Finder
    

最终结果

org.tug.tex.bibtex 类型已无专属图标声明,Finder 回退显示默认打开方式
对应的应用图标(本机为 VS Code),不再是空白状态。

posted @ 2026-07-13 19:48  undefined443  阅读(5)  评论(0)    收藏  举报