This library provides an async image downloader with cache support. For convenience, we added categories for UI elements like UIImageView, UIButton, MKAnnotationView.
NOTE:
SDis the prefix for Simple Design (which is the team name in Daily Motion company from the author Olivier Poitrey)
Features
- Categories for
UIImageView,UIButton,MKAnnotationViewadding web image and cache management - An asynchronous image downloader
- An asynchronous memory + disk image caching with automatic cache expiration handling
- A background image decompression to avoid frame rate drop
- Progressive image loading (including animated image, like GIF showing in Web browser)
- Thumbnail image decoding to save CPU && Memory for large images
- Extendable image coder to support massive image format, like WebP
- Full-stack solution for animated images which keep a balance between CPU && Memory
- Customizable and composable transformations can be applied to the images right after download
- Customizable and multiple caches system
- Customizable and multiple loaders system to expand the capabilities, like Photos Library
- Image loading indicators
- Image loading transition animation
- A guarantee that the same URL won't be downloaded several times
- A guarantee that bogus URLs won't be retried again and again
- A guarantee that main thread will never be blocked
- Modern Objective-C and better Swift support
- Performances!
For Apple visionOS
From 5.19+, SDWebImage supports visionOS on all Package Managers (include CocoaPods/Carthage/SPM). Upgrade the related tools if you're facing issues.
For 5.18+, SDWebImage can be compiled for visionOS platform. However, it's still in beta and may contains issues unlike the stable iOS UIKit support. Welcome to have a try and report issue.
To build on visionOS, currently we only support the standard Xcode integration.
See Installation with Swift Package Manager and Manual Installation Guide below.
Supported Image Formats
- Image formats supported by Apple system (JPEG, PNG, TIFF, BMP, ...), including GIF/APNG animated image
- HEIC format from iOS 11/macOS 10.13, including animated HEIC from iOS 13/macOS 10.15 via SDWebImageHEICCoder. For lower firmware, use coder plugin SDWebImageHEIFCoder
- WebP format from iOS 14/macOS 11.0 via SDWebImageAWebPCoder. For lower firmware, use coder plugin SDWebImageWebPCoder
- JPEG-XL format from iOS 17/macOS 14.0 built-in. For lower firmware, use coder plugin SDWebImageJPEGXLCoder
- Support extendable coder plugins for new image formats like BPG, AVIF. And vector format like PDF, SVG. See all the list in Image coder plugin List
NOTE: For new user
SDWebImage use Coder Plugin System to support both Apple's built-in and external image format. For static image we always use Apple's built-in as fallback, but not for animated image. Currently (updated to 5.19.x version) we only register traditional animated format like GIF/APNG by default, without the modern format like AWebP/HEICS/AVIF, even on the latest firmware.
If you want these animated image format support, simply register by yourself with one-line code, see more in WebP Coder and HEIC Coder
In future we will change this behavior by always registering all Apple's built-in animated image format, to make it easy for new user to integrate.
Additional modules and Ecosystem
In order to keep SDWebImage focused and limited to the core features, but also allow extensibility and custom behaviors, during the 5.0 refactoring we focused on modularizing the library. As such, we have moved/built new modules to SDWebImage org.
SwiftUI
SwiftUI is an innovative UI framework written in Swift to build user interfaces across all Apple platforms.
We support SwiftUI by building a brand new framework called SDWebImageSwiftUI, which is built on top of SDWebImage core functions (caching, loading and animation).
The new framework introduce two View structs WebImage and AnimatedImage for SwiftUI world, ImageIndicator modifier for any View, ImageManager observable object for data source. Supports iOS 13+/macOS 10.15+/tvOS 13+/watchOS 6+ and Swift 5.1. Have a nice try and provide feedback!
Coders for additional image formats
- SDWebImageWebPCoder - coder for WebP format. iOS 9+/macOS 10.11+. Based on libwebp
- SDWebImageHEIFCoder - coder for HEIF format, iOS 9+/macOS 10.11+ support. Based on libheif
- SDWebImageBPGCoder - coder for BPG format. Based on libbpg
- SDWebImageFLIFCoder - coder for FLIF format. Based on libflif
- SDWebImageAVIFCoder - coder for AVIF (AV1-based) format. Based on libavif
- SDWebImagePDFCoder - coder for PDF vector format. Using built-in frameworks
- SDWebImageSVGCoder - coder for SVG vector format. Using built-in frameworks
- SDWebImageSVGNativeCoder - coder for SVG-Native vector format. Based on svg-native
- SDWebImageLottieCoder - coder for Lottie animation format. Based on rlottie
- SDWebImageJPEGXLCoder - coder for JPEG-XL format. iOS 9+/macOS 10.11+. Based on libjxl
- and more from community!
Custom Caches
- SDWebImageYYPlugin - plugin to support caching images with YYCache
- SDWebImagePINPlugin - plugin to support caching images with PINCache
Custom Loaders
- SDWebImagePhotosPlugin - plugin to support loading images from Photos (using
Photos.framework) - SDWebImageLinkPlugin - plugin to support loading images from rich link url, as well as
LPLinkView(usingLinkPresentation.framework)
Integration with 3rd party libraries
- SDWebImageLottiePlugin - plugin to support Lottie-iOS, vector animation rending with remote JSON files
- SDWebImageSVGKitPlugin - plugin to support SVGKit, SVG rendering using Core Animation, iOS 9+/macOS 10.11+ support
- SDWebImageFLPlugin - plugin to support FLAnimatedImage as the engine for animated GIFs
- SDWebImageYYPlugin - plugin to integrate YYImage & YYCache for image rendering & caching
Community driven popular libraries
- FirebaseUI - Firebase Storage binding for query images, based on SDWebImage loader system
- react-native-fast-image - React Native fast image component, based on SDWebImage Animated Image solution
- flutter_image_compress - Flutter compresses image plugin, based on SDWebImage WebP coder plugin
Make our lives easier
- libwebp-Xcode - A wrapper for libwebp + an Xcode project.
- libheif-Xcode - A wrapper for libheif + an Xcode project.
- libavif-Xcode - A wrapper for libavif + an Xcode project.
- and more third-party C/C++ image codec libraries with CocoaPods/Carthage/SwiftPM support.
You can use those directly, or create similar components of your own, by using the customizable architecture of SDWebImage.
Requirements
- iOS 9.0 or later
- tvOS 9.0 or later
- watchOS 2.0 or later
- macOS 10.11 or later (10.15 for Catalyst)
- visionOS 1.0 or later
- Xcode 15.0 or later
Backwards compatibility
- For iOS 8, macOS 10.10 or Xcode < 11, use any 5.x version up to 5.9.5
- For iOS 7, macOS 10.9 or Xcode < 8, use any 4.x version up to 4.4.6
- For macOS 10.8, use any 4.x version up to 4.3.0
- For iOS 5 and 6, use any 3.x version up to 3.7.6
- For iOS < 5.0, please use the last 2.0 version.
Getting Started
- Read this Readme doc
- Read the How to use section
- Read the Latest Documentation and CocoaDocs for old version
- Try the example by downloading the project from Github or even easier using CocoaPods try
pod try SDWebImage - Read the Installation Guide
- Read the SDWebImage 5.0 Migration Guide to get an idea of the changes from 4.x to 5.x
- Read the SDWebImage 4.0 Migration Guide to get an idea of the changes from 3.x to 4.x
- Read the Common Problems to find the solution for common problems
- Go to the Wiki Page for more information such as Advanced Usage
Who Uses It
- Find out who uses SDWebImage and add your app to the list.
Communication
- If you need help, use Stack Overflow. (Tag 'sdwebimage')
- If you'd like to ask a general question, use Stack Overflow.
- If you found a bug, open an issue.
- If you have a feature request, open an issue.
- If you need IRC channel, use Gitter.
Contribution
- If you want to contribute, read the Contributing Guide
- For development contribution guide, read the How-To-Contribute
- For understanding code architecture, read the Code Architecture Analysis
How To Use
- Objective-C
...
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
- Swift
imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
- For details about how to use the library and clear examples, see The detailed How to use
Animated Images (GIF) support
In 5.0, we introduced a brand new mechanism for supporting animated images. This includes animated image loading, rendering, decoding, and also supports customizations (for advanced users).
This animated image solution is available for iOS/tvOS/macOS. The SDAnimatedImage is subclass of UIImage/NSImage, and SDAnimatedImageView is subclass of UIImageView/NSImageView, to make them compatible with the common frameworks APIs.
The SDAnimatedImageView supports the familiar image loading category methods, works like drop-in replacement for UIImageView/NSImageView.
Don't have UIView (like WatchKit or CALayer)? you can still use SDAnimatedPlayer the player engine for advanced playback and rendering.
See Animated Image for more detailed information.
- Objective-C
SDAnimatedImage *animatedImage = [SDAnimatedImage imageNamed:@"image.gif"];
imageView.image = animatedImage;
- Swift
let animatedImage = SDAnimatedImage(named: "image.gif")
imageView.image = animatedImage
FLAnimatedImage integration has its own dedicated repo
In order to clean up things and make our core project do less things, we decided that the FLAnimatedImage integration does not belong here. From 5.0, this will still be available, but under a dedicated repo SDWebImageFLPlugin.
Installation
There are 5 ways to use SDWebImage in your project:
- using CocoaPods
- using Carthage
- using Swift Package Manager
- download binary XCFramework
- manual install (build frameworks or embed Xcode Project)
Installation with CocoaPods
CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the Get Started section for more details.
Podfile
platform :ios, '8.0'
pod 'SDWebImage', '~> 5.0'