Skip to content

Releases: kean/Nuke

Nuke 11.3.0

17 Sep 20:17
0d8a0dc
Compare
Choose a tag to compare

Nuke 11.2.1

10 Sep 23:07
Compare
Choose a tag to compare
  • Fix an issue with Mac Catalyst on Xcode 14.0

Nuke 11.2.0

10 Sep 20:58
Compare
Choose a tag to compare
  • Add support for Xcode 14.0
  • Fix #595 – compilation issue on macOS

Nuke 11.1.1

17 Aug 00:28
Compare
Choose a tag to compare
  • Breaking Progressive decoding is now disabled by default as a way to mitigate #572
  • Add prefersIncrementalDelivery to DataLoader. When progressive decoding is disabled, it now uses prefersIncrementalDelivery on URLSessionTask, slightly increasing the performance
  • Add convenience options to Image and LazyImage: resizingMode(_:), videoRenderingEnabled(_:), videoLoopingEnabled(_:), animatedImageRenderingEnabled(_:)
  • Fix an issue where AVPlayerLayer was created eagerly
  • Fix an issue with placeholder not being shown by LazyImage when the initial URL is nil#586, thanks to @jeffreykuiken
  • Disable prepareForDisplay by default and add a configuration option to enable it

Nuke 11.1.0

07 Aug 19:40
Compare
Choose a tag to compare
  • Add missing content mode to NukeUI - #582, thanks to Ethan Pippin
  • Add DataLoader delegate for easy Pulse integration (please use it with Pulse 2.0 which is optimized for images) - #583
(ImagePipeline.shared.configuration.dataLoader as? DataLoader)?.delegate = URLSessionProxyDelegate()

Nuke 11.0.1

24 Jul 21:48
Compare
Choose a tag to compare
  • Fix an issue with cancellation of requests created with Combine publishers - #576, thanks to douknow

Nuke 11.0

20 Jul 13:01
Compare
Choose a tag to compare

Nuke 11 embraces Swift Structured Concurrency with full feature parity with legacy completion-based APIs. NukeUI is now part of the main repo. Docs were completely rewritten using DocC and hosted on GitHub: Nuke, NukeUI, NukeExtensions.

There are no major source-breaking changes in this release. Instead, it adds dozens of API refinements to make the framework more ergonomic.

  • Increase the minimum supported Xcode version to 13.3
  • Increase minimum supported platforms: iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15
  • Add support for Xcode 14.0

Structured Concurrency

Extend Async/Await APIs to have complete feature parity with the existing completion-based APIs paving the road for its eventual deprecation and removal in the future major versions.

  • Add @MainActor to the following types: FetchImage, LazyImage, LazyImageView, Nuke loadImage(into:) method
  • Add Sendable to most of the Nuke types, including ImagePipeline, ImageRequest, ImageResponse, ImageContainer, ImageTask, and more
  • Add ImageTaskDelegate to achieve complete feature-parity with completion-based APIs - #559
  • ImageRequest now accepts async/await function to fetch data as a resource

Loading an image and monitoring download progress:

func loadImage() async throws {
    let response = try await pipeline.image(for: "https://example.com/image.jpeg", delegate: self)
}

func imageTaskCreated(_ task: ImageTask) {
    // You can capture the task instance here to change priority later, etc
}

func imageTask(_ task: ImageTask, didUpdateProgress progress: ImageTask.Progress) {
    // Update progress
}

func imageTask(_ task: ImageTask, didReceivePreview response: ImageResponse) {
    // Display progressively decoded image
}

// And more...

NukeUI and NukeExtensions

NukeUI is now part of the main repo and the existing UIKit and AppKit UI extensions were moved from the main module to NukeExtensions and soft-deprecated.

  • Move NukeUI to the main Nuke repo
  • Move UIImageView / NSImageView extensions to a separate target NukeExtensions and soft-deprecated them - #555
  • Remove deprecated APIs from NukeUI
  • Add ImageResponse typealias to NukeUI
  • Use new ImageTask.Progress in NukeUI
  • NukeUI no longer exposes public Gifu dependency or its APIs

Error Reporting Improvements

A complete overhaul of ImagePipeline.Error with many new cases covering every single point of failure in the pipeline.

  • Add throws to "advanced" ImageProcessing
  • Add throws to ImageDecoding
  • Add support for throwing processing in ImageProcessors.CoreImageFilter
  • Add ImageDecoding instance, ImageDecodingContext, and underlying error to .decodingFailed error case
  • Add ImageProcessingContext and underlying error to .processingFailed error case
  • Add .dataMissingInCache error case for a scenario where data is missing in cache and download is disabled using .returnCacheDataDontLoad.
  • Add .dataIsEmpty error case for a scenario where the data loader doesn't report an error, but the response is empty.
  • Add .decoderNotRegistered(context:) error case for a scenario where no decoders are registered for the downloaded data. This should never happen unless you remove the default decoder from the registry.
  • Add .imageRequestMissing error case for a scenario when the load image method is called with no image request.
  • Add cacheType to ImageDecodingContext

