All Versions
79
Latest Version
Avg Release Cycle
65 days
Latest Release
-

Changelog History
Page 2

  • v2.21.5 Changes

    • ๐Ÿ‘ Adopt direct support for Objective-C code and eliminate PRIVATE_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 check self != nil)
      • Avoids awkward self->_ivar access in the direct methods (can stick with just using _ivar)
      • Same low binary overhead as private C functions
  • v2.21.0 Changes

    • Revise TIPError.h to be much more Swift compatible
  • v2.20.5 Changes

    • 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
  • v2.20.0 Changes

    • 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 and MP4)...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 to 2.20
      • In particular, custom codecs will need to be updated to support the new targetDimensions and targetContentMode arguments
  • v2.13.5 Changes

    May 31, 2020

    2.13.5

    • Add WebP support to Catalyst builds
      • See WEBP_README.md
    • ๐ŸŽ Miscellaneous performance improvements
      • Async load the default codes to avoid main thread blockage on app launch
      • Tighter memory management with autorelease pools
      • TIPImageFetchHelper will now register for all image cache updates and filter on observation vs registering against specific pipelines, which avoids register/unregister locking performance impact
      • Add TIPDetectImageTypeFromFile(...) for efficient and effective image type detection from a file
    • โž• Add replacements for UIImagePNGRepresentation and UIImageJPEGRepresentation
      • Unifies to the TIP codec based encoding rather than the UIKit implementation which can be unreliable for consistency.
      • Provides progressive support for JPEG variant of functionality.
      • See -[UIImage tip_PNGRepresentation] and -[UIImage tip_JPEGRepresentationWithQuality:progressive:]
    • โž• Add some palette based image utilities
      • -[UIImage tip_canLosslesslyEncodeUsingIndexedPaletteWithOptions:]
    • Fix bug where a GIF load may be incomplete in response but complete in data loaded failing to load in TIP
      • Mostly an issue with some CDN vendors terminating the HTTP response incorrectly

    2.13.2

    • โž• Add [TIPGlobalConfiguration defaultInterpolationQuality]
      • By default, will use CGInterpolationQualityDefault which is same behavior as before
      • Add quality arg to image scaling with [UIImage tip_scaledImageWithTargetDimensions:contentMode:interpolationQuality:decode:]

    2.13.1

    • โž• Add [TIPImageFetchDelegate tip_imageFetchOperation:didLoadDirtyPreviewImage:] support
      • This allows for the rendered cache to mark a specific entry dirty (by identifier)
      • On fetch operation load, the dirty preview can be synchronously loaded while the op continues on async
      • This helps systems where a larger version of an image with a shared identifier loads and matching fetch helpers that are not visible in the UI take note in order to refresh with the better resolution image, but without the risk of clearing that image's render cache which can lead to a 1 or 2 frame "flash" of the image loading async from cache
  • v2.13.2 Changes

    • โž• Add [TIPGlobalConfiguration defaultInterpolationQuality]
      • By default, will use CGInterpolationQualityDefault which is same behavior as before
      • Add quality arg to image scaling with [UIImage tip_scaledImageWithTargetDimensions:contentMode:interpolationQuality:decode:]
  • v2.13.1 Changes

    • โž• Add [TIPImageFetchDelegate tip_imageFetchOperation:didLoadDirtyPreviewImage:] support
      • This allows for the rendered cache to mark a specific entry dirty (by identifier)
      • On fetch operation load, the dirty preview can be synchronously loaded while the op continues on async
      • This helps systems where a larger version of an image with a shared identifier loads and matching fetch helpers that are not visible in the UI take note in order to refresh with the better resolution image, but without the risk of clearing that image's render cache which can lead to a 1 or 2 frame "flash" of the image loading async from cache
  • v2.13.0 Changes

    September 11, 2019
    • ๐Ÿ‘ Separate out authentication support for image requests from hydration support
      • Hydration now just serves populating the image fetch's URL request
      • Authorization now serves to generate an Authorization header's value to be applied as a separate step
      • Works better with multi step networking frameworks such as TwitterNetworkLayer
      • See [TIPImageFetchRequest imageRequestAuthorizationBlock]
  • v2.12.2 Changes

    June 04, 2019

    2.12.2

    • โž• Add automatic handling of unnecessary image download errors when the download has finished loading
      • It is not uncommon for a service/CDN to yield an error after the final byte of the response has been loaded by the client
      • The consequence of treating a successful load as a failure is that upon next fetch for that image an unnessecary network request will trigger:
      • For image resumption supported loads, resumes the load beyond the available byte range
      • For full image loads, a redundant download
      • When TIP sees an error on image download but has all the bytes (looking at Content-Length header), TIP now posts TIPProblemImageDownloadedWithUnnecessaryError problem

    Also

    • ๐Ÿ›  Fix a number of bugs
    • โž• Add more util methods to UIImage category
  • v2.12.1 Changes

    February 21, 2019
    • ๐Ÿ›  Fix bugs related to capping the sizes of caches
      • Capping a cache to 0 bytes would not completely disable it as documented, fixed
      • Setting the max ratio value to a negative value would not use the default value as documented, fixed
      • Thanks to @jml5qh for filing this issue (#41)
    • โš  Analyzer warning fixes too (not actual bugs)