Releases: SvenTiigi/YouTubePlayerKit
Version 2.0.0
What's Changed
Important
This release contains several breaking changes when coming from version 1.9.0
or earlier.
Please refer to the updated README and documentation for the latest APIs of the YouTubePlayerKit.
Full Changelog: 1.9.0...2.0.0
- Support for Swift 6 strict concurrency checks and data race safety.
- Improved code documentation and provided additional insights into the specific behaviors of several APIs and properties.
- Improved performance and stability.
- Bumped minimum deployment target for iOS from 13 to 15 and for macOS from 10.15 to 12
- First class async/await function API (removal of completion closure based APIs).
- Added several new APIs such as observing the fullscreen and volume state as well as changing the caption font size.
- Improved URL parsing of the
YouTubePlayer.Source
for the most common and well known YouTube URL formats. - Added a new enumeration case
.videos(ids:)
to theYouTubePlayer.Source
allowing to play individual video identifiers as a playlist. - Added advanced APIs to observe the incoming stream of
YouTubePlayer.Event
as well as to run custom JavaScript code and supply custom HTML code. - Added logging which can enabled when initializing an instance of
YouTubePlayer
to gain more insights of the underlying JavaScript communication and stream of events. - Improved example application.
- Migrated tests from XCTest to Swift Testing.
Migration Guide
When coming from version 1.9.0
or earlier there are two main topics to consider.
YouTubePlayer Initialization
In Version 2.0.0 the designated initializer of a YouTubePlayer takes four parameters: a source, parameters, a configuration and a boolean whether logging should be enabled. Previously the player was initialized with just two arguments a source and a configuration.
let youTubePlayer = YouTubePlayer(
// Possible values: .video, .videos, .playlist, .channel
source: .video(id: "psL_5RIBqnY"),
// The parameters of the player
parameters: .init(
autoPlay: true,
showControls: true,
loopEnabled: true,
startTime: .init(value: 5, unit: .minutes),
// ...
),
// The configuration of the underlying web view
configuration: .init(
fullscreenMode: .system,
allowsInlineMediaPlayback: true,
customUserAgent: "MyCustomUserAgent",
// ...
),
isLoggingEnabled: true
)
To differentiate between parameters and configuration, understand that parameters control the behavior and style of the YouTube player, while the configuration is linked to the underlying web view.
You cannot modify the configuration after instantiation; however, it is possible to update the parameters, as shown below:
youTubePlayer.parameters.showControls = false
Warning
Updating the YouTubePlayer.Parameters
during runtime will cause the player to reload.
Async/Await APIs
In version 1.9.0
and earlier, YouTubePlayerKit offered both a completion closure-based API and an async API. Starting with version 2.0.0, only the async variant will be supported as the primary API.
- youTubePlayer.isMuted { result in /* ... */ }
+ let isMuted = try await youTubePlayer.isMuted()
In case of an error, most of the functions are typed to throw a YouTubePlayer.APIError
.
This allows you to easily examine the reason for the error, any underlying error, and the executed JavaScript along with its response.
do {
try await youTubePlayer.setCaptions(fontSize: .small)
} catch {
print(
"Failed to set captions font size",
error.reason,
error.underlyingError,
error.javaScript,
error.javaScriptResponse
)
}
Version 1.9.0
What's Changed
- Added autoplay blocked API
- Extended playback metadata object
- Reset player state to onReady after an error by @acosmicflamingo in #98
New Contributors
- @acosmicflamingo made their first contribution in #98
Full Changelog: 1.8.0...1.9.0
Version 1.8.0
What's Changed
- Added
set(startTime:)
function to set the start time of a video - Added
fastForward
andrewind
functions - Refactored duration & time return types from Double to Measurement
- Add additional convenience method for creating a YouTubePlayer.Source from a URL object by @armadsen in #87
New Contributors
Full Changelog: 1.7.0...1.8.0
Version 1.7.0
Version 1.6.0
What's Changed
- Added additional PlaybackQuality value that occurs for some videos by @shadone in #78
- Fixed a bug that could potentially cause a runtime crash due to a race condition. (#79)
- Improved YouTubePlayer API
New Contributors
Full Changelog: 1.5.4...1.6.0
Version 1.5.4
What's Changed
- Fixed an issue where a YouTube url wasn't parsed correctly (#75)
Full Changelog: 1.5.3...1.5.4
Version 1.5.3
Version 1.5.2
What's Changed
- Removed option to control playback of 360° videos / spherical videos due to a limitation of the underlying YouTube Player iFrame API (#69)
Full Changelog: 1.5.1...1.5.2
Version 1.5.1
What's Changed
- Fixed a bug where
loopEnabled
wasn't looping the video correctly (#68)
Full Changelog: 1.5.0...1.5.1
Version 1.5.0
What's Changed
- Added an option to set the
origin
in theYouTubePlayer.Configuration
(#64) - Added
closeAllMediaPresentations()
function to close any current picture-in-picture video and fullscreen video by @julianjohn in #66
New Contributors
- @julianjohn made their first contribution in #66
Full Changelog: 1.4.0...1.5.0