Release Notes (iOS v3)

The web player release notes highlight the additions and improvements JWP has made to the iOS SDK v3 code. If you have any questions after reading a release note and linked documentation, please contact your JWP representative.


💡

To receive immediate notifications for all Player releases, add the following RSS feed URL to your RSS reader:

https://docs.jwplayer.com/players/changelog.rss


3.21

Version Date Description
3.21.1 6 Jan 2022 Fixed Issues
• Fixed an issue where VMAP was not honored when schedule and VMAP were both set.
• Fixed an issue where captions styling properties where initially undefined instead of a default option.

3.20

Version Date Description
3.20.2 13 Aug 2021
• Added pings to capture in-manifest caption analytics.
• Fixed a bug where some ads in an adPod for IMA VMAPs would play momentarily before being skipped.
• Fixed an issue where loading IMA a pre-roll ad in the first item of a playlist and advancing to next the third item causes the controls to disappear.
3.20.1 22 Jun 2021
• Upgraded IMA SDK to 3.14.3 to support IMASettings:sessionid for publishers customized session ID.


3.20.0 17 May 2021
• Added Chromecast supports GCKUICastButton for iOS.
• Upgraded Chromecast Sender SDK to 4.5.3.
• Fixed an issue where the player continues playing IMA Ads when the app comes back from the background.
• Fixed an issue where the caption button is removed from the toolbar when the video is replayed.


3.19

Version Date Description
3.19.2 28 Apr 2021
• Added in-manifest WebVTT caption support.
3.19.1 21 Jan 2021
• Fixed an issue where changing the fullscreen mode while playing IMA ads causes app to crash.


3.19.0 18 Dec 2020
• Updated IMA SDK to 3.13.0 and FreeWheel SDK to 6.38.0.
• Added adTagParameters to IMA DAI config.
• Fixed an issue where iOS SDK 3.18.1 can't compile for the simulator in Xcode 11.
• Fixed an issue where Reachability module causes app to crash.


3.18

Version Date Description
3.18.2 11 Nov 2020
• Fixed an issue causing the App to crash occasionally when onAdError and onAdWarning occur.
3.18.1 9 Oct 2020
• Fixed a bug causing the player to freeze when the App sent to background while playing an ad.
• Fixed an issue causing the App to crash when tried to change background color.
• Fixed an issue causing the App to crash when Goe-blocked VAST ad is loaded.


3.18.0 24 Sep 2020 Updates
• Upgraded the iOS SDK to use JWP 8.17.3.


Fixes
• Fixed an issue in Google IMA where a snapback isn't triggered properly an ad cuepoint is seeked past.
• Fixed a bug causing VMAP ads to not load as expected.
• Fixed an issue in HLS streams causing side-loaded VTT captions to only show if unselected then selected.


3.17

Version Date Description
3.17.0 10 Sep 2020
• Updated the FreeWheel SDK, which includes GDPR compliance updates.
• Fixed an issue in FreeWheel where the ad ID value always returned null.
• Fixed a bug causing the player not to continue playback when ad error 403 is thrown.

3.16

Version Date Description
3.16.2 24 Aug 2020
• Fixed an issue causing the App to crash occasionally when onAdError and onAdWarning occur.
3.16.1 7 Aug 2020
• Fixed a bug causing the player to freeze when the App sent to background while playing an ad.
• Fixed an issue causing the App to crash when tried to change background color.
• Fixed an issue causing the App to crash when Goe-blocked VAST ad is loaded.


3.16.0 20 Jul 2020 Updates
• Added a configuration option, playlistIndex, which enables a playlist to be loaded and start playback from any item within it, not just the first. The default of this option is a 0 index.
• Upgraded iOS SDK to use JWP 8.15.2.
• Fixed an issue causing side-loaded VTT Captions to only show if deselected then selected in HLS streams.


3.15