Other Changes

  • Fix #511 OSAtomic deprecation warnings - #573
  • Add ImageTask.State. Improve performance when canceling and changing priority of completed tasks.
  • Add ImageTask.Progress to simplify progress reporting APIs
  • Add ImageRequest.Options.skipDecompression
  • Add public ImageCacheKey initializer with ImageRequest
  • Add imageCache(for:pipeline:) method to ImagePipelineDelegate
  • Add automatic hashableIdentifier implementation to ImageProcessing types that implement Hashable protocol - #563
  • Add a way to customize decompression using ImagePipelineDelegate
  • Add ImageRequest to ImageResponse
  • Improve decompression performance by using preparingForDisplay on iOS 15 and tvOS 15
  • Add metrics reporting using DataLoaderObserving protocol
  • Add custom disk caching for requests backed by data publishers - #553
  • Add .pipelineInvalidated error that is thrown for new requests started on the invalidated pipeline
  • Add public write access to ImageDecodingContext, ImageProcessingContext, ImageResponse properties
  • Add static default and imageIO functions to ImageEncoding protocol for easy creating of encoders
  • Add sizeLimit to withDataCache ImagePipeline.Configuration initializer
  • Make ImageCache ttl optional instead of using 0 as a "never expires" indicator

Removals and Deprecations

  • Soft-deprecate ImageRequestConvertible and use ImageRequest and URL directly in all news APIs for better discoverability and performance - #567
  • Deprecate ImageDecoderRegistering
  • Deprecate ImageCaching extension that works with ImageRequest
  • Rename isFinal in ImageProcessingContext to isCompleted to match the remaining APIs
  • Rename ImagePipeline/Configuration/DataCachePolicy to ImagePipeline/DataCachePolicy
  • Remove ImageRequestConvertible conformance from String
  • Remove ImageTaskEvent and consolidate it with the new ImageTaskDelegate API - #564
  • Remove progress monitoring using Foundation.Progress
  • Remove WKInterfaceObject support (in favor of SwiftUI)
  • Remove ImageType typealias (deprecated in 10.5)
  • Remove Cancellable conformance from URLSessionTask
  • Remove public ImagePublisher class (make it internal)

Non-Code Changes

  • Automatically discover typos on CI - #549
  • Remove CocoaPods support

Nuke 11.0 (RC1)

05 Jul 21:57
14b7cb6
Compare
Choose a tag to compare
Nuke 11.0 (RC1) Pre-release
Pre-release

Nuke 11 embraces Swift Structured Concurrency with full feature parity with legacy completion-based APIs. NukeUI is now part of the main repo. Docs were completely rewritten using DocC and hosted on GitHub: Nuke, NukeUI, NukeExtensions.

There are no major source-breaking changes in this release. Instead, it adds dozens of API refinements to make the framework more ergonomic.

  • Increase the minimum supported Xcode version to 13.3
  • Increase minimum supported platforms: iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15

Structured Concurrency

Extend Async/Await APIs to have complete feature parity with the existing completion-based APIs paving the road for its eventual deprecation and removal in the future major versions.

  • Add @MainActor to the following types: FetchImage, LazyImage, LazyImageView, Nuke loadImage(into:) method
  • Add Sendable to most of the Nuke types, including ImagePipeline, ImageRequest, ImageResponse, ImageContainer, ImageTask, and more
  • Add ImageTaskDelegate to achieve complete feature-parity with completion-based APIs - #559
  • ImageRequest now accepts async/await function to fetch data as a resource

Loading an image and monitoring download progress:

func loadImage() async throws {
    let response = try await pipeline.image(for: "https://example.com/image.jpeg", delegate: self)
}

func imageTaskCreated(_ task: ImageTask) {
    // You can capture the task instance here to change priority later, etc
}

func imageTask(_ task: ImageTask, didUpdateProgress progress: ImageTask.Progress) {
    // Update progres
}

func imageTask(_ task: ImageTask, didReceivePreview response: ImageResponse) {
    // Display progressively decoded image
}

// And more...

NukeUI and NukeExtensions

