【问题标题】:A way to get all declared UTIs in Cocoa (Swift/Obj-C)... and/or, determining UTIs defined by App bundles?一种在 Cocoa (Swift/Obj-C) 中获取所有声明的 UTI 的方法......和/或确定由 App 包定义的 UTI?
【发布时间】:2016-12-18 15:47:30
【问题描述】:

我猜这实际上是一个双重问题。一方面,我想知道是否有一种简洁的方法可以枚举给定系统上所有声明的 UTI。

我知道lsregister -dump 是一个选项,考虑到我这边的一些 grep 和解析;但是,我想知道是否没有更好的解决方案。

进一步...我想知道是否有一种方法可以在给定应用程序路径的情况下检索导入/导出的 UTI 列表。我知道反过来应该是可能的(即找到哪个包声明了给定的 UTI)。

我对此感到疑惑的一个原因是,对于问题的第一部分,一个可能的解决方案是遍历所有应用程序并检索它们导入/导出的 UTI(尽管我认为这可能不是非常有效的解决方案)

我已经搜索了我能想到的所有地方,但并没有真正接近答案。到目前为止,它似乎要么解析 lsregister -dump 的输出,要么尝试直接从应用的 Info.plist 文件中读取 UTI 密钥...

最后,在我的搜索中,我遇到了一个可能有用的私有 API,但我完全不知道如何使用它,因为绝对没有在线文档。 . 我说的是"__UTCopyDeclaredTypeIdentifiers"...也许有人知道该函数采用哪些(如果有的话)参数,和/或它究竟返回什么?

【问题讨论】:

    标签: objective-c swift macos cocoa uti


    【解决方案1】:
    import Foundation
    @_silgen_name("_UTCopyDeclaredTypeIdentifiers") func UTCopyDeclaredTypeIdentifiers() -> CFArray
    
    let UTIs = UTCopyDeclaredTypeIdentifiers()
    print(UTIs)
    

    应该打印函数知道的所有 UTI。

    【讨论】:

    • 好吧,这至少解决了这个问题!不敢相信这么简单...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多