Version Date Description
3.15.1 18 Jun 2020 Fixes
• Fixed an issue preventing buffered content from playing when internet connectivity is lost.
• Fixed an issue in the VAST ad client that added a skip button to the ad when skipOffset was not defined.
• Fixed a bug where side-loaded VTT captions appeared too large when switching from portrait to landscape orientation in some cases.


3.15.0 10 Jun 2020 Updates
• Added support for using the iOS SDK as part of a module, which is integrated into final application, and without needing to create any Objective-C bridging headers in a SWIFT application.
• Added support for preview thumbnails, which are visible when using the scrub bar during playback. Thumbnail tracks can be defined with the JWTracks API and when ‘kind’ is set to “thumbnails”.
• Added support for any custom metadata to be defined in the setup and via API.
• Added a new callback, onAdWarning, which fires when a non-fatal ad error occurs that does not prevent fill.
• Created warning 70001 for VAST error code 1002, which occurs when a VMAP does not contain tracking events for the ad break.
• Added API to enable developers to modify a playlist item, prevent it from loading and transition instead to the following item, modify the ad block, and disable ads.
• Added Freewheel support for the adBreakStart and adBreakEnd delegates.


Fixes
• Added a configuration option, playlistIndex, which enables a playlist to be loaded and start playback from any item within it, not just the first. The default of this option is a 0 index.
• Fixed a bug causing the onPlay callback to fire when resuming playback after a programmatic seek event.

3.14

Version Date Description
3.14.2 21 May 2020 Fixes
• Fixed an issue causing plays to be reported as originating from desktop devices instead of mobile ones.
• Fixed conflicts encountered when interacting with and resuming playback from the lock screen when there are multiple active players on the same screen.
• Fixed a bug where the the current time display did not work when playback was initiated by a seek event.
• Fixed an issue causing the play/pause button to stop working after the user receives a notification from another app.


3.14.1 15 May 2020 Fixes
• Fixed an issue where JWPlayerDelegate’s onAd callbacks were returning empty adEvents.
• Fixed a build error when importing the SDK.
3.14.0 6 May 2020 Updates
• Upgraded iOS SDK to use JWP 8.13.7.


Fixes
• Fixed an issue where taps are not registered during ad playback in iOS versions equal to and lower than 10. This fixed issue affected players using the VAST ad client and have player controls set to false.
• Fixed an issue where ad clickthrough redirects fail when the redirect URL contains another URL as a parameter.

3.13

Version Date Description
3.13.0 27 Apr 2020 Updates
• Added support for a startTime property that allows developers to define the number of seconds from the start of a media asset when playback should begin. More information and code samples can be found here.
• Added program-date-time metadata type found in JWMetaEvent. The program-date-time metadata event fires when playback enters the section of an HLS stream tagged with #EXT-X-PROGRAM-DATE-TIME. Note: #EXT-X-PROGRAM-DATE-TIME support requires iOS 9.3+
• Upgraded iOS SDK to use JWP 8.13.1.
• Exposed pauseReason parameter in the onAdPause event.
• Added adStarted, adBreakStart, and adBreakEnd events for the Google IMA ad client.
• Updated Google IMA ad delegate methods to ensure delivery of consistent values through the ad events objects.
• Updated Google IMA ad events order. onAdTime is now fired after the onAdPlay event is fired.


Fixes
• Fixed an issue where manifest requests are made multiple times per day. Now the manifest is only requested once per day or if the SDK version changes.
• Fixed an issue where the player remains in playlist mode (displaying the next up and more buttons) when it is loaded with a single item playlist after being initialized with a playlist of multiple items.
• Fixed an issue where occasionally Google IMA DAI pre-roll ads would start a split second after playback.


3.12

