- N/A
- Added more error handling to address the issue with attempting to load video URLs that have no file extension in
URLVideoPlayerView
by validating the url string. This url validation was extended toURLImageView
- N/A
- Added an Issues template outlining how new issues should be opened
- Set the
playImmediatelyWhenReady
boolean back to false when resetting theURLVideoPlayerView
- N/A
- N/A
- Added additional checks to see if an
.uncached
file exists before falsely returning a.none
resource existence state - Added a discardableResult optional Error to the
loadVideoFrom(urlString:)
function in case the URL initialization fails - Removed unnecessary dispatches the same
.userInitiated
thread
- Fixed a bug where a new downloadTask would be created and started for files that had been already been downloaded but had not been cached. Often caused through the prefetching APIs
- Fixed an issue in the Example VideoCell that prevented button taps
- Fixed issue with deleting files in directories by checking if the suffix as well as the prefix of every URL in the directory produces a matching result
- N/A
- Replaced all uses of the
class
keyword for protocol inheritance with AnyObject to address warnings
- N/A
- N/A
- Added extra error handling
- Replaced the singleton architecture of the
AssetExportManager
with simple static functions
- Fixed possible issue where moving downloaded video files can have a collision if an outdated video already exists with the same URL. Therefore, the downloaded video would technically never be cached.
- Implemented the proper method of caching downloaded video files to memory. Before it had been incorrectly using the file system as a sort of proxy, but not anymore.
- Added
resolution
andaspectRatio
to the VideoPlayerView to help with determining the proper size constraints needed to display the video without cropping. - Added a new function
requiredSizeFor(width:)
to the VideoPlayerView which will return a CGSize that would allow the video to fit within a given width without cropping. - Defined a default intrinsic content size width for VideoPlayerView which uses the screen's bounds as a starting point. This allows the view to grow with its content. Override as necessary
- Added the
videoExportQuality
option as an argument for the URLVideoPlayerView. See point #2 in Improvements. - Added the
AssetExportManager
to assist with exporting assets at different qualities. This is an internal object.
- Replaced the
.background
QoS when performing non-UI tasks with.utility
due to the risk of these operations not running when the battery is low. - Removed the default compression for videos. Instead, the URLVideoPlayerView offers another argument in its initializers:
videoExportQuality
. There are 3 options:.default
which will return the original video after it is downlaoded with no compression,.medium
and.low
.
- Changed the layout of the example UICollectionView. Videos in cells are no longer forced into a uniform size. Instead, they will resize depending on their resolution and the width of the cell.
- N/A
- N/A
- Fixed issue where performing async operations on the
URLVideoPlayerView
's player before it has been initialized would not work properly in cases where the player has already been initialized. Examples include trying to loop videos or generate thumbnails after the player exists.
- N/A
- Replaced uses of
count == 0
orcounf > 0
with simply checking if an arrayisEmpty
. According to sources, this is a more efficient approach
- N/A
- Added looping to URLVideoPlayerView. Can now start looping videos, with completion handler for each loop.
- Added asynchronous thumbnail generation to URLVideoPlayerView
- Added extension to String class to validate URL strings before initializing the URL object
- Refactored private functions for acquiring images and videos by replacing the urlString parameter with a validated URL
- Fixed issue where using the loadVideo(…) function with completion handler would not call the completion block if the video was already cached
- Added Boolean for determining if
URLVideoPlayerView
is currently playing - Made the function for setting inMemory cache item costs, public
- Added link to more documentation
- Added
@discardableResult
for deleting items from file system cache
- N/A
- N/A
- N/A
- Committing podspec. Failed to do so in previous new version update
- N/A
- Updated README to include documention on the
URLVideoPlayerView
as well as provided updated documentation onURLImageView
- N/A
- N/A
- Downgraded minimum iOS deployment target from iOS 11.0 to iOS 10.0
- N/A
- N/A
- Moved the
URLImageView
VideoPlayerView
andURLVideoPlayerView
and all of their relevant supplementary classes to a combined folder called views
- N/A
- Made the
URLImageView
VideoPlayerView
andURLVideoPlayerView
IBDesignable
- The
URLImageView
VideoPlayerView
andURLVideoPlayerView
can now be used in Storyboard
- N/A
- Committing
Podfile.lock
as suggessted by cocoapods.org
- N/A
- N/A
- Added .none case to CacheLocation to deprecate the CachePolicy enum
- Added relevant properties of DownloadTaskRequest to encodable/decodable functions
- Deprecated the CachePolicy enum in favor of just using CacheLocation
- N/A
- Created
CachedResourceIdentifierContext
to separate concerns of identifying resources - Created
DownloadManagerContext
to separate concerns of identifying pending downloads - Added functions for cancelling, pausing and resuming all available download tasks
- Implemented
didCompleteWithError
function for handling when downloads fail with error or finish without creating file URL - Implemented URLSession background function to handle when downloads complete while app is in background
- Added a reset function to
URLVideoPlayerView
to perform clean up and revert to initial state - Created internal
CachedResourceIdentifier
struct to keep track of cached resources and their location, whether in memory or file system. - Added utility function for getting info on files cached to the file system such as file size
- Added functions for handling prefetch APIs such as pre-starting resources, cancelling and pausing downloads of external resources
- Created the
ObservableAVPlayer
class to observe when a player reaches readyToPlayStatus. The URLVideoPlayer is then notified - Added functions to
URLVideoPlayerView
for playing video instead of accessing the player directly
- Cleaner code in
Celestial
class - Cleaner code in
DownloadTaskManager
class - Deprecated the
GenericDownloadModel
class in favor using only theDownloadTaskRequest
, results in cleaner code - Addressed Data race (reader/writers issue) by using synchronous and barrier requests
- Downloads may complete while app is in background
- Improved on searching for videos in file storage by not using prefix/suffix during search. Videos are not saved by size/resolution at this time.
- Renamed functions to be more obvious with their purpose.
- Moved a variety of structs, enums and protocols to more generic places, improving code readability
- Addressed risk of reference cycles
- Moved most functions for beginning downloads, etc. off the main thread and onto the background and userInitiated threads where applicable
- Proper observation of when a video is ready to play
- Playing videos with
URLVideoPlayerView’s
play function will observe when the player has been initialized and ready to play. Results in being able to essentially “play a video when it is ready”
- Fixed Data race (reader/writers issue)
- Fixed issue where
localUniqueFileName
would unexpectedly contain its own file extension in the file name - Addressed reference cycles by specifying weak self in various closures
- Fixed issue where the play() function could be called on a
URLVideoPlayerView’s
AVPlayer
before it exists, resulting in a blank view.
- Added custom Celestial related errors to provide more information on failed tasks
- Added URL and String extension for creating a unique local file name
- Improved scroll performance when downloading and displaying images in UIScrollView cells by performing UIImage resizing on another thread.
- Provided a less error-prone method of identifying cached resources by using the original SourceURL as the key. This works for both inMemory and FileSystem stored items by reconfiguring the SourceURL to be compatible with both. Improves upon handling URLs with unexpected forward slashes.
- Downloading and displaying images in UIScrollView cells no longer hangs up the main thread
- Downgraded minimum target from iOS 13 to iOS 11
- Added support for pre-downloading, pausing and resuming tasks. To be used with Prefetching APIs
- Added resource existence state check which allows for checking various states of a resource such as currently downloading, finished but uncached, cached etc. This expansion of states allows for more flexibility when handing downloading resources in UIScrollViews
- Exposure of pre-downloads allows for Prefetching APIs to begin downloads before UIScrollView cells appear on screen. Contributes to less time waiting for download
- Moved AVURLAsset.loadKeys to extension to avoid duplicated code
- Removed video resolution from file names as it serves little purpose. Cleaner code
- Used Concurrent queue to initiate downloads.
- Use of concurrent queue to access current downloads fixes possible reader-writers crash when accessing the dictionary
- Added caching videos
- Added caching to file system. Option of caching to memory still available
- Added functionality to pause and resume download of external resources
- Added option of caching to file system fixes issue of NSCache releasing data at inopportune times.
- Prevented UI-blocking by preparing images and videos on background thread and displaying on main thread only when ready. Improves scrolling performance in UITableView and UICollectionView
- Added superclass
URLCachableView
andURLCachableViewDelegate
to help with subclass conformance and removal of redundant delegate receivers. Latter reduces code on developer's end.
- Fixed issue of scrolling performance taking a hit when disaplying images and videos
- Added
VideoPlayerView
for conveniently allowing for playing videos in a UIView that maintains and auto resizes its own AVPlayerLayer. Also contains getter/setter for AVPlayer
N/A
N/A
N/A
N/A
- Made the setCacheCostLimit function public
- Added a "debug mode" to optionally print information to the console
- Added NSCacheDelegate to observe when items are about to be evicted
- Updated example code to showcase new cachable videos within UICollectionView
- Added more code examples to README
- Resizes downloaded images on background thread (within URLImageView downloadTask) to match the size of the URLImageView, resulting in smaller image files. This also made scrolling cells with images faster and removed visible stutter.
- Fix scroll stutter due to handling large images on main thread
- Implemented new URLImageView function for observing progress, completion and errors all from within the same function using closures instead of delegation.
- Implemented DownloadTaskHandler struct to assist with closure-related download function
- Updated example code to showcase new function
N/A
N/A
- Added initial usage descriptions to the README. Examples include how to initialize/use:
- CachableAVPlayerItem for caching and playing videos
- URLimageView for caching and displaying images
- Loading cachable images in UICollectionView / UITableView cells
- Additionally, code examples show the use delegation functions
N/A
N/A
* Created this CHANGELOG file
N/A
N/A
- Added documentation to the various classes, structs, functions and properties
N/A
- Changed the access modifier on the CachableAVPlayerItem and the URLImageView from public to open, in order to allow subclassing.
N/A
- Created a convenience initializer for URLImageView that automatically loads the image from the url
- Added two delegate functions for setting cache cost limit and count limit to Celestial
N/A
N/A
- Latest release with video caching and image caching implemented
N/A
- Implemented video caching
- Implemented the CachableAVPlayerItem class, which is a subclass of the AVPlayerItem that allows Data(NSData) from a downloaded video to be cached.
- Implemented the internal ResourceLoaderDelegate class, to assist with caching video data
N/A
N/A
N/A
- Refactored the Image cache to be more modular
N/A
- First commit
- Implemented Image caching and URLImageView which loads images from external URLs
N/A
N/A