Blog

Getting images from the AppKit pasteboard

Jun 3, 2022 swiftpasteboardmulti-platformuikitappkit

In this post, we’ll take a quick look at how we can fetch images from the AppKit NSPasteboard, which lacks a lot of functionality compared to the UIKit UIPasteboard.

Unlike UIPasteboard, NSPasteboard has no convenient way to fetch images. Instead, you have to use readObjects(forClasses:) and cast the result to an NSImage array, which isn’t ideal.

You can make NSPasteboard behave more like UIPasteboard by adding these two properties to it:

import AppKit

extension NSPasteboard {

    var image: ImageRepresentable? {
        images?.first
    }
    
    var images: [ImageRepresentable]? {
        readObjects(forClasses: [NSImage.self]) as? [NSImage]
    }
}

This lets you use images to get all images in the pasteboard, and image to fetch the first. If the pasteboard doesn’t contain any images, these properties will return nil.

Conclusion

This was a short post, but I hope you found it helpful. Feel free to try it out and tell us what you think.

Discussion

If you found this post interesting and would like to share your thoughts, ideas, feedback etc. please comment in the Disqus section below or reply to this tweet.