Version Date Description
3.12.1 22 Apr 2020 Fixes
• Fixed an issue where unplugging earphones from a device during ad playback causes the player screen to freeze and become unresponsive to taps
•Fixed a thread synchronization issue where a crash could result from reading and updating a property at the same time
3.12.0 26 Mar 2020 Updates
• Upgraded iOS Google IMA support to version 3.11.3    
• Google iOS IMA SDK 3.11.3 is the final version that supports iOS 9.x    
• All remaining references to UIWebView were removed from Google iOS IMA SDK 3.11.2

• Removed all code enabling IDFA transmission from iOS SDK


Fixes
• Fixed an issue that caused IMA preroll ads to not play when using Google iOS IMA SDK 3.11.2


3.11

Version Date Description
3.11.1 16 Mar 2020 Updates
• Expanded support to display thumbnail images for audio-only MP4 files.
• Added support to surface metadataCueParsed events for EXT-X-DATERANGE tags.
Fixes
• Fixed a Chromecast issue where casting to a receiver causes the app to crash and provides a EXC_BAD_ACCESS error
• Fixed issue where repeatedly loading a playlist item causes the loadTime property of the onFirstFrame event to be null, resulting in a crash.
3.11.0 28 Feb 2020 Updates
• Added support for Google IMA DAI. See our iOS SDK developer documentation for more details.
• Developers can now set the volume for Google IMA ads relative to other audio output.
• Exposed creativeAdId and creativeID in the AdImpressionEvent payload for Google IMA ads.


Fixes
• Optimized and increased stability of file handling.
•Fixed issue where relative URL references in ad tags do not load successfully.


3.10

Version Date Description
3.10.2 20 Feb 2020 Fixes
• Fixed an issue where players using a JWAdRule.timeBetweenAds configuration with the VAST ad client will oscillate between player states when there is an empty VMAP mid-roll slot
3.10.1 6 Feb 2020 Updates
• Exposed additional date-range metadata items that might be included in an HLS #EXT-X-DATERANGE tag


Fixes
• Fixed an issue where the playerView disappears when switching to fullscreen mode in projects that are supporting multiple windows
• Fixed an issue where serializing specific date-range metadata to JSON would cause a crash
• Fixed an issue where players that have the license key entered programmatically crash when their app is upgraded from iOS SDK version 3.8 to a newer version


3.10.0 30 Jan 2020 Updates
• Extended FreeWheel ad support to include versions 6.15.0 - 6.32.0
• Added support for playlist-level configuration of FreeWheel where the JWFreewheelConfig can now be nested within an individual JWPlaylistItem. Use case descriptions and a code sample can be found here
• Added ability for pauseAd method in JWPlayerController to be called when using the FreeWheel and Google IMA ad clients
• Added addButton() and removeButton() API methods allowing developers the ability to add or remove custom player buttons to the player control bar. When new buttons are added via the addButton() API method, they can call back to developers' custom native code
• Added getPlaylistItem() and getPlaylist() API methods allowing developers to get the current playlist or playlist item from a player instance
• Added date-range metadata type found in JWMetaEventmetadata). The date-range metadata event fires when playback enters the section of an HLS stream tagged with #EXT-X-DATERANGE. Note: #EXT-X-DATERANGE support requires iOS 9.3+


Fixes
• Fixed an issue where default controls are misplaced when the playerView intersects the notch in iPhone X+ devices
• Fixed an issue where the player does not recover when a Google IMA exclusion rule is in the ad pre-roll slot
• Fixed an issue where tapping the screen while an ad is buffering causes the player UI to stop responding until the ad creative timeout fires and the main content resumes playback
• Fixed an issue where calling pause() in onBuffer does not pause the playback


3.9

Version Date Description
3.9.0 16 Dec 2019 Updates
• Made improvements to AirPlay implementation in SDK and best practice apps to ensure they follow AirPlay 2 best practices
• Upgraded iOS SDK to use JWP 8.11.8
• Added onAdBreakStart and onAdBreakEnd event callbacks to JWPlayerDelegate.h


