Spotlight

RSS for tag

Search for files and index your app’s content for searching using Spotlight.

Posts under Spotlight tag

108 Posts

Post

Replies

Boosts

Views

Activity

How to use core spotlight ?
Watched videos, blog post and downloaded their projects and there the core spot lights works accordingly. I copied code to an empty project and did the same as what they did but still is not working os: macOS and iOS on coredataobject I settled up a attribute to index for spotlight and in object it self I putted the attribute name in display name for spotlight. static let shared = PersistenceController() var spotlightDelegate: NSCoreDataCoreSpotlightDelegate? @MainActor static let preview: PersistenceController = { let result = PersistenceController(inMemory: true) let viewContext = result.container.viewContext for _ in 0..<10 { let newItem = Item(context: viewContext) newItem.timestamp = Date() } do { try viewContext.save() } catch { let nsError = error as NSError fatalError("Unresolved error \(nsError), \(nsError.userInfo)") } return result }() let container: NSPersistentContainer init(inMemory: Bool = false) { container = NSPersistentContainer(name: "SpotLightSearchTest") if inMemory { container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") } container.loadPersistentStores(completionHandler: { [weak self] (storeDescription, error) in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } if let description = self?.container.persistentStoreDescriptions.first { description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey) description.type = NSSQLiteStoreType if let coordinator = self?.container.persistentStoreCoordinator { self?.spotlightDelegate = NSCoreDataCoreSpotlightDelegate( forStoreWith: description, coordinator: coordinator ) self?.spotlightDelegate?.startSpotlightIndexing() } } }) container.viewContext.automaticallyMergesChangesFromParent = true } } in my @main view struct SpotLightSearchTestApp: App { let persistenceController = PersistenceController.shared var body: some Scene { WindowGroup { ContentView() .environment(\.managedObjectContext, persistenceController.container.viewContext) .onContinueUserActivity(CSSearchableItemActionType) {_ in print("") } } } } onContinueUserActivity(CSSearchableItemActionType) {_ in print("") } never gets triggered. Sow What am I missing that they dont explain in the blog post or videos ?
3
0
423
Mar ’25
Spotlight services not fully stopping
I wish to have all spotlight services stopped on my MacBook, however with turning all options off in the settings and also the "Help Apple Improve Search" option, however the option turns back on whenever there is a restart on the laptop as well as background services running. How can I disable this permanently? I have tried to following as well: sudo mdutil -a -i off sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.metadata.mds.user.plist sudo rm /Library/Preferences/com.apple.spotlight.plist sudo launchctl disable system/com.apple.metadata.mds However with ps aux | grep -E "mds|Spotlight|corespotlightd" it still shows spotlight related services running: User1 73830 0.0 0.0 410741568 1680 s018 S+ 11:58am 0:00.00 grep -E mds|Spotlight|corespotlightd root 3170 0.0 0.0 410682288 4816 ?? Ss 20Jan25 4:28.08 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds_stores root 3168 0.0 0.0 427023376 14864 ?? Ss 20Jan25 33:53.97 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds User1 593 0.0 0.1 434378432 45456 ?? S 20Jan25 14:00.32 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/corespotlightd What else can I try in order to stop these and to stay shut off after turning my laptop on and off again?
1
0
476
Feb ’25
Spotlight Search Broken with MacOS Sequoia 15.3.1
I used spotlight search for almost everything I do through cmd+space. However ever since i updated my laptop to MacOS Sequoia 15.3.1, the spotlight search won't give me app results: for example i type "flux" and will get just web-based results, not the app. I tried going into the spotlight settings and only enabling applications to be searched for results and got nothing. I tried the same with the Notes app, i get the same result, i get some notes i wrote as result but not the actual app. It doesn't happen on all apps for example Brave or Spotify work.
1
0
488
Feb ’25
Spotlight doesn't show .html file results
When I search for text in a .html file using the Command-Spacebar spotlight popup the .html file is never shown in the results. On the other hand the .html file does show in the result when I search in the Finder window search field, or when I search in the Terminal using mdfind. Why is this and how can I fix? I want to use spotlight to find .html files. You can reproduce the problem like this: echo spotlighttest > testone.txt % echo spotlighttest > testtwo.html % mdfind spotlighttest 2024-12-30 14:22:28.552 mdfind[28326:550500] [UserQueryParser] Loading keywords and predicates for locale "en_US" 2024-12-30 14:22:28.553 mdfind[28326:550500] [UserQueryParser] Loading keywords and predicates for locale "en" ~/Desktop/Spotlighttest/testone.txt ~/Desktop/Spotlighttest/testtwo.html I believe this shows that both files are index properly, but if you then do Command-Spacebar and search for "Spotlighttest" I think you will see that only testone shows as a result. Edit I believe this is a change in macOS 15.x and used to work correctly in previous macOS
6
0
557
Dec ’24
Results with spotlight in Core Data is not all.
I'm using Core Data to save data. Then I wanna add spotlight support. self.spotlightDelegate = StorageSpotlightDelegate(forStoreWith: description, coordinator: container.persistentStoreCoordinator) let isSpotlightDisable = UserDefaults.standard.bool(forKey: "isSpotlightDisable") if !isSpotlightDisable { self.toggleSpotlightIndexing(enable: true) } public func toggleSpotlightIndexing(enable: Bool) { guard let spotlightDelegate = spotlightDelegate else { return } if enable { spotlightDelegate.startSpotlightIndexing() } else { spotlightDelegate.stopSpotlightIndexing() spotlightDelegate.deleteSpotlightIndex { error in if let error = error { print(error) } } } UserDefaults.standard.set(!enable, forKey: "isSpotlightDisable") } It works fine on an iOS15 device, but not work on iOS 17&18. On iOS 18 devices, I can search the data when the first time to added to Core Data. But if I stop spotlight indexing and restart again, the data is never be searched. How can I to solve this? And I noticed that the problem is also exists in another dictionary app.
0
0
536
Nov ’24
Validate fail Archive bundle is invalid Unable to load ‘Info.plist’ for bundle at path
This bundle is invalid. Unable to load ‘Info.plist’ for bundle at path: ‘My App.app/Contents/Library/Spotlight/MyApp-SpotlightIndex.mdimporter’.. This mdimporter is embedded in my app with a Copy step in Build Phases and when I Archive the compiled app, I get that error when I try to Validate. The app works OK, the mdimporter Spotlight works OK, all runs fine. But the Validate on the Archive does not work, it fails with that error.
1
0
700
Nov ’24
Is semantic search working with CSUserQuery?
I'm following the video tutorial below, using the exact examples, but was not able to semantically match the results: https://developer.apple.com/videos/play/wwdc2024/10131 https://developer.apple.com/documentation/corespotlight/building-a-search-interface-for-your-app In iOS 18 and macOS 15 and later, Spotlight also supports semantic searches of your content, in addition to lexical matching of a search term. I'm on macOS 15.1, so I'd expect it should work now? Or is this depend on Apple Intelligence for some reason? Specifically I've indexed the following: Keyword: "windsurfing carmel" Literal match: the best windsurfing carmel county windsurfing lessons Semantic match: sailboarding lessons the best windsurfing carmel county windsurfing lessons Expected: find semantic match. Actual: only literal match were returned. Because CSUserQuery.prepare is only supported by macOS 15, my switch from CSSearchQuery makes no sense without the semantic search benefits. Did I miss something? I also added the corespotlight delegate extension as directed but was not able to hit the breakpoint as per the video. I wish there is the sample code for this, but couldn't find it.
1
2
944
Oct ’24
Search Messages by Date
How do I search for messages on iPhone by date? Running iOS 18.1. In the Spotlight feature, if I type “messages on 10/14” the top 3 results are messages on that date. But if I tap “search in app” I’m brought to a blank messages screen. This function would help me with work so much, and it’s like we’re almost there- but not. thanks!
1
0
804
Oct ’24
NSMetadataQuery threading issues
The code below is a simplified form of part of my code for my Swift Package Manager, Swift 5.6.1, PromiseKit 6.22.1, macOS command-line executable. It accepts a Mac App Store app ID as the sole argument. If the argument corresponds to an app ID for an app that was installed from the Mac App Store onto your computer, the executable obtains some information from Spotlight via a NSMetadataQuery, then prints it to stdout. I was only able to get the threading to work by calling RunLoop.main.run(). The only way I was able to allow the executable to return instead of being stuck forever on RunLoop.main.run() was to call exit(0) in the closure passed to Promise.done(). The exit(0) causes problems for testing. How can I allow the executable to exit without explicitly calling exit(0), and how can I improve the threading overall? I cannot currently use Swift Concurrency (await/async/TaskGroup) because the executable must support macOS versions that don't support Swift Concurrency. A Swift Concurrency solution variant would be useful as additional info, though, because, sometime in the future, I might be able to drop support for macOS versions older than 10.15. Thanks for any help. import Foundation import PromiseKit guard CommandLine.arguments.count > 1 else { print("Missing adamID argument") exit(1) } guard let adamID = UInt64(CommandLine.arguments[1]) else { print("adamID argument must be a UInt64") exit(2) } _ = appInfo(forAdamID: adamID) .done { appInfo in if let jsonData = try? JSONSerialization.data(withJSONObject: appInfo), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString.replacingOccurrences(of: "\\/", with: "/")) } exit(0) } RunLoop.main.run() func appInfo(forAdamID adamID: UInt64) -> Promise<[String: Any]> { Promise { seal in let query = NSMetadataQuery() query.predicate = NSPredicate(format: "kMDItemAppStoreAdamID == %d", adamID) query.searchScopes = ["/Applications"] var observer: NSObjectProtocol? observer = NotificationCenter.default.addObserver( forName: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: query, queue: .main ) { _ in query.stop() defer { if let observer { NotificationCenter.default.removeObserver(observer) } } var appInfo: [String: Any] = [:] for result in query.results { if let result = result as? NSMetadataItem { var attributes = ["kMDItemPath"] attributes.append(contentsOf: result.attributes) for attribute in attributes { let value = result.value(forAttribute: attribute) switch value { case let date as Date: appInfo[attribute] = ISO8601DateFormatter().string(from: date) default: appInfo[attribute] = value } } } } seal.fulfill(appInfo) } DispatchQueue.main.async { query.start() } } }
7
0
1.2k
Oct ’24
Getting metadata (identity) about an SMB volume's server
I like to find a way to identify network volumes, and whether they're run by certain servers, e.g. specifically whether they're on a Synology NAS. Reason is that Synology, while apparently supporting the Spotlight-over-SMB API, comes with a lot of bugs, requiring me to work around them when searching on those volumes with the macOS Spotlight API. I could, of course, ask the user to "configure" each mounted volume in my software, but I'd rather do this automagically, if possible, as it's less prone to user mistakes. So, my question is: Is there a way to learn a bit more about the server of a mounted network volume? E.g., if I could learn its IP address, I could try to connect to it via http protocol and then maybe get a useful response that identifies it as being from Synology. Or, alternatively, can I tell which SMB volumes are served by a Mac, so that I can at least assume that those handle Spotlight calls correctly, while I assume anything else is buggy (so far, AFAIK, Synology is the only other SMB server that supports Spotlight search). I've tried to find some data in the IORegistry, but that doesn't seem to store anything about network vols. The statfs function doesn't seem to give me anything for that either, nor do the various fcntl calls as far as I could tell. I also checked with the DA apis, e.g.: DASessionRef daSession = DASessionCreate (NULL); CFURLRef furl = CFURLCreateWithFileSystemPath(NULL, CFSTR("/Volumes/TheNAS"), kCFURLPOSIXPathStyle, true); DADiskRef daDisk = DADiskCreateFromVolumePath (NULL, daSession, furl); if (daDisk) { CFDictionaryRef daInfo = DADiskCopyDescription (daDisk); NSLog(@"%@", daInfo); } However, this only prints basic information: DAVolumeKind = smbfs; DAVolumeMountable = 1; DAVolumeName = TheNAS; DAVolumeNetwork = 1; DAVolumePath = "file:///Volumes/TheNAS/"; Where, then, does Finder's "Get Info" get the smb path from, for example?
9
0
2k
Oct ’24
NSMetaData Object IOS
I've been trying to access the NSMetaData information for mb4 objects that I legally downloaded from third party websites without DRM protection. I posted a request in the app forum before and didn't receive any responses from anyone, so it occurred to me to use the example apple code provided on NSMetaData Objects. Steps to reproduce: download the "simpleiclouddocument" example and changed the document extension to Mb4. It seems the query fails because the documents are outside the application directory, so I expanded the search scope to include "NSMetaDataQueryAccessibleExternalDocumentsScope" and the files are still not found. I have the URL of the file that I want the MetaData for. I understand that NSMetaData has an init object that works with a URL but it only works on MacOS and not iOS. I have alternatively tried using LPLinkPresentation and AVMetdataItem but these two alternatives appear to limit the metadata fields I can access and there is no additional object data on how to expand the links to access the other metadata items associated with the file, specifically the Author field as Mb4 files have authors in addition to other audio metadata settings. If there is additional information somewhere on those two classes that identifies how I can access the rest of the metadata fields that would likewise correct my problem.
3
0
572
Sep ’24
Is there a Spotlight volume size limit?
I am asking here after finding no information on this anywhere. There doesn't appear to be any documentation on this. I am having trouble with an 18TB volume over a simple SMB network. One iMac; one Mac Mini with attached storage, ethernet 10g. I have a 6TB volume that has no issues over the same network. Settings are all the same as far as I know. Both hard drives have a VolumeConfiguration.plist /Volumes/Media_1/.Spotlight-V100/VolumeConfiguration.plist /Volumes/Media_2/.Spotlight-V100/VolumeConfiguration.plist Media_1 is the 18TB HDD Media_2 is the 6TB HDD I ran diff on both volumes' VolumeConfiguration.plist and what jumped out was the different string in "PolicyProcess": diff /Users/john/Documents/media_2plist.txt /Users/john/Documents/media_1plist.txt |colordiff | $(brew --prefix git)/share/git-core/contrib/diff-highlight/diff-highlight 3c3 < 16D4F012-5E09-4D3B-ACD4-6768C0DA2048 = Dict { --- > 502C691E-AEE5-4729-B540-722F1C681B19 = Dict { 5,6c5,6 < PolicyProcess = mdutil < PolicyDate = Thu Jul 25 10:07:47 CST 2024 --- > PolicyProcess = STORE_ADD > PolicyDate = Tue Aug 27 19:30:08 CST 2024 Why is Spotlight choosing PolicyProcess = STORE_ADD for the 18TB HDD and PolicyProcess = mdutil for the 6TB HDD ? What is the difference between them and can I choose which PolicyProcess Spotlight uses? I can't find much from the network on the 18TB drive even after it has been re-indexed multiple times. Oddly it seems that while it is being indexed I get better results than once it has completed indexing. Thanks for any insights.
0
0
771
Sep ’24
Crash: _NSMetadataQueryResultArray objectAtIndex
Hello, sometimes if I use NSMetadataQuery to obervse my file changes on macOS, it crash for this reason, its odd and i have no clue for this problem becuse in my code I never get results using index, anyone help? thanks! Application Specific Information: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_NSMetadataQueryResultArray objectAtIndex:]: index (251625) out of bounds (251625)' terminating with uncaught exception of type NSException abort() called
14
0
2k
Aug ’24
Troubleshooting Spotlight Search Visibility for Keywords like "Food" and "Grocery"
I am seeking advice on improving the visibility of my iOS app, "noon Shopping, Food, Grocery," in Spotlight search results for certain keywords. Despite the app's name containing keywords such as "food" and "grocery," it does not seem to appear as prominently in Spotlight searches for these terms as other apps, like "Careem - rides, food & more" which appears readily when searching for "food."
1
1
869
Aug ’24
App document icon in spotlight on mac
Hello. I'm adding my mac app contents to spotlight index. I have created a dedicated exported document type which Finder also recognises and shows documents with my extension "artcl" with correct icon I provide with the app. But it does not happen in Spotlight - it shows my documents with default icon. I create items for Spotligh index as follows: let myType = UTType(filenameExtension: "artcl")! var searchableItems: [CSSearchableItem] = [] for itm in items.reversed() { let attributeSet = CSSearchableItemAttributeSet(contentType: myType) attributeSet.title = item.title attributeSet.contentDescription = item.desc attributeSet.displayName = item.name attributeSet.keywords = [ item.title ] attributeSet.comment = item.title + " " + item.desc attributeSet.contentType = "com.devaikin.spottest.artcl" let id = "artcl." + item.title + "." + item.name let indexItem = CSSearchableItem(uniqueIdentifier: id, domainIdentifier: "artcl", attributeSet: attributeSet) searchableItems.append(indexItem) let defaultIndex = CSSearchableIndex(name: "Spottest") defaultIndex.deleteAllSearchableItems() defaultIndex.beginBatch() defaultIndex.indexSearchableItems(searchableItems) ... Items are added to the spotlight and I can find them, but default icon is displayed while I would expect my exported type icon to be shown like Finder does it. Am I missing something in attributeSet setup?
0
0
715
Aug ’24
Limitations about Indexed Items for CoreSpotlight?
I know that I can index a maximum of 32767 CSSearchableItem in my application. Won't there be performance issues in a scenario where each application has the maximum number of indexes? How does the system deal with this situation? Also, let's say an application indexes the most used 32767 words, won't it abuse the system in this way and be at the top of the search results? What does Apple do about this? Is there documentation somewhere that specifically details this questions?
0
0
657
Jul ’24
Querying imported files and folders on iOS using NSMetadataQuery
Hi all, I’m trying to use NSMetadataQuery on iOS to track changes to folders users have imported from elsewhere but, no matter what I try, I get no results. Following the documentation for searching file metadata with NSMetadataQuery, I’m creating a live query (albeit in Swift) and listening for […]QueryDidFinishGathering and […]QueryDidUpdate. The former fires, with no results, and the latter never fires. I’ve also tried following the Synchronizing Documents in the iCloud Environment example, adding the appropriate Ubiquity keys to my Info.plist and .entitlements file, with no change. I’m importing files and folders using SwiftUI’s View.fileImporter(isPresented:allowedContentTypes:allowsMultipleSelection:onCompletion:), but can’t see how I might security-scope the NSMetadataQuery’s execution (if that’s even a thing?). My test project is on GitHub, but the main parts are below… My query method: extension NSMetadataQueryUbiquitousExternalDocumentsTestApp { func findAccessibleFiles() { query.stop() fileMonitor?.cancel() fileMonitor = Publishers.MergeMany( [ .NSMetadataQueryDidFinishGathering, .NSMetadataQueryDidUpdate ].map { NotificationCenter.default.publisher(for: $0) } ) .receive(on: DispatchQueue.main) .sink { notification in query.disableUpdates() defer { query.enableUpdates() } foundItems = query.results as! [NSMetadataItem] print("Query posted \(notification.name.rawValue) with results: \(query.results)") } query.searchScopes = [ NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope ] query.predicate = NSPredicate( format: "%K LIKE %@", argumentArray: [NSMetadataItemFSNameKey, "*"] ) query.sortDescriptors = [ NSSortDescriptor(key: NSMetadataItemFSNameKey, ascending: true) ] if query.start() { print("Query started") } else { print("Query didn't start for some reason") } } } Info.plist: […] &lt;key&gt;NSUbiquitousContainers&lt;/key&gt; &lt;dict&gt; &lt;key&gt;iCloud.com.stevemarshall.AnnotateML&lt;/key&gt; &lt;dict&gt; &lt;key&gt;NSUbiquitousContainerIsDocumentScopePublic&lt;/key&gt; &lt;true/&gt; &lt;key&gt;NSUbiquitousContainerName&lt;/key&gt; &lt;string&gt;AnnotateML&lt;/string&gt; &lt;key&gt;NSUbiquitousContainerSupportedFolderLevels&lt;/key&gt; &lt;string&gt;ANY&lt;/string&gt; &lt;/dict&gt; &lt;/dict&gt; […]
3
0
2.5k
Jul ’24
How to use core spotlight ?
Watched videos, blog post and downloaded their projects and there the core spot lights works accordingly. I copied code to an empty project and did the same as what they did but still is not working os: macOS and iOS on coredataobject I settled up a attribute to index for spotlight and in object it self I putted the attribute name in display name for spotlight. static let shared = PersistenceController() var spotlightDelegate: NSCoreDataCoreSpotlightDelegate? @MainActor static let preview: PersistenceController = { let result = PersistenceController(inMemory: true) let viewContext = result.container.viewContext for _ in 0..<10 { let newItem = Item(context: viewContext) newItem.timestamp = Date() } do { try viewContext.save() } catch { let nsError = error as NSError fatalError("Unresolved error \(nsError), \(nsError.userInfo)") } return result }() let container: NSPersistentContainer init(inMemory: Bool = false) { container = NSPersistentContainer(name: "SpotLightSearchTest") if inMemory { container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") } container.loadPersistentStores(completionHandler: { [weak self] (storeDescription, error) in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } if let description = self?.container.persistentStoreDescriptions.first { description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey) description.type = NSSQLiteStoreType if let coordinator = self?.container.persistentStoreCoordinator { self?.spotlightDelegate = NSCoreDataCoreSpotlightDelegate( forStoreWith: description, coordinator: coordinator ) self?.spotlightDelegate?.startSpotlightIndexing() } } }) container.viewContext.automaticallyMergesChangesFromParent = true } } in my @main view struct SpotLightSearchTestApp: App { let persistenceController = PersistenceController.shared var body: some Scene { WindowGroup { ContentView() .environment(\.managedObjectContext, persistenceController.container.viewContext) .onContinueUserActivity(CSSearchableItemActionType) {_ in print("") } } } } onContinueUserActivity(CSSearchableItemActionType) {_ in print("") } never gets triggered. Sow What am I missing that they dont explain in the blog post or videos ?
Replies
3
Boosts
0
Views
423
Activity
Mar ’25
Spotlight services not fully stopping
I wish to have all spotlight services stopped on my MacBook, however with turning all options off in the settings and also the "Help Apple Improve Search" option, however the option turns back on whenever there is a restart on the laptop as well as background services running. How can I disable this permanently? I have tried to following as well: sudo mdutil -a -i off sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.metadata.mds.user.plist sudo rm /Library/Preferences/com.apple.spotlight.plist sudo launchctl disable system/com.apple.metadata.mds However with ps aux | grep -E "mds|Spotlight|corespotlightd" it still shows spotlight related services running: User1 73830 0.0 0.0 410741568 1680 s018 S+ 11:58am 0:00.00 grep -E mds|Spotlight|corespotlightd root 3170 0.0 0.0 410682288 4816 ?? Ss 20Jan25 4:28.08 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds_stores root 3168 0.0 0.0 427023376 14864 ?? Ss 20Jan25 33:53.97 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds User1 593 0.0 0.1 434378432 45456 ?? S 20Jan25 14:00.32 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/corespotlightd What else can I try in order to stop these and to stay shut off after turning my laptop on and off again?
Replies
1
Boosts
0
Views
476
Activity
Feb ’25
Spotlight Search Broken with MacOS Sequoia 15.3.1
I used spotlight search for almost everything I do through cmd+space. However ever since i updated my laptop to MacOS Sequoia 15.3.1, the spotlight search won't give me app results: for example i type "flux" and will get just web-based results, not the app. I tried going into the spotlight settings and only enabling applications to be searched for results and got nothing. I tried the same with the Notes app, i get the same result, i get some notes i wrote as result but not the actual app. It doesn't happen on all apps for example Brave or Spotify work.
Replies
1
Boosts
0
Views
488
Activity
Feb ’25
Spotlight doesn't show .html file results
When I search for text in a .html file using the Command-Spacebar spotlight popup the .html file is never shown in the results. On the other hand the .html file does show in the result when I search in the Finder window search field, or when I search in the Terminal using mdfind. Why is this and how can I fix? I want to use spotlight to find .html files. You can reproduce the problem like this: echo spotlighttest > testone.txt % echo spotlighttest > testtwo.html % mdfind spotlighttest 2024-12-30 14:22:28.552 mdfind[28326:550500] [UserQueryParser] Loading keywords and predicates for locale "en_US" 2024-12-30 14:22:28.553 mdfind[28326:550500] [UserQueryParser] Loading keywords and predicates for locale "en" ~/Desktop/Spotlighttest/testone.txt ~/Desktop/Spotlighttest/testtwo.html I believe this shows that both files are index properly, but if you then do Command-Spacebar and search for "Spotlighttest" I think you will see that only testone shows as a result. Edit I believe this is a change in macOS 15.x and used to work correctly in previous macOS
Replies
6
Boosts
0
Views
557
Activity
Dec ’24
How to display the “Search in App” button in Spotlight?
Previous I thought that this is something only Apple apps can do, but I just noticed that Google drive can do that too. But I couldnt find the documentation for that. Does anyone know? thanks!
Replies
1
Boosts
0
Views
694
Activity
Nov ’24
Results with spotlight in Core Data is not all.
I'm using Core Data to save data. Then I wanna add spotlight support. self.spotlightDelegate = StorageSpotlightDelegate(forStoreWith: description, coordinator: container.persistentStoreCoordinator) let isSpotlightDisable = UserDefaults.standard.bool(forKey: "isSpotlightDisable") if !isSpotlightDisable { self.toggleSpotlightIndexing(enable: true) } public func toggleSpotlightIndexing(enable: Bool) { guard let spotlightDelegate = spotlightDelegate else { return } if enable { spotlightDelegate.startSpotlightIndexing() } else { spotlightDelegate.stopSpotlightIndexing() spotlightDelegate.deleteSpotlightIndex { error in if let error = error { print(error) } } } UserDefaults.standard.set(!enable, forKey: "isSpotlightDisable") } It works fine on an iOS15 device, but not work on iOS 17&18. On iOS 18 devices, I can search the data when the first time to added to Core Data. But if I stop spotlight indexing and restart again, the data is never be searched. How can I to solve this? And I noticed that the problem is also exists in another dictionary app.
Replies
0
Boosts
0
Views
536
Activity
Nov ’24
Validate fail Archive bundle is invalid Unable to load ‘Info.plist’ for bundle at path
This bundle is invalid. Unable to load ‘Info.plist’ for bundle at path: ‘My App.app/Contents/Library/Spotlight/MyApp-SpotlightIndex.mdimporter’.. This mdimporter is embedded in my app with a Copy step in Build Phases and when I Archive the compiled app, I get that error when I try to Validate. The app works OK, the mdimporter Spotlight works OK, all runs fine. But the Validate on the Archive does not work, it fails with that error.
Replies
1
Boosts
0
Views
700
Activity
Nov ’24
Is semantic search working with CSUserQuery?
I'm following the video tutorial below, using the exact examples, but was not able to semantically match the results: https://developer.apple.com/videos/play/wwdc2024/10131 https://developer.apple.com/documentation/corespotlight/building-a-search-interface-for-your-app In iOS 18 and macOS 15 and later, Spotlight also supports semantic searches of your content, in addition to lexical matching of a search term. I'm on macOS 15.1, so I'd expect it should work now? Or is this depend on Apple Intelligence for some reason? Specifically I've indexed the following: Keyword: "windsurfing carmel" Literal match: the best windsurfing carmel county windsurfing lessons Semantic match: sailboarding lessons the best windsurfing carmel county windsurfing lessons Expected: find semantic match. Actual: only literal match were returned. Because CSUserQuery.prepare is only supported by macOS 15, my switch from CSSearchQuery makes no sense without the semantic search benefits. Did I miss something? I also added the corespotlight delegate extension as directed but was not able to hit the breakpoint as per the video. I wish there is the sample code for this, but couldn't find it.
Replies
1
Boosts
2
Views
944
Activity
Oct ’24
Search Messages by Date
How do I search for messages on iPhone by date? Running iOS 18.1. In the Spotlight feature, if I type “messages on 10/14” the top 3 results are messages on that date. But if I tap “search in app” I’m brought to a blank messages screen. This function would help me with work so much, and it’s like we’re almost there- but not. thanks!
Replies
1
Boosts
0
Views
804
Activity
Oct ’24
NSMetadataQuery threading issues
The code below is a simplified form of part of my code for my Swift Package Manager, Swift 5.6.1, PromiseKit 6.22.1, macOS command-line executable. It accepts a Mac App Store app ID as the sole argument. If the argument corresponds to an app ID for an app that was installed from the Mac App Store onto your computer, the executable obtains some information from Spotlight via a NSMetadataQuery, then prints it to stdout. I was only able to get the threading to work by calling RunLoop.main.run(). The only way I was able to allow the executable to return instead of being stuck forever on RunLoop.main.run() was to call exit(0) in the closure passed to Promise.done(). The exit(0) causes problems for testing. How can I allow the executable to exit without explicitly calling exit(0), and how can I improve the threading overall? I cannot currently use Swift Concurrency (await/async/TaskGroup) because the executable must support macOS versions that don't support Swift Concurrency. A Swift Concurrency solution variant would be useful as additional info, though, because, sometime in the future, I might be able to drop support for macOS versions older than 10.15. Thanks for any help. import Foundation import PromiseKit guard CommandLine.arguments.count > 1 else { print("Missing adamID argument") exit(1) } guard let adamID = UInt64(CommandLine.arguments[1]) else { print("adamID argument must be a UInt64") exit(2) } _ = appInfo(forAdamID: adamID) .done { appInfo in if let jsonData = try? JSONSerialization.data(withJSONObject: appInfo), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString.replacingOccurrences(of: "\\/", with: "/")) } exit(0) } RunLoop.main.run() func appInfo(forAdamID adamID: UInt64) -> Promise<[String: Any]> { Promise { seal in let query = NSMetadataQuery() query.predicate = NSPredicate(format: "kMDItemAppStoreAdamID == %d", adamID) query.searchScopes = ["/Applications"] var observer: NSObjectProtocol? observer = NotificationCenter.default.addObserver( forName: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: query, queue: .main ) { _ in query.stop() defer { if let observer { NotificationCenter.default.removeObserver(observer) } } var appInfo: [String: Any] = [:] for result in query.results { if let result = result as? NSMetadataItem { var attributes = ["kMDItemPath"] attributes.append(contentsOf: result.attributes) for attribute in attributes { let value = result.value(forAttribute: attribute) switch value { case let date as Date: appInfo[attribute] = ISO8601DateFormatter().string(from: date) default: appInfo[attribute] = value } } } } seal.fulfill(appInfo) } DispatchQueue.main.async { query.start() } } }
Replies
7
Boosts
0
Views
1.2k
Activity
Oct ’24
How to implement the element attached below siri search suggestion
Like the image showing, the element 'Ask ChatGPT' attaches below siri search suggestion , I guess SiriKit or Spotlight can implement it. But i searched a lot, no one introduct the detail technology. Do anyone ever implement it? Please help me. Thanks.
Replies
1
Boosts
0
Views
1k
Activity
Oct ’24
Getting metadata (identity) about an SMB volume's server
I like to find a way to identify network volumes, and whether they're run by certain servers, e.g. specifically whether they're on a Synology NAS. Reason is that Synology, while apparently supporting the Spotlight-over-SMB API, comes with a lot of bugs, requiring me to work around them when searching on those volumes with the macOS Spotlight API. I could, of course, ask the user to "configure" each mounted volume in my software, but I'd rather do this automagically, if possible, as it's less prone to user mistakes. So, my question is: Is there a way to learn a bit more about the server of a mounted network volume? E.g., if I could learn its IP address, I could try to connect to it via http protocol and then maybe get a useful response that identifies it as being from Synology. Or, alternatively, can I tell which SMB volumes are served by a Mac, so that I can at least assume that those handle Spotlight calls correctly, while I assume anything else is buggy (so far, AFAIK, Synology is the only other SMB server that supports Spotlight search). I've tried to find some data in the IORegistry, but that doesn't seem to store anything about network vols. The statfs function doesn't seem to give me anything for that either, nor do the various fcntl calls as far as I could tell. I also checked with the DA apis, e.g.: DASessionRef daSession = DASessionCreate (NULL); CFURLRef furl = CFURLCreateWithFileSystemPath(NULL, CFSTR("/Volumes/TheNAS"), kCFURLPOSIXPathStyle, true); DADiskRef daDisk = DADiskCreateFromVolumePath (NULL, daSession, furl); if (daDisk) { CFDictionaryRef daInfo = DADiskCopyDescription (daDisk); NSLog(@"%@", daInfo); } However, this only prints basic information: DAVolumeKind = smbfs; DAVolumeMountable = 1; DAVolumeName = TheNAS; DAVolumeNetwork = 1; DAVolumePath = "file:///Volumes/TheNAS/"; Where, then, does Finder's "Get Info" get the smb path from, for example?
Replies
9
Boosts
0
Views
2k
Activity
Oct ’24
Can’t start search with “s”
Hello when I type “S” to start a search in spotlight, it does not allow it. No message just undos the action. I would provide screen recording but I think I’m not allowed to upload video.
Replies
3
Boosts
0
Views
542
Activity
Sep ’24
NSMetaData Object IOS
I've been trying to access the NSMetaData information for mb4 objects that I legally downloaded from third party websites without DRM protection. I posted a request in the app forum before and didn't receive any responses from anyone, so it occurred to me to use the example apple code provided on NSMetaData Objects. Steps to reproduce: download the "simpleiclouddocument" example and changed the document extension to Mb4. It seems the query fails because the documents are outside the application directory, so I expanded the search scope to include "NSMetaDataQueryAccessibleExternalDocumentsScope" and the files are still not found. I have the URL of the file that I want the MetaData for. I understand that NSMetaData has an init object that works with a URL but it only works on MacOS and not iOS. I have alternatively tried using LPLinkPresentation and AVMetdataItem but these two alternatives appear to limit the metadata fields I can access and there is no additional object data on how to expand the links to access the other metadata items associated with the file, specifically the Author field as Mb4 files have authors in addition to other audio metadata settings. If there is additional information somewhere on those two classes that identifies how I can access the rest of the metadata fields that would likewise correct my problem.
Replies
3
Boosts
0
Views
572
Activity
Sep ’24
Is there a Spotlight volume size limit?
I am asking here after finding no information on this anywhere. There doesn't appear to be any documentation on this. I am having trouble with an 18TB volume over a simple SMB network. One iMac; one Mac Mini with attached storage, ethernet 10g. I have a 6TB volume that has no issues over the same network. Settings are all the same as far as I know. Both hard drives have a VolumeConfiguration.plist /Volumes/Media_1/.Spotlight-V100/VolumeConfiguration.plist /Volumes/Media_2/.Spotlight-V100/VolumeConfiguration.plist Media_1 is the 18TB HDD Media_2 is the 6TB HDD I ran diff on both volumes' VolumeConfiguration.plist and what jumped out was the different string in "PolicyProcess": diff /Users/john/Documents/media_2plist.txt /Users/john/Documents/media_1plist.txt |colordiff | $(brew --prefix git)/share/git-core/contrib/diff-highlight/diff-highlight 3c3 < 16D4F012-5E09-4D3B-ACD4-6768C0DA2048 = Dict { --- > 502C691E-AEE5-4729-B540-722F1C681B19 = Dict { 5,6c5,6 < PolicyProcess = mdutil < PolicyDate = Thu Jul 25 10:07:47 CST 2024 --- > PolicyProcess = STORE_ADD > PolicyDate = Tue Aug 27 19:30:08 CST 2024 Why is Spotlight choosing PolicyProcess = STORE_ADD for the 18TB HDD and PolicyProcess = mdutil for the 6TB HDD ? What is the difference between them and can I choose which PolicyProcess Spotlight uses? I can't find much from the network on the 18TB drive even after it has been re-indexed multiple times. Oddly it seems that while it is being indexed I get better results than once it has completed indexing. Thanks for any insights.
Replies
0
Boosts
0
Views
771
Activity
Sep ’24
Crash: _NSMetadataQueryResultArray objectAtIndex
Hello, sometimes if I use NSMetadataQuery to obervse my file changes on macOS, it crash for this reason, its odd and i have no clue for this problem becuse in my code I never get results using index, anyone help? thanks! Application Specific Information: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_NSMetadataQueryResultArray objectAtIndex:]: index (251625) out of bounds (251625)' terminating with uncaught exception of type NSException abort() called
Replies
14
Boosts
0
Views
2k
Activity
Aug ’24
Troubleshooting Spotlight Search Visibility for Keywords like "Food" and "Grocery"
I am seeking advice on improving the visibility of my iOS app, "noon Shopping, Food, Grocery," in Spotlight search results for certain keywords. Despite the app's name containing keywords such as "food" and "grocery," it does not seem to appear as prominently in Spotlight searches for these terms as other apps, like "Careem - rides, food & more" which appears readily when searching for "food."
Replies
1
Boosts
1
Views
869
Activity
Aug ’24
App document icon in spotlight on mac
Hello. I'm adding my mac app contents to spotlight index. I have created a dedicated exported document type which Finder also recognises and shows documents with my extension "artcl" with correct icon I provide with the app. But it does not happen in Spotlight - it shows my documents with default icon. I create items for Spotligh index as follows: let myType = UTType(filenameExtension: "artcl")! var searchableItems: [CSSearchableItem] = [] for itm in items.reversed() { let attributeSet = CSSearchableItemAttributeSet(contentType: myType) attributeSet.title = item.title attributeSet.contentDescription = item.desc attributeSet.displayName = item.name attributeSet.keywords = [ item.title ] attributeSet.comment = item.title + " " + item.desc attributeSet.contentType = "com.devaikin.spottest.artcl" let id = "artcl." + item.title + "." + item.name let indexItem = CSSearchableItem(uniqueIdentifier: id, domainIdentifier: "artcl", attributeSet: attributeSet) searchableItems.append(indexItem) let defaultIndex = CSSearchableIndex(name: "Spottest") defaultIndex.deleteAllSearchableItems() defaultIndex.beginBatch() defaultIndex.indexSearchableItems(searchableItems) ... Items are added to the spotlight and I can find them, but default icon is displayed while I would expect my exported type icon to be shown like Finder does it. Am I missing something in attributeSet setup?
Replies
0
Boosts
0
Views
715
Activity
Aug ’24
Limitations about Indexed Items for CoreSpotlight?
I know that I can index a maximum of 32767 CSSearchableItem in my application. Won't there be performance issues in a scenario where each application has the maximum number of indexes? How does the system deal with this situation? Also, let's say an application indexes the most used 32767 words, won't it abuse the system in this way and be at the top of the search results? What does Apple do about this? Is there documentation somewhere that specifically details this questions?
Replies
0
Boosts
0
Views
657
Activity
Jul ’24
Querying imported files and folders on iOS using NSMetadataQuery
Hi all, I’m trying to use NSMetadataQuery on iOS to track changes to folders users have imported from elsewhere but, no matter what I try, I get no results. Following the documentation for searching file metadata with NSMetadataQuery, I’m creating a live query (albeit in Swift) and listening for […]QueryDidFinishGathering and […]QueryDidUpdate. The former fires, with no results, and the latter never fires. I’ve also tried following the Synchronizing Documents in the iCloud Environment example, adding the appropriate Ubiquity keys to my Info.plist and .entitlements file, with no change. I’m importing files and folders using SwiftUI’s View.fileImporter(isPresented:allowedContentTypes:allowsMultipleSelection:onCompletion:), but can’t see how I might security-scope the NSMetadataQuery’s execution (if that’s even a thing?). My test project is on GitHub, but the main parts are below… My query method: extension NSMetadataQueryUbiquitousExternalDocumentsTestApp { func findAccessibleFiles() { query.stop() fileMonitor?.cancel() fileMonitor = Publishers.MergeMany( [ .NSMetadataQueryDidFinishGathering, .NSMetadataQueryDidUpdate ].map { NotificationCenter.default.publisher(for: $0) } ) .receive(on: DispatchQueue.main) .sink { notification in query.disableUpdates() defer { query.enableUpdates() } foundItems = query.results as! [NSMetadataItem] print("Query posted \(notification.name.rawValue) with results: \(query.results)") } query.searchScopes = [ NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope ] query.predicate = NSPredicate( format: "%K LIKE %@", argumentArray: [NSMetadataItemFSNameKey, "*"] ) query.sortDescriptors = [ NSSortDescriptor(key: NSMetadataItemFSNameKey, ascending: true) ] if query.start() { print("Query started") } else { print("Query didn't start for some reason") } } } Info.plist: […] &lt;key&gt;NSUbiquitousContainers&lt;/key&gt; &lt;dict&gt; &lt;key&gt;iCloud.com.stevemarshall.AnnotateML&lt;/key&gt; &lt;dict&gt; &lt;key&gt;NSUbiquitousContainerIsDocumentScopePublic&lt;/key&gt; &lt;true/&gt; &lt;key&gt;NSUbiquitousContainerName&lt;/key&gt; &lt;string&gt;AnnotateML&lt;/string&gt; &lt;key&gt;NSUbiquitousContainerSupportedFolderLevels&lt;/key&gt; &lt;string&gt;ANY&lt;/string&gt; &lt;/dict&gt; &lt;/dict&gt; […]
Replies
3
Boosts
0
Views
2.5k
Activity
Jul ’24