github kean/Nuke 12.0.0-rc.1
Nuke 12 (RC1)

latest releases: 13.0.0-beta.1, 12.8.0, 12.8.0-beta.1...
pre-release20 months ago

Nuke 12 enhances the two main APIs introduced in the previous release: LazyImage and the async ImagePipeline methods. They are faster, more robust, and easier to use.

The migration guide is available to help with the update.

Concurrency

Redesign the concurrency APIs making them more ergonomic and fully Sendable compliant.

  • Add ImagePipeline/imageTask(with:) method that returns a new type AsyncImageTask
let task = ImagePipeline.shared.imageTask(with: URL(string: "example.com"))
task.priority = .high
for await progress in task.progress {
    print("Updated progress: ", progress)
}
let image = try await task.image
  • The existing convenience ImagePipeline/image(for:) method now returns an image instead of ImageResponse
  • Remove the delegate parameter from ImagePipeline/image(for:) method to address the upcoming concurrency warnings in Xcode 14.3
  • Remove ImageTaskDelegate and move its methods to ImagePipelineDelegate and add the pipeline parameter

NukeUI 2.0

NukeUI started as a separate repo, but the initial production version was released as part of Nuke 11. Let's call it NukeUI 1.0. The framework was designed before the AsyncImage announcement and had a few discrepancies that made it harder to migrate from AsyncImage. This release addresses the shortcomings of the original design and features a couple of performance improvements.

  • LazyImage now uses SwiftUI.Image instead of NukeUI.Image backed by UIImageView and NSImageView. It eliminates any discrepancies between LazyImage and AsyncImage layout and self-sizing behavior and fixes issues with .redacted(reason:), ImageRenderer, and other SwiftUI APIs that don't work with UIKIt and AppKit based views.
  • Remove NukeUI.Image so the name no longer clashes with SwiftUI.Image
  • Fix #669: redacted not working for LazyImage
  • GIF rendering is no longer included in the framework. Please consider using one of the framework that specialize on playing GIFs, such as Gifu. It's easy to integrate, especially with LazyImage.
  • Extract progress updates from FetchImage to a separate observable object, reducing the number of body reloads
  • LazyImage now requires a single body calculation to render the response from the memory cache (instead of three before)
  • Disable animations by default
  • Fix an issue where the image won't reload if you change only LazyImage processors or priority without also changing the image source
  • FetchImage/image now returns Image instead of UIImage
  • Make _PlatformImageView internal (was public) and remove more typealiases

Nuke

  • ImageCache uses 20% of available RAM which is quite aggressive. It's an OK default on iOS because it clears 90% of the used RAM when entering the background to be a good citizen. But it's not a good default on a Mac. Starting with Nuke 12, the default size is now strictly limited to 512 MB.
  • ImageDecoder now defaults to scale 1 for images (configurable using UserInfoKey/scaleKey)
  • Removes APIs deprecated in the previous versions

NukeVideo

Video playback can be significantly more efficient than playing animated GIFs. This is why the initial version of NukeUI provided support for basic video playback. But it is not something that the majority of the users need, so this feature was extracted to a separate module called NukeVideo.

There is now less code that you need to include in your project, which means faster compile time and smaller code size. With this and some other changes in Nuke 12, the two main frameworks – Nuke and NukeUI – now have 25% less code compared to Nuke 11. In addition to this change, there are a couple of improvements in how the precompiled binary frameworks are generated, significantly reducing their size.

  • Move all video-related code to NukeVideo
  • Remove ImageContainer.asset. The asset is now added to ImageContainer/userInfo under the new .videoAssetKey.
  • Reduce the size of binary frameworks by up to 50%

Don't miss a new Nuke release

NewReleases is sending notifications on new releases.