在Obj-C中,如何以编程方式设置Mac OS X文件的默认“打开方式”属性?

3

在使用Cocoa(Obj-C)创建一些.mov文件时,我希望将它们默认设置为由特定程序打开,而不是默认程序。这应该是一个文件级别的属性,我不希望更改所有具有相同扩展名的文件的默认程序。这应该从Cocoa本身完成,而不是手动在“上下文菜单”>>“获取信息”>>“打开方式”中完成。


1
你想创建一个自定义的文件扩展名吗?它是要被你的应用程序打开,还是其他应用程序? - l'L'l
@I'L'I,我觉得他可能不想要自定义文件扩展名,而是想知道如何实现“获取信息/打开方式”。 - JWWalker
在帖子中添加文件类型为.mov。它们默认由QuickTime打开,但我创建的文件应该由另一个程序代替打开(当用户双击时)。 - apalopohapa
在沙箱编程模式下,开发一个影响另一个应用程序的应用似乎不是一个好主意。 - El Tomato
2个回答

5
有一个未记录的函数调用可以设置这个值:
// undocumented function call

extern OSStatus _LSSetStrongBindingForRef(const FSRef *inItemRef,
                                          FSRef *inAppRefOrNil);

*如果您在应用程序中使用此功能并将其提交到AppStore,则可能会被拒绝。

我可以确认这在OS X 10.9和10.8中可行。谢谢。AppStore不是问题,这只是用于内部使用。 - apalopohapa

1
作为手动操作和使用Cocoa之间的中间步骤,有一个名为“Set Application for Files”的Automator操作。

我认为没有一种受支持的编程方式来实现它,但有些人已经弄清楚了Finder正在做什么:添加一个类型为'usro'的资源,其中包含应用程序的完整路径。例如,请参见this discussion。注意:自10.8起,资源管理器已被弃用。


关于“usro”资源的信息很有趣。据我所见,Carbon框架的64位切片仍包含资源管理器功能。(而且Finder也是64位的,因此一定有某种编程方式可以实现它。) - Martin R
是的,资源管理器在64位下工作。我的理解是,它主要被弃用是为了表达一种意思:“你真的不应该在新项目中使用旧式资源。” - Wevah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接