Fixes
• Fixed an issue where scrubbing while in an AirPlay session will sometimes stop the player or reset the position to 00:00
• Fixed an issue where pressing play or pause during an AirPlay session causes the sender to disconnect and reconnect to the receiver
• Fixed an issue where during an AirPlay session the Control Center fails to display the Now Playing information and the controls do not work
• Fixed issues with misaligned vertical and horizontal webVTT captions that use cue positioning
• Added JWPlayerError.h and JWAdCompanion.h class declarations to Swift header


Known Issues

Due to a third party Google IMA bug, there are some inconsistent Google IMA ad playback behaviors during AirPlay sessions. These include:


• Playback control is allowed during ad playback
• When a pre-roll or mid-roll ad is completed, the player displays the play button and the AirPlay session ends
• Mid-roll ads will not play if the user seeks over its scheduled time
We have reported these issues with Google IMA support. Once a fix is provided we will update the iOS SDK accordingly

3.8

Version Date Description
3.8.1 25 Nov 2019 Update
• Maintenance release.
3.8.0 5 Nov 2019 Update
• Upgraded the iOS Google Cast Sender library to version 4.4.5 which provides an improved experience in iOS 13. Apple introduced stricter permissions requirements in iOS 13 that enforces a tighter control for bluetooth access. To accommodate this change there are now two implementation options—guest-mode that includes bluetooth support and non-guest mode which does not have Bluetooth support. When upgrading your app you will need to decide if you want to keep guest mode support or remove guest mode support. More information on how to update your casting implementation can be found here.


Fixes
• Fixed an issue where Freewheel VMAP ads served through the JWP VAST plugin made two ad requests before playing an ad
• Fixed an issue where video audio played after the player was released
• Fixed an issue that prevented the home screen indicator in iPhone X and above models from fading when in fullscreen
• Fixed an issue with multi-threading synchronization
• Fixed weak reference usage and removed assertions from network reachability

3.7

Version Date Description
3.7.0 4 Oct 2019 Update
• Added JWFriendlyAdObstructions API class to replace the now deprecated JWExperimentalAPI class that enables the registration of video controls that overlay the media element. Typically, these video controls are considered obstructions and reduce the viewability rate calculated by the Open Measurement SDK. More information on how to use the JWFriendlyAdObstructions API can be found here
• Exposed adId method declared in JWAdEvent.h for Google IMA
• Improved fullscreen user experience by preventing any noticeable black screens from appearing during the transition to fullscreen


Fixes
• Fixed issue where UIResponder's becomeFirstResponder UI method is not being called on the main thread
• Fixed an edge case where an exception occasionally occurs because of a call to NSString’s stringByAppendingString
• Fixed an issue where calling play() after stop() results in endless buffering
• Fixed an issue where the previous ad frame is loaded for 1 second before the current ad when using Google IMA VMAP
• Fixed an issue where when the player is given an empty VAST XML file in Google IMA it causes infinite buffering

3.6

Version Date Description
3.6.3 12 Sep 2019 Updates
• Upgraded to Google IMA iOS version 3.9.2
• Improved the user experience by retaining the paused state after a viewer seeks while paused. Developers who have worked around this in the past by calling pause() on seek no longer need to use the API, but anyone who wishes to resume playback automatically after a seek event now must call play()


Fixes
• Fixed an issue where 608 captions can not be disabled in a playlist item containing side-loaded captions
• Fixed an issue where duplicate captions appear for playlist items that contain both side-loaded and in-stream 608 captions
• Fixed issue where VMAP ads scheduled with Google IMA in live streams cause the player to infinitely buffer
3.6.2 5 Sep 2019 Fix
• Removed debug assertions from production build in ReachabilityCallback function to avoid uncaught exception


3.6.1 30 Jan 2020 Fixes
• Fixes bug where pinch gesture recognizers were ignored in fullscreen. Now custom pinch gesture recognizers supersede our default pinch gesture recognizer which is used for zooming in and out.
• Fixed an issue where the onControlBarVisible callback was not firing
• Fixed an issue where calling the stop() method would stop the player but did not return it the idle state
• Fixed issue where side-loaded captions did not display during offline playback


