If I have a file, I can get the icon by doing something such as:
NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile: @\"myFile.png\"];
Here is the Swift 5 version of PetrV's answer:
public extension NSWorkspace {
/// Returns an image containing the icon for files of the same type as the file at the specified path.
///
/// - Parameter filePath: The full path to the file.
/// - Returns: The icon associated with files of the same type as the file at the given path.
func icon(forFileTypeAtSamplePath filePath: String) -> NSImage? {
let fileExtension = URL(fileURLWithPath: filePath).pathExtension
guard
let unmanagedFileUti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
fileExtension as CFString, nil),
let fileUti = unmanagedFileUti.takeRetainedValue() as String?
else {
assertionFailure("Should've gotten a UTI for \(fileExtension)")
return nil
}
return NSWorkspace.shared.icon(forFileType: fileUti)
}
}