Unable to obtain the same file icons as displayed in Finder for certain file types

I am working on a macOS application, and I need to obtain the same file icons as displayed in Finder for various file types such as PDF, DOC, and others. I have tried using the following Swift code snippet:

let icon = NSWorkspace.shared.icon(forFile: path)

Unfortunately, this approach doesn't seem to work as expected for specific file types, like PDF and Word documents. Instead of obtaining the correct icons as displayed in Finder, I get a default white icon for these files.

I have tried several alternative solutions, but none have yielded the desired results. I would appreciate any suggestions or guidance on how to obtain the correct file icons for these file types, consistent with what is displayed in Finder.

First image (what I got): This is the file icon I obtained using the provided code. Notice that it is different from the one displayed in Finder, as it shows a default white icon instead of the expected file type icon.

Second image (what Finder displays): This is the icon for the corresponding file as displayed in Finder. This is the icon we want to obtain through our code.

Of course, I saved the obtained icon as a file using the following code. I'm not sure if this is related to the issue or not:

if let iconDataResized = icon.tiffRepresentation {
  if let resizedImageData = NSBitmapImageRep(data: iconDataResized)?.representation(using: .png, properties: [:]) {
    let iconFileURL = FileManager.default.temporaryDirectory.appendingPathComponent("test.icns")
    try? FileManager.default.createDirectory(at: iconFileURL, withIntermediateDirectories: true, attributes: nil)
    try? resizedImageData.write(to: URL(fileURLWithPath: iconFileURL.path), options: .atomic)
    }
}

I have also tried this approach: let icon = NSWorkspace.shared.icon(forFileType: url.pathExtension) but the result is the same as before.

Thank you in advance for your help.

Replies

I’m confused. The second image is for a different file (test.pdf vs test.icns). And your code snippet shows you writing PNG data to an .icns file.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

  • Thank you for your reply. test.icns is the icon with the .icns extension in png format that I obtained and stored from the code: let icon = NSWorkspace.shared.icon(forFile: path).The 'path' parameter in the code let icon = NSWorkspace.shared.icon(forFile: path) is the path to that test.pdf. As for test.pdf image(second image), it has nothing to do with my code; it is the icon displayed by macOS Finder. I merely took a screenshot of it, which was my expectation.

Add a Comment