3.6.0 15 July 2019 Updates
• Added side-loaded caption support for offline playback
• Exposed nextupOffsetPercentage property which allows the next up overlay to be displayed at a specified percent of the way through the video, rather than at a fixed number of seconds from the beginning or end of the video. When the nextupOffsetPercentage is set, it overrides nextupOffset
• Upgraded SDK to use JWP 8.8.6
Breaking Changes
• Annotated Objective-C headers to be Swift friendly. This may require code changes for previous Swift implementations.
• Reintroduced the required fetchContentIdentifierForRequest:forEncryption:withCompletion: method in the JWDrmDataSource protocol. This method is required to play DRM encrypted streams.


Fixes
• Fixed an issue where the onControlBarVisible callback was not firing when setting player.controls:true
• Fixed warning flag by the main thread checker


3.5

Version Date Description
3.5.1 30 May 2019 Fixes
• Fixed an offline playback issue where only the first playlist item successfully plays in locally stored playlists and all subsequent playlist items fail to play.
• Fixed a lockscreen issue where the play/pause buttons in the lockscreen control center flicker for less than 1 second when pressed when the device is locked.
• Fixed an issue where sometimes when the device is locked, the elapsed playback time does not display in the lockscreen control center time slider.


Known Issue
• During Freewheel ad playback, user cannot use play or pause in lockscreen control center when device is locked.
3.5.0 14 May 2019 Update
• Migrated webview handling from UIWebView to WKWebView.


Fixes
• Fixed an issue where lockscreen controls do not appear when the device is locked during playback.
• Fixed an issue where VAST ads don't redirect to the advertisment's link when clicked..


Known Issue
• When device is locked, the play/pause buttons in the lockscreen control center flickers for less than 1 second when pressed. This will be fixed in a later iOS release.
• Sometimes when the device is locked, the elapsed playback time does not display in the lockscreen control center time slider. This will be fixed in a later iOS release.


3.4

Version Date Description
3.3.0 8 Apr 2019 Updates
• Upgraded to Google IMA iOS version 3.8.1 which includes IAB’s Open Measurement SDK that enables third-party viewability and verification measurement for ads served to mobile and desktop environments.
• Added a new "Experimental API" class that enables the registration of video controls that overlay the media element. Typically, these video controls are considered obstructions and reduce the viewability rate calculated by the Open Measurement SDK. Learn more about Google IMA’s Open Measurement SDK integration and how to register video controls overlay obstructions here.

3.3

Version Date Description
3.3.0 8 Apr 2019 Updates
• Upgraded Google Cast SDK library to v4.3.5
• Improved fullscreen implementation to use AutoLayout
• Enabled pinch-to-zoom on Fullscreen for iPhone X series
• Added Fairplay DRM support for Airplay
• Changed the Enums to NS_ENUM for better type-checking
• Added onWarning callback for non-fatal error debugging or troubleshooting purposes
• Improved JWP expired license user experience by adding an error message notification and halting player setup or playback


Known Issues
• Caption tracks with the defaultTrack property set to true will not be rendered when casting via Google Cast

3.2

Version Date Description
3.2.4 7 Mar 2019 Fixes
• Fixed an issue where ad clickthrough on iOS 9 does not open Safari
• Fixed an issue where onBufferChange passes the wrong values for bufferPercent
• Fixed an issue where buffered or local video stops playing when connectivity issues occur
3.2.3 25 Feb 2019 Enhancements
• Enabled support for iOS 9 and 10 when using CocoaPods


3.2.2 25 Feb 2020 Enhancments
• Added support for the Developer license
• Added a condition to use the previous DRM API to support iOS 9 and iOS 10


