gpt4 book ai didi

swift - 如何检索所有可用的 Finder 标签?

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:08 25 4
gpt4 key购买 nike

我正在尝试检索所有可用的 Finder 标签的列表。

我找到了 NSWorkspace().fileLabels,它返回一个数组,但只是一个标签颜色的数组,而不是标签本身:

print(NSWorkspace.shared().fileLabels) // prints ["None", "Gray", "Green", "Purple", "Blue", "Yellow", "Red", "Orange"]

如您所见,这甚至不是所有默认标签,它缺少HomeWorkImportant,显然不是有我创建的任何自定义的。看起来它只是与 fileLabelColors 搭配的好听的名字。

我发现 NSMetadataQuery 用于实际搜索内容,但如何获取我在 Finder 中创建的所有标签的列表?

最佳答案

NSWorkspace.shared().fileLabels 仅返回创建用户帐户时可用的系统标签(默认系统标签)。

很遗憾,macOS 中没有 API 可以检索您在 Finder 中自己创建的标签。

解决方案是解析~/Library/SyncedPreferences/com.apple.finder.plist:

func allTagLabels() -> [String] {
// this doesn't work if the app is Sandboxed:
// the users would have to point to the file themselves with NSOpenPanel
let url = URL(fileURLWithPath: "\(NSHomeDirectory())/Library/SyncedPreferences/com.apple.finder.plist")
let keyPath = "values.FinderTagDict.value.FinderTags"
if let d = try? Data(contentsOf: url) {
if let plist = try? PropertyListSerialization.propertyList(from: d, options: [], format: nil),
let pdict = plist as? NSDictionary,
let ftags = pdict.value(forKeyPath: keyPath) as? [[AnyHashable: Any]]
{
return ftags.flatMap { $0["n"] as? String }
}
}
return []
}

let all = allTagLabels()
print(all)

这会获取所有 Finder tags 标签。

您也可以只选择自定义标签(忽略系统标签):

func customTagLabels() -> [String] {
let url = URL(fileURLWithPath: "\(NSHomeDirectory())/Library/SyncedPreferences/com.apple.finder.plist")
let keyPath = "values.FinderTagDict.value.FinderTags"
if let d = try? Data(contentsOf: url) {
if let plist = try? PropertyListSerialization.propertyList(from: d, options: [], format: nil),
let pdict = plist as? NSDictionary,
let ftags = pdict.value(forKeyPath: keyPath) as? [[AnyHashable: Any]]
{
return ftags.flatMap { tag in
if let n = tag["n"] as? String,
tag.values.count != 2
{
return n
}
return nil
}
}
}
return []
}

关于swift - 如何检索所有可用的 Finder 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41779969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com