All Versions
79
Latest Version
Avg Release Cycle
65 days
Latest Release
-
Changelog History
Page 1
Changelog History
Page 1
-
v2.25.0 Changes
- ๐ Fix codec detection for images that are not JPEG, PNG, GIF or BMP
- In more recent versions of iOS, more image types require the complete image data to detect the image type instead of just the headers
- This mostly just affects very small images, larger images generally were never affected
- This regressed our codec detection logic for images that do not also have TIPs "magic numbers" image type detection
- This fixes that by informing the codecs if the data being provided for detection is the complete image data or not
- Caveat: for images other than JPEG, PNG, GIF, BMP or WEBP, it is likely that it will take the complete image data to detect those images now which can lengthen the duration for book-keeping overhead as the image is being loaded
- If you want to have an image format detected faster than what Core Graphics detects (all data required for most formats), you can either provide a custom codec with better format detection logic or you can update the magic numbers APIs in
TIPImageTypes.m
- ๐ Fix codec detection for images that are not JPEG, PNG, GIF or BMP
-
v2.24.3 Changes
- ๐ Fix scaling logic to better preserve source size aspect ratio during scale
- For example: 800x800 scaled to fill 954x954 would yield a 953x954 size. Now it will properly yield 954x954.
- ๐ Fix scaling logic to better preserve source size aspect ratio during scale
-
v2.24.2 Changes
October 26, 2020- ๐ Fix WebP decoder for animations
- Complex animations were not properly being decoded
- ๐ Fix WebP decoder for animations
-
v2.24.1 Changes
October 20, 2020โฌ๏ธ Bump version to support CocoaPod subspecs for WebP and MP4 codecs
-
v2.24.0 Changes
August 10, 20202.24.0
- โฌ๏ธ Drop iOS 8 and iOS 9 support
2.23.5
- ๐จ Refactor WebP decoder to support animation decoding and improve efficiency
- Requires WebPDemux.framework for iOS (the Catalyst lib already has the necessary bits)
- The
TIPXWebPCodec
also supports progressive loading (rendering the first frame while more data is loading) - This makes it potentially a better choice as a decoder than the iOS 14+ built in decoder, depending on your use case
- Improve decoder to support having static WebP images decode into the provided target sizing for better efficiency
2.23.2
- โก๏ธ Update to WebP v1.1.0
- Also fixes building WebP for Apple Silicon Catalyst builds
2.23.1
- โก๏ธ Optimize the rendered cache unloading when
clearMemoryCachesOnApplicationBackgroundEnabled
isYES
- When the app goes into the background, the rendered cache used to clear the oldest rendered images and just keep a max of 50% of the rendered cache capacity for when the app resumes
- This was mostly effective for keeping the on screen images in cache avoiding any flashing UI, but had edge cases that could lead flashing or holding onto too much in memory that isn't needed for app resumes
- Now, the rendered cache will turn each cache entry as weak and on app resume, these weak entries will be made strong again.
- This will have the effect of all rendered cache images with no references being purged, but all those references being retained
- Effectively, any UI that is holding the rendered images will keep those around for when the app resumes, making it seemless
- For any UI that has unloaded its images when not visible, those images will be purged and will reload when the view becomes visible again
- This works especially well with
TIPImageViewFetchHelper
whendisappearanceBehavior
isTIPImageViewDisappearanceBehaviorUnload
orTIPImageViewDisappearanceBehaviorReplaceWithPlaceholder
2.23.0
- Replace
TIPImageFetchProgressiveLoadingPolicy
class methods with C functions- Swift does not like having an
@interface
have the same name as an@protocol
- It can work, but gets very messy
- Best to avoid it and replace the convenient class method interfaces in Objective-C with C functions
- Though this is a minor version bump, it is API breaking
- There isn't a way to deprecated the old APIs and introduce new ones, we just have to remove the old ones to fix usages in Swift
- Apologies for the inconvenience!
- Swift does not like having an
2.22.0
- โ Add
TIPImageFetchSkipStoringToRenderedCache
toTIPImageFetchOptions
- This permits a fetch to skip storing to the synchronous rendered cache altogether after a fetch
- This is useful for UI that displays a large image but is not frequented regularly, such as a full screen image view
- By avoiding infrequent images going to rendered cache, the rendered cache can keep more relevent images in cache (or can be configured to be smaller)
- โ Add
TIPImageViewDisappearanceBehaviorUnload
toTIPImageViewDisappearanceBehavior
- This new behavior will set the
fetchView
image tonil
on disappearance - This new feature can really level up an app at keeping a memory footprint down automatically, no extra work is needed when using
TIPImageViewFetchHelper
for displaying images!
- This new behavior will set the
- โ Add
TIPImageViewDisappearanceBehaviorReplaceWithPlaceholder
toTIPImageViewDisappearanceBehavior
- This new behavior will set the
fetchView
image to a placeholder (low resolution) version on disappearance, which will be replace with the full image on visible return - Similar benefits to
TIPImageViewDisappearanceBehaviorUnload
but with the compromise of keeping a little more RAM for a placeholder to avoid UI situations that could yield an empty image view temporarily as the full image is decoded (notably for large images or slow devices)
- This new behavior will set the
- ๐ Rename
TIPImageViewFetchHelper
class'fetchDisappearanceBehavior
todisappearanceBehavior
- โ Add
shouldTreatApplicationBackgroundAsViewDisappearance
property toTIPImageViewFetchHelper
- This
BOOL
property will opt the fetch helper into using the disappearance behavior when the app backgrounds - Another big improvement for app memory footprint as the large amount of RAM used for images can be unloaded on app background, reducing the risk of the app being jettisoned!
- Impact is really great for large images on screen when backgrounded, be sure to set to
YES
for your large image views!
- This
2.21.5
- ๐ Adopt
direct
support for Objective-C code and eliminatePRIVATE_SELF
C function pattern- Preserves Objective-C calling syntax for better code legibility (less C-style calls interleaving ObjC)
- Safer than
PRIVATE_SELF
C functions (don't need to checkself != nil
) - Avoids awkward
self->_ivar
access in the direct methods (can stick with just using_ivar
) - Same low binary overhead as private C functions
2.21.0
- Revise
TIPError.h
to be much more Swift compatible
2.20.5
- Revise WebP support by adding iOS 14 decoder and integrating that with existing
TIPXWebPCodec
- Also means Animated WebP are supported (decode only) on iOS 14+ now
2.20.0
- Fundamentally apply a rearchitecture to Twitter Image Pipeline
- First: when loading images from data or files, the target sizing (dimensions & content mode) can now be used by codecs for more efficient decoding
- This means that decoding a large image into a view port that is smaller can now decode directly into the appropriate size, reducing RAM and CPU of the decode AND avoiding needing to scale the image down before delivering the image as a result (more CPU savings)
- This is implemented with the
ImageIO
based codecs, but not the extended codecs (WebP
andMP4
)...yet - Second: there are 3 caches in TIP : Rendered image cache, In Memory image cache, and On Disk image data cache.
- The In Memory cache has been been restructured to cache the compressed image data instead of the image itself
- This means:
- Less RAM is needed for this middle cache
- Less RAM is used when decoding the image to serve as a response
- No more scaling the image from full size to the size to serve as a response (for core image codecs)
- Given how substantial this change is, we are bumping from version
2.13
to2.20
- In particular, custom codecs will need to be updated to support the new
targetDimensions
andtargetContentMode
arguments
- In particular, custom codecs will need to be updated to support the new
-
v2.23.5 Changes
- ๐จ Refactor WebP decoder to support animation decoding and improve efficiency
- Requires WebPDemux.framework for iOS (the Catalyst lib already has the necessary bits)
- The
TIPXWebPCodec
also supports progressive loading (rendering the first frame while more data is loading) - This makes it potentially a better choice as a decoder than the iOS 14+ built in decoder, depending on your use case
- Improve decoder to support having static WebP images decode into the provided target sizing for better efficiency
- ๐จ Refactor WebP decoder to support animation decoding and improve efficiency
-
v2.23.2 Changes
- โก๏ธ Update to WebP v1.1.0
- Also fixes building WebP for Apple Silicon Catalyst builds
- โก๏ธ Update to WebP v1.1.0
-
v2.23.1 Changes
- โก๏ธ Optimize the rendered cache unloading when
clearMemoryCachesOnApplicationBackgroundEnabled
isYES
- When the app goes into the background, the rendered cache used to clear the oldest rendered images and just keep a max of 50% of the rendered cache capacity for when the app resumes
- This was mostly effective for keeping the on screen images in cache avoiding any flashing UI, but had edge cases that could lead flashing or holding onto too much in memory that isn't needed for app resumes
- Now, the rendered cache will turn each cache entry as weak and on app resume, these weak entries will be made strong again.
- This will have the effect of all rendered cache images with no references being purged, but all those references being retained
- Effectively, any UI that is holding the rendered images will keep those around for when the app resumes, making it seemless
- For any UI that has unloaded its images when not visible, those images will be purged and will reload when the view becomes visible again
- This works especially well with
TIPImageViewFetchHelper
whendisappearanceBehavior
isTIPImageViewDisappearanceBehaviorUnload
orTIPImageViewDisappearanceBehaviorReplaceWithPlaceholder
- โก๏ธ Optimize the rendered cache unloading when
-
v2.23.0 Changes
- Replace
TIPImageFetchProgressiveLoadingPolicy
class methods with C functions- Swift does not like having an
@interface
have the same name as an@protocol
- It can work, but gets very messy
- Best to avoid it and replace the convenient class method interfaces in Objective-C with C functions
- Though this is a minor version bump, it is API breaking
- There isn't a way to deprecated the old APIs and introduce new ones, we just have to remove the old ones to fix usages in Swift
- Apologies for the inconvenience!
- Swift does not like having an
- Replace
-
v2.22.0 Changes
- โ Add
TIPImageFetchSkipStoringToRenderedCache
toTIPImageFetchOptions
- This permits a fetch to skip storing to the synchronous rendered cache altogether after a fetch
- This is useful for UI that displays a large image but is not frequented regularly, such as a full screen image view
- By avoiding infrequent images going to rendered cache, the rendered cache can keep more relevent images in cache (or can be configured to be smaller)
- โ Add
TIPImageViewDisappearanceBehaviorUnload
toTIPImageViewDisappearanceBehavior
- This new behavior will set the
fetchView
image tonil
on disappearance - This new feature can really level up an app at keeping a memory footprint down automatically, no extra work is needed when using
TIPImageViewFetchHelper
for displaying images!
- This new behavior will set the
- โ Add
TIPImageViewDisappearanceBehaviorReplaceWithPlaceholder
toTIPImageViewDisappearanceBehavior
- This new behavior will set the
fetchView
image to a placeholder (low resolution) version on disappearance, which will be replace with the full image on visible return - Similar benefits to
TIPImageViewDisappearanceBehaviorUnload
but with the compromise of keeping a little more RAM for a placeholder to avoid UI situations that could yield an empty image view temporarily as the full image is decoded (notably for large images or slow devices)
- This new behavior will set the
- ๐ Rename
TIPImageViewFetchHelper
class'fetchDisappearanceBehavior
todisappearanceBehavior
- โ Add
shouldTreatApplicationBackgroundAsViewDisappearance
property toTIPImageViewFetchHelper
- This
BOOL
property will opt the fetch helper into using the disappearance behavior when the app backgrounds - Another big improvement for app memory footprint as the large amount of RAM used for images can be unloaded on app background, reducing the risk of the app being jettisoned!
- Impact is really great for large images on screen when backgrounded, be sure to set to
YES
for your large image views!
- This
- โ Add