3.2.1 5 Feb 2019 Fixes
• Fixed an issue where omitting ad rules would disable ad schedules after the first playlist item


Fixes
• Fixed an issue where the onControlBarVisible callback was not firing when setting player.controls:true
• Fixed warning flag by the main thread checker


3.2.0 23 Jan 2019 Fixes
• Fixed an issue where IMA VMAP with the same tag for mid-roll and post-roll causes buffering at the end of the video
• Fixed an issue where IMA VMAP mid-roll plays as a pre-roll when video is replayed
• Fixed an issue where cue points for FreeWheel mid-rolls are not shown and they don't play for mp4 streams
• Fixed an issue where playback rate resets to default after VAST ad
• Fixed an issue where exiting fullscreen mode when iPad is in landscape mode causes a device to go into portrait mode
• Fixed an issue where clickout from VPAID ad doesn't occur
• Fixed an issue where DVR stream shows wrong current position
• Fixed an issue where the Live button for DVR streams redirects to the very beginning
• Fixed an issue where UI becomes non-responsive when device is rotated from portrait orientation to landscape orientation
• Fixed an issue where empty VAST causes an error if a stream is DRM protected
• Fixed an issue where post-ad infinite spinner shows after some ads
• Fixed an issue where callbacks fire for the first ad instance in an ad pod only
• Fixed an issue where manual switch between playlist items cannot be performed
• Fixed an issue where source switching is broken
• Fixed an issue where FreeWheel mid-roll does not show ad counter (1 of X) when two or more ads are in a pod
• Fixed an issue where the player does not force portrait orientation when exiting fullscreen
• Fixed an issue where seeking over two cue points causes the ads within both cue points to play
• Fixed a random crash issue which may occur after a few minutes of playback
• Fixed an issue where local CSS cannot be loaded
• Fixed an issue where DVR reports a positive number of seconds
• Fixed an issue where controls for DVR stream show 00:00 once configured


Features
• Added the ability to set custom parameters to FreeWheel ad configurations. This allows publishers to better target their campaigns. Please refer to the FreeWheel section for the example of usage.
• Fixed warning flag by the main thread checker


Enhancements
• Upgraded SDK to use JWP 8.7.1
• Moved to new DRM API. As a result the latest supported iOS version is 11


3.1

Version Date Description
3.1.4 7 Dec 2018 Fixes
• Fixed an issue where the player fails to initialize with error code 100012 when target name has spaces or special characters.
3.1.3 17 Feb 2018 Fixes
• Fixed an issue that prevents seek from accepting a negative value during DVR stream playback.
• Fixed an issue that shows an incorrect, current position during DVR stream playback.


3.1.2 19 Sep 2018 Fixes
• Fixed an issue where an echo might be heard when the playback rate is less than 1.
• Fixed an issue where player size is not considered when choosing a VAST ad media.
• Fixed an issue where UIWebView baseUrl creates a URL with a file:// protocol, if relative protocol was used.
• Fixed an issue where MPNowPlayingInfoCenter has an empty title if config.title is empty.


3.1.1 5 Feb 2019 Enhancements

We made the JWPlayerError class public. To be able to use this class in Swift, import this class into the Bridging Header file.



3.1.0 23 Aug 2018 Fixes
• As another step towards parity between our native SDKs and the web player, we have added the ability to set up custom playback rates for your media. Please refer to the sample in this documentation section.

3.0

Version Date Description
3.0.1 25 Jul 2018 Fixes
• Fixed an issue where ad pods would not be shown on a seek bar if the ad client is FreeWheel
• Fixed an issue where playback would not automatically play after pre-roll if the ad client is FreeWheel
• Fixed an issue where midrolls would not play if they were set up using percents or timestamp and the ad client is FreeWheel
3.0.0 2 Jul 2018 Fixes
• Support for new advertising rules, including timeBetweenAds, startOnSeek, frequency, and startOn. Please refer to our Ad Rules Reference for details on how to use them.