github kean/Nuke 11.0.0-beta.1
Nuke 11.0 (Beta 1)

latest releases: 13.0.0-beta.1, 12.8.0, 12.8.0-beta.1...
pre-release2 years ago

Nuke 11 embraces Swift Structured Concurrency with full feature parity with completion-based APIs. With NukeUI now being part of the main repo, adding async image loading into your apps is easier than ever. There are no major source-breaking changes, but tens of API refinements to make the framework more ergonomic.

For feedback, please use Nuke 11 Discussion Channel

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.

  • Make @MainActor the following types: FetchImage, LazyImage, LazyImageView, Nuke loadImage(into:) method
  • Make most types Sendable, including ImagePipeline, ImageRequest, ImageResponse, ImageContainer, ImageTask, and many more
  • Add ImageTaskDelegate to achieve complete feature-parity with completion-based APIs - #559

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 imageTaskWillStart(_ task: ImageTask) {
    // You can capture a task instance here to change priority later, etc
}

func imageTask(_ task: ImageTask, didUpdateProgress progress: (completed: Int64, total: Int64)) {
    print("Image task did update progress: \(progress)")
}
  • Add images(for:) method that returns an AsyncThrowingStream to represent progressive decoding - #558

Progressively loading an image using an async sequence:

for try await response in pipeline.images(for: "https://example.com/image.jpeg") {
   print("Decoded a new image: \(response)")
}
  • ImageRequest now accepts async/await function to fetch data as a resource

NukeUI and Nuke Extensions

  • Move NukeUI to the main Nuke repo
  • Remove deprecated APIs from NukeUI
  • NukeUI no longer exposes public Gifu dependency or its APIs
  • Move UIImageView / NSImageView extensions to a separate target NukeExtensions and soft-deprecated them - #555

Error Reporting Improvements

  • Make an "advanced" version of ImageProcessing APIs throwing
  • Make ImageDecoding throwing
  • 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

  • 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
  • Use preparingForDisplay on iOS 15 and tvOS 15
  • Add ImageRequest to ImageResponse
  • Automatically discover typos on CI - #549
  • Add an option to skip load data immediately by skipping the data loading queue - #552
  • Implement custom disk caching for requests backed by data publishers - #553
  • Deprecate ImageDecoderRegistering
  • Make ImageDecoderRegistry initializer private
  • Make ImageDecodingContext, ImageProcessingContext, ImageResponse properties publicly writable
  • Rename isFinal in ImageProcessingContext to isCompleted to match the renaming APIs
  • DataLoader now collects metrics URLSessionTaskMetrics and reports them using an existing DataLoaderObserving protocol
  • Add static default and imageIO functions to ImageEncoding protocol for easy creating of encoders
  • Make ImageCache ttl optional instead of using 0 as a "never expires" indicator
  • Add sizeLimit to withDataCache ImagePipeline.Configuration initializer
  • Remove WKInterfaceObject support (in favor of SwiftUI)
  • Remove ImageType typealias (deprecated in 10.5)
  • Remove Cancellable conformance from URLSessionTask

Don't miss a new Nuke release

NewReleases is sending notifications on new releases.