NukeUI is now part of the main repo and the existing UIKit and AppKit UI extensions were moved from the main module to NukeExtensions and soft-deprecated.

  • Move NukeUI to the main Nuke repo
  • Move UIImageView / NSImageView extensions to a separate target NukeExtensions and soft-deprecated them - #555
  • Remove deprecated APIs from NukeUI
  • Add ImageResponse typealias to NukeUI
  • Use new ImageTask.Progress in NukeUI
  • NukeUI no longer exposes public Gifu dependency or its APIs

Error Reporting Improvements

A complete overhaul of ImagePipeline.Error with many new cases covering every single point of failure in the pipeline.

  • Add throws to "advanced" ImageProcessing
  • Add throws to ImageDecoding
  • Add support for throwing processing in ImageProcessors.CoreImageFilter
  • Add ImageDecoding instance, ImageDecodingContext, and underlying error to .decodingFailed error case
  • Add ImageProcessingContext and underlying error to .processingFailed error case
  • Add .dataMissingInCache error case for a scenario where data is missing in cache and download is disabled using .returnCacheDataDontLoad.
  • Add .dataIsEmpty error case for a scenario where the data loader doesn't report an error, but the response is empty.
  • Add .decoderNotRegistered(context:) error case for a scenario where no decoders are registered for the downloaded data. This should never happen unless you remove the default decoder from the registry.
  • Add .imageRequestMissing error case for a scenario when the load image method is called with no image request.
  • Add cacheType to ImageDecodingContext

Other Changes

  • Fix #511 OSAtomic deprecation warnings - #573
  • Add ImageTask.State. Improve performance when canceling and changing priority of completed tasks.
  • Add ImageTask.Progress to simplify progress reporting APIs
  • Add ImageRequest.Options.skipDecompression
  • Add public ImageCacheKey initializer with ImageRequest
  • Add imageCache(for:pipeline:) method to ImagePipelineDelegate
  • Add automatic hashableIdentifier implementation to ImageProcessing types that implement Hashable protocol - #563
  • Add a way to customize decompression using ImagePipelineDelegate
  • Add ImageRequest to ImageResponse
  • Improve decompression performance by using preparingForDisplay on iOS 15 and tvOS 15
  • Add metrics reporting using DataLoaderObserving protocol
  • Add custom disk caching for requests backed by data publishers - #553
  • Add .pipelineInvalidated error that is thrown for new requests started on the invalidated pipeline
  • Add public write access to ImageDecodingContext, ImageProcessingContext, ImageResponse properties
  • Add static default and imageIO functions to ImageEncoding protocol for easy creating of encoders
  • Add sizeLimit to withDataCache ImagePipeline.Configuration initializer
  • Make ImageCache ttl optional instead of using 0 as a "never expires" indicator

Removals and Deprecations

  • Soft-deprecate ImageRequestConvertible and use ImageRequest and URL directly in all news APIs for better discoverability and performance - #567
  • Deprecate ImageDecoderRegistering
  • Deprecate ImageCaching extension that works with ImageRequest
  • Rename isFinal in ImageProcessingContext to isCompleted to match the renaming APIs
  • Rename ImagePipeline/Configuration/DataCachePolicy to ImagePipeline/DataCachePolicy
  • Remove ImageRequestConvertible conformance from String
  • Remove ImageTaskEvent and consolidate it with the new ImageTaskDelegate API - #564
  • Remove progress monitoring using Foundation.Progress
  • Remove WKInterfaceObject support (in favor of SwiftUI)
  • Remove ImageType typealias (deprecated in 10.5)
  • Remove Cancellable conformance from URLSessionTask
  • Remove public ImagePublisher class (make it internal)

Non-Code Changes

  • Automatically discover typos on CI - #549
  • Remove CocoaPods support

Nuke 11.0 (Beta 5)

02 Jul 16:38
Compare
Choose a tag to compare
Nuke 11.0 (Beta 5) Pre-release
Pre-release
  • Fix #511 OSAtomic deprecation warnings - #573
  • Revert ImageTask priority replacement with setPriority(_:) method
  • Revert ImageDecoderRegistry init being made private
  • Add ImageTask.State. Improve performance when canceling and changing priority of completed tasks.

Nuke 11.0 (Beta 4)

01 Jul 21:48
Compare
Choose a tag to compare
Nuke 11.0 (Beta 4) Pre-release
Pre-release
  • Soft-deprecate ImageRequestConvertible and use ImageRequest and URL directly in all news APIs for better discoverability and performance - #567
  • Rename ImagePipeline/Configuration/DataCachePolicy to ImagePipeline/DataCachePolicy
  • More documentation improvements: Nuke, NukeUI, NukeExtensions