[英]How can I use spotlight search from swift in the same way like I do it in terminal? NSMetadataQuery?
lets imagine that I need to know which apps was run in 1 week period.让我们想象一下,我需要知道在 1 周内运行了哪些应用程序。
Query for terminal looks like:终端查询如下所示:
mdfind '(InRange(kMDItemFSContentChangeDate,$time.today(-7d),
$time.today(+1d)) && ((kMDItemContentTypeTree=com.apple.application) &&
InRange(kMDItemLastUsedDate,$time.today(-7d),$time.today(+1d))))'
so my query is:所以我的查询是:
'(InRange(kMDItemFSContentChangeDate,$time.today(-7d),
$time.today(+1d)) && ((kMDItemContentTypeTree=com.apple.application) &&
InRange(kMDItemLastUsedDate,$time.today(-7d),$time.today(+1d))))'
How can I run THIS query syntax from swift code and to receive URLs/paths as result of query?如何从swift 代码运行此查询语法并接收 URL/路径作为查询结果?
I have seached for NSMetadataQuery but looks like I cannot use this search query as predicate in it...我已经搜索了 NSMetadataQuery 但看起来我不能将此搜索查询用作其中的谓词...
Did I miss sth?我错过了什么吗?
Or for query with such syntax I need to use some another instrument, but not NSMetadataQuery?或者对于使用这种语法的查询,我需要使用其他工具,而不是 NSMetadataQuery?
heh, there must be used MDQuery instead of NSMetadataQuery:呵呵,必须使用 MDQuery 而不是 NSMetadataQuery:
//set MDQuery string
let queryString = "(InRange(kMDItemFSContentChangeDate,$time.today(-7d),$time.today(+1d)) && ((kMDItemContentTypeTree=com.apple.application) && InRange(kMDItemLastUsedDate,$time.today(-7d),$time.today(+1d))))"
let query = MDQueryCreate(kCFAllocatorDefault, queryString as CFString, nil, nil)
//run the query
MDQueryExecute(query, CFOptionFlags(kMDQuerySynchronous.rawValue))
//loop through query results
for i in 0..<MDQueryGetResultCount(query) {
if let rawPtr = MDQueryGetResultAtIndex(query, i) {
let item = Unmanaged<MDItem>.fromOpaque(rawPtr).takeUnretainedValue()
//grab kMDItemPath value for each entry
if let path = MDItemCopyAttribute(item, kMDItemPath) as? String {
//search for certain TCC Protected Directory Paths
print(path)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.