Skip to content

Releases: kean/Nuke

Nuke 13.0 (Beta 1)

27 Oct 16:17
Compare
Choose a tag to compare
Nuke 13.0 (Beta 1) Pre-release
Pre-release

Nuke 13 is an incremental release that takes more advantage of Swift Concurrency and Data Race Safety by introducing a global ImagePipelineActor on which its subsystems are all synchronized. It ensures thread-safety, removes 20 usages of @unchecked Sendable, and makes the framework even leaner with ~5% less code in the main module. The future versions will completely switch to Swift Concurrency, but it will require a couple of more iterations.

Requirement: Xcode 16.

  • Increase deployment targets to iOS 14, tvOS 14, macOS 11, watchOS 7
  • Add global actor ImagePipelineActor. ImagePipeline, ImageTask, ImagePrefetcher, and some other internal types are synchronized on the new actor.
  • Soft-deprecate closure-based ImagePipeline APIs
  • Soft-deprecate ImagePipeline Combine extension and move them to NukeExtensions
  • Remove ImagePipeline.Configuration.callbackQueue
  • Remove queue parameter from ImagePipeline loadImage and loadData method. The callbacks are now isolated to the @MainActor and are @Sendable.
  • Add ImageTask.isCancelling to make it easier to transition to Nuke 13 in case you were using ImageTask.state for checking for cancellation invoked by the client (this might change in the upcoming betas)
  • Rename ImagePipelineDelegate to ImagePipeline.Delegate
  • Remove ImagePipeline.Delegate imageTaskDidStart and other methods soft-deprecated in Nuke 12.7.
  • Remove ImageRequest initializers accepting dataPublisher (Combine) – use Swift Concurrency instead
  • Update DataLoading protocol to use Swift Concurrency instead of closures
  • Deprecate FetchImage Combine support

Nuke 12.8

13 Jul 14:47
Compare
Choose a tag to compare

What's Changed

  • Add Swift 6 compatibility
  • Add @MainActor annotation to ImageLoadingOptions.shared
  • Fix image scale and orientation issue in thumbnail creation by @prabhuamol in #793
  • Deprecate ImagePipeline.Configuration.callbackQueue – this feature will be removed in Nuke 13
  • ImagePrefetcher.didComplete closure is now annotated with @MainActor @Sendable
  • Drop Xcode 14 support

New Contributors

Nuke 12.8 (Beta 1)

07 Jul 19:22
Compare
Choose a tag to compare
Nuke 12.8 (Beta 1) Pre-release
Pre-release
  • Deprecate ImagePipeline.Configuration.callbackQueue – this feature will be removed in Nuke 13
  • ImagePrefetcher.didComplete closure is now annotated with @MainActor @Sendable
  • Add @MainActor annotation to ImageLoadingOptions.shared
  • Drop Xcode 14 support

Nuke 12.7.3

20 Jun 01:38
Compare
Choose a tag to compare
  • Fix β€œunrecognized selector sent to instance” crash in NukeExtensions in a cross-dissolve transition on iOS < 17 by @ejensen in #792

Nuke 12.7.2

08 Jun 19:46
Compare
Choose a tag to compare
  • Fix #789, an issue with ImageProcessors.Resize failing to resize images with packed pixel formats

Nuke 12.7.1

31 May 03:31
Compare
Choose a tag to compare
  • Fix fade transition in some scenarios by @ejensen in #786
  • Remove taskDescription from network tasks by @ejensen in #785
  • Temporarily revert the change introduced in v12.6 that would skip decompression for some image types – more info in #788

Nuke 12.7

18 May 13:21
Compare
Choose a tag to compare

