Mac OS X 文件关联有效,但文件图标未更改

2024-05-06

我使用 Qt 5.3.2 开发了一个 Mac 应用程序。该应用程序处理具有特定扩展名的文件(比方说.xyz).

我创建了一个名为 XYZ.icns 的图标文件,并将其添加到我的应用程序包资源文件夹中(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>

结果:文件关联有效(双击文件确实会打开我的应用程序),但是图标尚未替换(仍然显示空白文档图标)。

有什么我错过的吗?我查看了其他应用程序的示例,似乎没有什么比我所做的更多的了。

EDIT: 我又做了一些测试。 我使用以下命令转储启动服务数据:

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

在结果中,我可以找到文件类型的声明,包括图标信息:

...

--------------------------------------------------------------------------------
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: 过了一段时间,终于可以自己工作了。一夜之间,安装了操作系统更新,我还必须关闭计算机(启动服务可能会自行刷新某些内容)。我会将我的问题更新为:如何确保Launch Service在安装或修改应用程序时刷新关联的文件图标?


我的理解是某些(内置)操作会触发启动服务来刷新数据库。将新的 .app 包拖到应用程序文件夹是一个触发器,运行 PackageMaker 安装程序也是如此。但是,Launch Services 数据库中的内容与 Finder 显示的内容之间可能存在脱节(直到进行其他刷新/重新启动)。

一些快速的谷歌搜索建议您可以从命令行强制重建:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

但是,由于内置触发器,此步骤应该不是必需的,因此我会犹豫是否使用它,除非您可以清楚地确定内置触发器对您的应用程序失败的原因。如果问题出在 Finder 的图标缓存上,这也可能无济于事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac OS X 文件关联有效,但文件图标未更改 的相关文章

  • 使用 Homebrew 安装 Git 时出现问题 [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Homebrew 升级 Git 时出现问题 https stackoverflow com questions 12362021 problems upgrading git with home
  • CIImage内存未释放

    我正在尝试拍摄一系列图像 混合当时的 X 图像并生成新图像 这是我必须完成此任务的代码 static func blendImages blendFrames Int blendMode CIImage BlendMode imagePat
  • 使用系统 python osx 进行 pip

    我使用 macports 安装了 python26 所以我的系统上正确的 python 是 opt local bin python 然而 当我这样做时 sudo pip install
  • Mysql启动问题|错误!服务器退出而不更新PID文件

    有任何想法吗 Joshs MacBook Pro cdwhp joshc mysql server start Starting MySQL ERROR The server quit without updating PID file u
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
  • 以编程方式检索 OSX 网络/代理配置值

    考虑到我的应用程序具有当前登录的管理员用户的用户 ID 和密码 是否可以从 OSX 网络设置中检索配置值 对 高级 代理 选项卡内容特别感兴趣 通过设置 API 完成 以下是从 OSX 网络设置中获取 PAC URL 字符串的示例 stat
  • 在 OSX 上,Java 线程在不关注时会进入睡眠状态

    我正在编写一个程序来监听系统剪贴板的更改 侦听器在单独的线程上运行 并在剪贴板的内容更改时执行某些操作 例如写入文件 我正在使用轮询剪贴板剪贴板所有者界面 http www javapractices com topic TopicActi
  • 从 Qt 更改屏幕分辨率?

    我想更改屏幕分辨率 然后使用一个 ActiveX 控件 Flash 播放器 进入全屏 显然 仅适用于 Windows 的解决方案就可以了 有 Qt api 吗 还是我需要深入研究 winapi 如果是这样 我该在哪里查找 关键字 谢谢您的帮
  • 当我的 Mac 进入睡眠状态时,我的应用程序会发生什么情况?

    当 Mac OS X 进入睡眠状态时 由于关闭笔记本电脑或从 Apple 菜单中选择 睡眠 它如何暂停正在执行的进程 我认为非窗口进程只是在任意执行点挂起 对于 Cocoa 应用程序来说也是如此 还是操作系统会等到控制权返回到运行循环调度程
  • 如何在不同的QT线程中创建一个窗口?

    我有一个应用程序 其中每个线程 主线程除外 都需要创建自己的窗口 我尝试创建一个线程然后调用this gt exec in the run功能 然而 在我接到那个电话之前我就收到了一个错误 ASSERT failure in QWidget
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • 如何使用 qt 库中的调试符号为 qt 5.5 创建开发 shell

    我有一个开发外壳buildInputs条目包括qt55 qtbase 这很好用 今天 我在 qt 库中发生了段错误 我想要带有调试符号的 qt 库 我看了一下nixpkgs pkgs development libraries qt 5 5
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • MacOSX 下 libpng 的链接器错误

    我正在使用 MacOSX 10 7 2 和 Xcode 4 2 1 我安装了libpng使用端口 我试图在我的应用程序中加载 PNG 图像 但出现链接器错误 Undefined symbols for architecture x86 64
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • Captive Wifi 弹出窗口:单击链接打开 Safari

    我们的 iOS 设备 ipad iphone 等 网络出现问题 连接到 SSID 后 iphone ipad 立即打开强制网络助手 CNA 它就像一个缩小版的浏览器 没有导航按钮等 显示我们的欢迎页面 准备好让用户在网络中验证他的 MAC
  • 检查文件是否是别名 Swift

    如何在 Mac 上检查文件是否为别名 到目前为止 这是我的代码 public func getFiles let folderPath Users timeBro Desktop testfolder let fileManager NSF
  • 左右 mac“命令”键的配置不同吗?

    我想知道是否可以将右侧的 mac 命令 设置为像 ctrl 键一样 但保留左侧 命令 键的默认功能 谢谢 有一个非常棒的应用程序 称为 Ukelele 免费 不幸的是 它无法区分左右命令键 然而 我最近发现了一个更好的应用程序 名为 Con
  • Core Data 与 SQLite 3 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上

随机推荐

  • 如何将内部类的值返回到外部类?

    我想做的是当onSuccess方法执行后 queryLogin return true 而如果onFailuer方法执行后 queryLogin return false 但如您所知 在 java 中 我无法从内部类修改外部类值 所以我只是
  • Xcode:为不同的构建配置设置GCC_PREPROCESSOR_DEFINITIONS?

    我想设置GCC PREPROCESSOR DEFINITIONS对于我的四个构建配置 调试 发布 临时和分发 中的每一个 我希望每个都有不同的设置 我正在查看的屏幕是 目标信息 窗口的 构建 选项卡 当我将配置弹出窗口设置为 调试 时 我可
  • R Studio 命令行中从“+”提示符返回到“>”提示符

    我知道当 R 中的命令行希望您完成当前命令时 提示符会从 按 Esc 键将使您返回到提示符
  • Quickblox 未读消息总数

    您好 如何获取 quicblox 中未读消息的总数 对于所有对话框 有直接的api调用吗 谢谢 这是从 Quickblox Swift 获取未读消息总数的工作代码 let dialogsIDs NSSet NSSet array QBReq
  • 将单元格转换为双精度

    gt gt C 1 2 CF 2 C 1 2 CF 2 gt gt whos C Name Size Bytes Class Attributes C 2x2 478 cell 我怎样才能转换C into double以便 gt gt C
  • 如何通知 AngularJS 表单已由 jQuery 外部填写?

    我在 AngularJS 中有一个页面 其中有一个包含一些字段的表单 加载该页面后 我想要一个书签 单击该书签可根据配置文件中的数据填充字段 正在使用一个 JS 文件 该文件使用 jquery 来填充表单中的数据 当我做 id val ab
  • 使用 Git 维护项目

    我有 2 个项目 实际上这 2 个项目彼此大约 80 相同 主要区别在于语言和商业模式 一个是针对使用英语的更多受众 并且有 9 美元 月的商业模式 另一个是使用本地语言与免费增值商业模式 有时 当我想添加新的特性 功能时 我想将其添加到两
  • Visual Studio Code,调试子进程不起作用

    我有这个确切的问题 https github com Microsoft vscode cpptools issues 511 https github com Microsoft vscode cpptools issues 511 但那
  • html画布绘图显示出来

    我确信这个问题在我还找不到答案之前就已经被问过 我想通过在顶部绘制另一个白色矩形来擦除黑色矩形的一部分 但是许多原始黑色矩形显示出来 就像正在平均一样 canvas document getElementById canvas contex
  • Ansible 和硬件检查

    我必须使用 ansible 检查 Linux 机器上的不同硬件和配置元素 我完全不确定如何做到这一点 RAM 磁盘空间 DNS CPU 我知道我几乎可以找到我想要的所有事实都在 ansible 中 但我不明白如何使用它 例如 我必须检查 R
  • 如何从 coxme 包中的 lmekin 对象中提取 p 值

    我希望能够查看 coxme 包生成的 lmekin 对象的 p 值 eg model lmekin formula height score sex age 1 IID data phenotype df varlist kinship m
  • weak_ptr、make_shared 和内存释放

    一个控制块shared ptr当至少有一个时保持存活weak ptr展示 如果共享指针是用以下命令创建的make shared这意味着对象的整个内存都保持分配状态 对象本身被正确破坏 但由于对象的控制块和内存被分配在一个块中 如make s
  • 如何在Python中每次运行脚本时增加变量?

    我有一个 Python 脚本 我想在每次运行时增加一个全局变量 这可能吗 使用外部文件很容易做到这一点 您可以创建一个函数来为您执行此操作 这样您就可以根据需要将多个文件用于多个变量 尽管在这种情况下您可能想要研究某种序列化并将所有内容存储
  • 在 ionic 3 应用程序中找不到命名空间“google”

    在我尝试在项目中使用 google 变量后 任何人都可以帮我解决这个错误 我进入了 ionic 3 应用程序 npm install save types google maps 将以下内容添加到我的 package json 中 type
  • winpdb 不适用于 python 3.3

    我无法让 rpdb2 与 python 3 3 一起运行 但根据多个来源 这应该是可能的 rpdb2 d myscript py A password should be set to secure debugger client serv
  • 是否有中欧通用的 TimeZoneInfo?

    是否有针对中欧的通用 TimeZoneInfo 将 CET 和 CEST 纳入考虑 我有一个应用程序正在执行以下操作 TimeZoneInfo tzi TimeZoneInfo FindSystemTimeZoneById Central
  • 通过pip安装lxml时出错:需要Microsoft Visual C++ 14.0

    我使用的是 Windows 10 机器 最近从 python 2 7 迁移到 3 5 当尝试通过 pip 安装 lxml 时 它会停止并抛出此错误消息 构建 lxml etree 扩展错误 需要 Microsoft Visual C 14
  • 在Python子目录中创建文件?

    在我的 Python 脚本中 我需要在子目录中创建一个新文件而不更改目录 并且需要从当前目录不断编辑该文件 My code os mkdir datetime dst for ip in open list txt with open ip
  • 使用加权概率和值查找数组中的项目

    上周我正在做的一个简单程序遇到了一些问题 这里有人帮助了我 现在我遇到了另一个问题 我目前有这个代码 var findItem function desiredItem var items item rusty nail probabili
  • Mac OS X 文件关联有效,但文件图标未更改

    我使用 Qt 5 3 2 开发了一个 Mac 应用程序 该应用程序处理具有特定扩展名的文件 比方说 xyz 我创建了一个名为 XYZ icns 的图标文件 并将其添加到我的应用程序包资源文件夹中 MyApp app Contents Res