This release contains major improvements to the Structured Concurrency support and ImagePipeline internals.

  • Add previews: AsyncStream<ImageResponse>, progress: AsyncStream<Progress>, image: PlatformImage async and response: ImageResponse async directly to ImageTask and deprecate AsyncImageTask. These APIs have zero cost unless you use them.
  • Add ImageTask.Event and add events: AsyncStream<Event> to ImageTask for observing all events associated with the image loading.
  • Improve the support for AsyncStream: a new stream is created every time you access the respective property to make it easier to have multiple consumers.
  • Add ImagePipelineDelegate/imageTask(:didReceiveEvent:pipeline:) and deprecate the previous methods it replaced (context: these methods were introduced in Nuke 11.0 as the initial and misguided attempt at Structured Concurrency support that tried to borrow from the URLSession API design)
  • (Internal) Rework ImagePipeline that accumulated a lot of cruft after the introduction of data tasks, Combine, Async/Await, and AsyncStream support in the previous releases.
  • Deprecate ImagePipeline/loadData(with:) and ImagePipeline/data(with:) methods that accept URL as parameters – use the ImageRequest variants instead (these are rarely used and low-level APIs that don't require convenience variants)
  • Remove @discardableResult from ImagePipeline/data(with:) async throws – it was never meant to be there
  • Rename ImageTask/progress to ImageTask/currentProgress (warning: this is a small breaking change in the API)
  • Fix some of the Strict Concurrency Checking & Swift 6 warnings preparing for the upcoming Swift releases
  • Fix documentation for AsyncImageTask/previews that was previously specifying that it was delivering the previews and the final image – it's only the previews.
  • Fix #782, an issue with grayscale images (8 bpp) not being rendered correctly when Resize processor is used

Nuke 12.7 (Beta 1)

07 May 00:32
Compare
Choose a tag to compare
Nuke 12.7 (Beta 1) Pre-release
Pre-release

πŸ› Call for Testing. This release contains some major internal changes to the core APIs. Please help with testing the newly introduced and the existing ImagePipeline APIs, and report any issues before it gets shipped.

This release contains some major improvements to the Structured Concurrency support and introduced a re-engineered ImagePipeline.

  • Add previews: AsyncStream<ImageResponse>, progress: AsyncStream<Progress>, image: PlatformImage async and reponse: ImageResponse async directly to ImageTask and deprecate AsyncImageTask. These APIs have zero cost unless you use them.
  • Add ImageTask.Event and add events: AsyncStream<Event> to ImageTask for observing all events associated with the image loading.
  • Improve the support for AsyncStream: a new stream is created every time you access the respective property to make it easier to have multiple consumers.
  • Add ImagePipelineDelegate/imageTask(:didReceiveEvent:pipeline:) and deprecate the previous methods it replaced (context: these methods were introduced in Nuke 11.0 as the initial and misguided attempt at Structured Concurrency support that tried to borrow from the URLSession API design)
  • (Internal) Rework ImagePipeline that accumulated a lot of cruft after the introduction of data tasks, Combine, Async/Await, and AsyncStream support in the previous releases.
  • Deprecate ImagePipeline/loadData(with:) and ImagePipeline/data(with:) methods that accept URL as parameters – use the ImageRequest variants instead (these are rarely used and low-level APIs that don't require convenience variants)
  • Remove @discardableResult from ImagePipeline/data(with:) async throws – it was never meant to be there
  • Rename ImageTask/progress to ImageTask/currentProgress (warning: this is a small breaking change in the API)
  • Fix some of the Strict Concurrency Checking & Swift 6 warnings preparing for the upcoming Swift releases
  • Fix documentation for AsyncImageTask/previews that was previously specifying that it was delivering the previews and the final image – it's only the previews.

Nuke 12.6

24 Apr 01:51
Compare
Choose a tag to compare

Fixes

  • Fix an issue with an optimization that is supposed to skip decompression if one or more processors are applied
  • Fix a [Decompressor] Error -17102 decompressing image -- possibly corrupt console error message when using ImagePipeline.Configuration.isUsingPrepareForDisplay (disabled by default). The pipeline will now skip decompression for .png.
  • Fix #705 with integration between thumbnail options (link) and original data caching: the original data is now stored without a thumbnail key
  • Fix an issue where .storeAll and .automatic cache policies would not store the thumbnail data
  • Fix #746 an issue with ImageRequest.UserInfoKey.scaleKey not interacting correctly with coalescing
  • Fix #763 SwiftUI Warning: Accessing StateObject's object without being installed on a View when using onStart

Changes

  • Add support for initializing ImageProcessors.CoreImageFilter with CIFilter instances (fixes #758 )
  • Add support for disk cache lookup for intermediate processed images (as opposed to only final and original as before)
  • Add an optimization that loads local resources with file and data schemes quickly without using DataLoader and URLSession. If you rely on the existing behavior, this optimization can be turned off using the isLocalResourcesSupportEnabled configuration option. #779
  • Update the infrastructure for coalescing image-processing tasks to use the task-dependency used for other operations

Deprecations

  • Deprecate ImagePipeline.Configuration.dataCachingQueue and perform data cache lookups on the pipeline's queue, reducing the amount of context switching

Nuke 12.5

23 Mar 13:42
Compare
Choose a tag to compare

What's Changed

  • Fix Xcode 15.3 concurrency warnings when using Screen.scale by @jszumski in #766
  • Add showPlaceholderOnFailure parameter to show placeholder in case of image loading failure by @mlight3 in #764
  • Fix image loading test on iOS 17 by @woxtu in #768
  • Update thumbnail key value for ImageRequest by @woxtu in #769
  • Remove trailing whitespaces by @woxtu in #767
  • Apply if let shorthand syntax by @mlight3 in #762

New Contributors

Full Changelog: 12.4.0...12.5.0