Latest Releases JW Player JW Platform iOS SDK Android SDK


Features, Fixes, & Improvements

New features and fixes.


Release Date: September 13, 2022

New Features

  • Support for ARM64 simulators. Please note that the Google Cast SDK and Google IMA SDK are not currently supported when running in the ARM64 simulator environment.
  • JWPlayerViewController has a new property: handleCastingInternally. If set to false, a ChromeCast session will not be initialized by the SDK, instead the session must be initialized by the developer. By default, this value is true.
  • The behavior of playback on external devices can be configured or disabled using JWExternalPlaybackSettings. This object can be created using JWExternalPlaybackSettingsBuilder, and set in JWPlayerConfigurationBuilder.
  • Caption rendering can be disabled by setting JWPlayer.suppressesCaptionRendering to true. Caption events are still reported even if rendering is suppressed. By default this value is false.
  • When using JWPlayerViewController, additional controls may be hidden: full screen button, languages button (audio and captions), and the settings button.
  • When using Google IMA, the ad impression event populates the following new information in JWAdImpression: adId, creativeId, and creativeAdId.


Features, Fixes, & Improvements

New features and fixes.


Release Date: September 6, 2022


  • An error event is fired when the internet connection is lost.
  • A new metadata array is exposed in the adMeta event.


  • Fixed an issues causing the app to quit unexpectedly.
  • Fixed an issue where system captions styling was being ignored.
  • Fixed an issue where the player was getting stuck after playing IMA ads in autostart mode.
  • Fixed an issue where video content was playing from the beginning when a Chromecast device recovered the connection.
  • Fixed an issue where captions were not displayed while seeking in the middle of a caption cue range.
  • Fixed an issue where audio stream continued playing after calling the stop() API.
  • Fixed an issue where the startOnSeek ad rule was being ignored for VAST ads.
  • Fixed an issue where scrubbing past a midroll ad the player wasn’t triggering the ad playback in Google IMA DAI.
  • Fixed an issue where the fullscreen button was not reflecting the current fullscreen mode state in the ads UI.
  • Fixed an issue where the playlist/recommendations UI was displaying the PiP button despite PiP being disabled.


Release Date: August 3, 2022


  • Improved ad error messaging to help identify what is causing the problem.


  • Fixes issue that occurs when using autostart with IMA ads.
  • Fixes crash that occasionally occurs when reachability changes.
  • Fixes bug that causes the UI to get stuck when switching between landscape and portrait mode.


Release Date: July 13, 2022


  • Added the JWPlayerViewController.setVisibility(_ isVisible: Bool, controls: [JWControlType]) API to allow developers to hide or replace the UI elements in the JWPlayerViewController.
  • Added the JWAdSettingsBuilder.allowsBackgroundPlayback API to allows developers to set whether background playback is allowed for JWPlayer Ads (VAST).
  • Added the JWPlayerView.allowsPictureInPicturePlayback API to enable or disable the Picture-in-Picture feature for custom UI.


  • The Live UI is now improved for DVR streams.

Fixed Issues

  • Fixed an issue where a SwiftUI.List with multiple players had low performance when scrolling.
  • Fixed an issue where a pre-roll IMA ads failed silently for playlist items with a title.
  • Fixed an issue where tapping the Live button was not seeking to the live edge.
  • Fixed an issue where the dismiss fullscreen button was misaligned.


Features, Fixes, & Improvements

New features and fixes.


Release Date: May 11, 2022

Fixed Issues

  • Fixed issue where adTime events were increasing memory consumption.
  • Fixed issue where VAST ad video quality was always chosen as the lowest quality.
  • Fixed issue where the JWPlayerItem.adSchedule API for IMA ads was being ignored.
  • Fixed a crash when configuring the player twice in a row before the player was fully initialized.
  • Fixed a crash when the player was configured in background before the player was fully initialized.


Release Date: April 20, 2022

Fixed Issues

  • Fixed a crash related to the next up card being displayed


Release Date: April 5, 2022

Fixed Issues

  • Resolved a rare crash due to an unowned variable.
  • Resolved an issue where backgrounding the app unexpectedly paused JW Player VAST ads.
  • Resolved issues around Picture in Picture, where in iPadOS and iOS the behavior of the ‘allowsPictureInPicturePlayback’ flag was behaving differently.
  • Resolved issue where JW Player VAST ads were not sending out expected pings for tracking events.


Release Date: March 23, 2022

Features and Improvements

  • When using JWPlayerViewController to display videos we no longer allow the delegates within JWPlayer and JWPlayerView to be overridden. JWPlayerViewController needs to be the delegate to work properly, and allowing this behavior caused issues in certain utilizations of our SDK.
  • Added a new property to JWPlayerViewController called ‘allowsPictureInPicturePlayback’. If set to false, Picture in Picture is disabled for the given player. This flag is ‘true’ by default.
  • Exposed new properties in the JWAdImpression object
  • duration: The duration of the ad, in seconds.
  • podCount: The number of ads in the ad pod.
  • sequence: The position of the current ad in the ad pod.
  • Expanded support of more header types in JWPlayerItem custom headers.
  • JWAdsAdvertisingConfigBuilder allows a skip offset to be specified programmatically.
  • Setting captions using JWPlayer.setCaptions(locale:) will throw an ambiguity error if multiple captions are found with the same locale.

Fixed Issues

  • Improved stability, and improved the user experience when casting to a ChromeCast device.
  • Fixed issue where side-loaded captions would remain on the screen during ad midrolls.
  • Fixed issue where video would remain black for a few seconds after an ad when the player was embedded within a UIPageViewController.
  • Fixed issue where VMAP ads wrapped in a redirect wrapper were not playing.
  • Fixed issue where the Casting Menu was not accessible in full screen.
  • Fixed issue where bitrateUpperBound was not being observed by the currently playing item.
  • Fixed issue where setting the volume to a non-zero value after being mute was not working.
  • Seeking is now disabled in Picture in Picture during DAI streams.
  • onVisualQuality event is now fired for MP4 streams.


Custom Ad controls, fullscreen APIs, improvements

We've added a new API so developers can implement custom ad clickthrough behavior and fixed some issues.


Release Date: March 7, 2022

Features and Improvements

  • Fixes issue that prevented uploading Bitcode enabled .ipa to App Store Connect


Release Date: February 9, 2022

Features and Improvements

  • Added openAdClickthrough() API to support custom Ad controls
  • Added methods for isFullScreen, transitionToFullScreen, and dismissFullScreen, see our iOS API reference documentation for details
  • IMA Postrolls are now requested in the 10 seconds leading up to the ad break

Fixed Issues

  • Fixed DFXP captions not working in some cases
  • Fixed missing adPosition in the onAdBreakStart event
  • Fixed the setMute() API method
  • Fixed the centered replay button not displaying in the COMPLETE state
  • Fixed cues for midrolls sometimes being grouped at the start of the seekbar
  • Fixed ad controls not respecting show/hide settings
  • Deprecated autoPlayMessage
  • Fixed FF and Rewind buttons being missing in Live DVR streams
  • Fixed tap behavior in the seekbar
  • Fixed skipOffset being incorrect in the adMeta event


Localization Support and more!

Now you can display labels and other UI elements in your app user's native language.


Release Date: January 4, 2021

  • Fixed an issue where VMAPs with embedded VASTAdData tags were not displaying advertisements.


Release Date: December 9, 2021

New Feature & Updates

  • Interfaces have been localized for international languages, including Arabic, Chinese, Dutch, Finnish, French, German, Greek, Hebrew, Indonesian, Italian, Japanese, Korean, Norwegian, Portuguese, Romanian, Russian, Spanish, Swedish, Thai, Turkish
  • All strings within the interface can be localized by overriding the string keys within an app’s string tables. These keys are documented in our online documentation.


  • Google IMA is updated to reflect the user’s desired language, or the language specified in the IMASdkSettings config object.


  • The onSizeChanged event was firing event when the size of the player did not change. This event has been fixed to only fire when the size changes.
  • Fixed a bug where the user could skip Google IMA mid rolls by pausing the player after seeking past the midroll.
  • Fixed bug introduced in 4.2.0 where certain caption tracks were not selectable.
  • Fixed bug where side-loaded WebVTT files were not parsing correctly if the file contained control characters.
  • Fixed bug where first frame of a video was being displayed before a pre-roll.


API Updates and More!

We made an update to JWPlayerStateDelegate which requires you to add two additional methods to JWPlayerStateDelegate to compile if you are not using JWPlayerViewController for your player. With iOS 4.2.0, we made many improvements to event reporting, Chromecast features & reporting, and captions. Of course, we are tirelessly working to improve UI and stability of SDK.


Release Date: November 1, 2021

New Features

  • Added ability to listen to AirPlay status events through JWAirPlayDelegate.
  • Added support for GCKUICastButton for iOS 14+.
  • Playback rate can be set while using Chromecast.
  • Analytics have been added for in-manifest captions.
  • Caption tracks can be specified using desired locale.
  • Added ability to launch an unscheduled ad using tag: URL, client: JWAdClient).
  • Added a reason to onBuffer events.
  • Added error reporting for HLS manifest issues.
  • Added sdkVersion to JWPlayerKit, which reports what version of the JWPlayerKit SDK is being used.

General Improvements

  • Added ability to listen to when cues are updated, using JWPlayerStateDelegate.jwplayer(_ player: JWPlayer, updatedCues cues: [JWCue]).
  • Casting interface adapts to both video and audio-only content.
  • Continued improvements to User Interface.


  • Fixed an issue where incorrect license key error message is displayed.


OMID Ad Support & Double-tap to Rewind/Fast Forward

Pioneered by the Interactive Advertising Bureau, the Open Measurement standard for video in the mobile app is a giant leap for viewability measurement. Open Measurement gives publishers transparency and control to manage the third-party verification scripts rather than running them through the ad creatives themselves, where they cannot be accessed. Our iOS 4.1.0 release brings out of the box OMID support for this industry-wide specification through our VAST ad client.

One more thing! Excited to introduce the most popular gesture control, double-tap to RW/FF, for watching a video to iOS 4.1.0. With this latest iOS SDK, users can easily navigate between frames by simply double tapping either side of the screen. This great feature is well blended into slick UI.


Release Date: October 11, 2021

  • Fixed an issue where SDK is not working properly with Xcode 12 or lower.


Release Date: October 5, 2021

  • Added support for OMID (Open Measurement Interface Definition) in JW Player VAST client.
  • Improved OMID support for Google IMA, reporting more accurate viewability data.
  • Added a new API, JWPlayer.friendlyObstructions, where friendly obstructions can be reported to both IMA and JW Player VAST ad clients.
  • Added double-tap to rewind and fast forward.
  • Added the ability to specify a playlist URL in JWPlayerConfigurationBuilder.
  • Deprecated JWPlayerItemBuilder.setAutostart.


Introducing Version 4

We are excited to announce JW Player SDK 4.0 for iOS. This release updates the SDK, its new features & UI, and many other improvements to engage your audiences intelligently and monetize your content.

Version 4 is a complete rewrite of the JW Player SDK for iOS in Swift, “the powerful programming language that is also easy to learn,” to make it easier for developers to add the best in class media playback to any iOS app. Please refer to this important 4.x migration guide for iOS to update your current application from version 3.x to 4.x. This guide includes important information about API changes, new features & callbacks, and will help your team with the transition process.

You may use CocoaPods to update to SDK 4.x, or you can download the SDK 4 packages from the Players -> Downloads & Keys section of your JW Player Dashboard. Please note that version 4 of the SDKs are available to our Enterprise edition customers, and do not require new license keys because 3.x license keys will work.


Release Date: September 21, 2021

  • Continuing improvements to user interface.
  • Fixed a bug where JWPlayerViewController crashes in Simulator for iPhone 8 or below.


Release Date: July 28, 2021

General Changes

  • Entirely rewritten in Swift while maintaining backward compatibility for customer applications using Objective-C.
  • Completely native player and User Interface by using UIKit, which gives easier video control presentations and customizations.
  • Decoupled user interface, which gives greater flexibility for creating own user interface with JWPlayerView.
  • License keys must be supplied programmatically through JWPlayerKit. For extra security, they are no longer read from the Info.plist in the application.
  • Thumbnail preview is shown as the user seeks across the content if the thumbnail track is specified for a JWPlayerItem.
  • New and improved customizable user interface through using the JWPlayerViewController.
  • Chromecast is supported through using our interface in JWPlayerViewController if you include GoogleCast SDK in your project.
  • Related content is displayed in a new and improved user interface, complete with autoplay functionality.
  • Added a common error reporting JWError for warnings and errors.
  • Added specialized metadata event delegates, which can be subscribed to events through the JWPlayer protocol.
  • Added fast forward button to compliment the rewind button


  • Upgraded IMA support to 3.14.3 include iOS 14 and above.
  • JW iOS SDK 4.0 supports Google IMA, Google IMA DAI, and JW Player VAST.
  • Added Picture-in-Picture support for IMA DAI ads.
  • Added ability to set custom initialization options through the assetOptions property.

API Updates

  • Added dedicated builders for each type of ad, and renamed JWAdConfig to JWAdertisingConfig.
    • Google IMA JWImaAdvertisingConfigBuilder
    • Google IMA DAI JWImaDaiAdvertisingConfigBuilder
    • JW Player VAST JWAdsAdvertisingConfigBuilder
  • Renamed JWConfig to JWPlayerConfiguration, which is created using a separate object JWPlayerConfigurationBuilder.
  • Renamed JWPlaylistItem to JWPlayerItem.
  • Renamed JWSource to JWVideoSource.
  • Renamed JWRelatedConfig to JWRelatedContentConfiguration.
  • Deprecated JWTrack, and added associated builders JWMediaTrack, JWChapterTrack, JWCaptionTrack, and JWThumbnailTrack.

Event API

  • Added multiple delegates for different events
    • JWPlayer
    • JWPlayerDelegate
    • JWPlayerStateDelegate
    • JWPlayerViewControllerDelegate
    • JWViewControllerDelegate
    • JWAdDelegate
    • JWAVDelegate
    • JWPlaybackMetadataDelegate

User Interface

  • Added Lock screen control, which is more reactive to the state of the player:
    • The next item and previous item buttons are shown if the current item is part of a playlist.
    • The rewind and fast forward buttons are enabled if there is only one item.
    • “Advertisement” is displayed as the video title when an ad is playing.
    • The application’s name is displayed in the controls if a currently playing item does not have a title.
    • “Previous Item” button is disabled for the first item in a playlist, and the “Next Item” button is disabled for the final item in a playlist.
  • Added chapter markers, which are displayed as cue points and chapters have been defined for the player item.


  • Added ability to customize the look of captions using JWCaptionStyle. These settings are observed only if they are not specified in the user’s accessibility settings.
  • Added side-loaded VTT captions positional attributes, which is specified within the VTT file. Vertically-displayed text is not supported.
  • Added In-manifest Caption support for Chromecast.

Deprecated features

  • VPAID and FreeWheel support
  • CSS support


Airplay 2 support

Our latest iOS 3.9.0 release now has AirPlay 2 support as well as several other AirPlay improvements. Users of your app can now stream to Apple TVs, HomePods, and AirPlay 2-compatible smart TVs.

Learn how to add an AirPlay button to your app here.


Release Date: December 16, 2019 (Build 109)


  • Made improvements to AirPlay implementation in SDK and best practice apps to ensure they follow AirPlay 2 best practices
  • Upgraded iOS SDK to use JW Player 8.11.8
  • Added onAdBreakStart and onAdBreakEnd event callbacks to JWPlayerDelegate.h


  • 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 Issue

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


Google Cast Sender Library Upgrade

Implement an improved casting experience in iOS 13 with the latest Google Cast upgrade.


Release Date: November 25, 2019 (Build 108)


  • Maintenance release.


Release Date: November 5, 2019 (Build 107)


  • 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


  • Fixed an issue where Freewheel VMAP ads served through the JW Player 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


New Friendly Ad Obstruction API

We have created a new Friendly Ad Obstruction API class that can be used to ensure ad viewability is properly calculated by the Open Measurement SDK when using Google IMA.


Release Date: October 4, 2019 (Build 103)


  • 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


  • 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


Webplayer Upgrades

The version of webplayer, which v3 iOS SDK is on, has been upgraded to 8.21.2. This upgrade should resolve multiple issues the customers had experienced with older webplayers.


Release Date: January 6, 2022

  • 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.


Release Date: September 9, 2021 (Build 151)

  • Upgraded webplayer version to 8.21.2.
  • Exposed new JWAd.podCount parameter in JWAdTimeEvent.
  • Fixed a bug where VPAID ads cannot be muted.
  • Fixed a bug where "Next Up" button does not display if IMA ad has played.
  • Fixed a bug where FreeWheel ad pod sequence is always 0.


Chromecast GCKUICastButton Updates

To provide a better Chromecast user experience, we added support for GCKUICastButton, which is particularly useful in 14+, as it handles the permission requests for connecting to local devices. Any customer who uses Chromecast Sender SDK 3.0 or above should be able to use it.


Release Date: August 13, 2021 (Build 148)

  • 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.


Release Date: June 22, 2021 (Build 147)


Release Date: May 17, 2021 (Build 143)

  • 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.


iOS 14 Compatibility Updates

Our SDK is now compatible with iOS 14. IMA SDK has updated to 3.13.0 and other guidelines from Apple were followed to support iOS 14.


Release Date: April 28, 2021 (Build 142)

  • Added in-manifest WebVTT caption support.


Release Date: January 21, 2021 (Build 139)

  • Fixed an issue where changing the fullscreen mode while playing IMA ads causes app to crash.


Release Date: December 18, 2020 (Build 138)

  • 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.


Service Release

We've made service improvements to ads playback especially with regards to VMAP and IMA implementations.


Release Date: November 11, 2020 (Build 136)

  • Fixed an issue causing the App to crash occasionally when onAdError and onAdWarning occur.


Release Date: October 9, 2020 (Build 135)

  • 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.


Release Date: September 24, 2020 (Build 132)


  • Upgraded the iOS SDK to use JW Player 8.17.3.


  • 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.


FreeWheel SDK Updates

For FreeWheel customers, stay up to date with the latest FreeWheel SDK.


Release Date: September 10, 2020 (Build 131)

  • 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.


Start on any item in a playlist

We've resolved the common pain point of wanting to load a fixed playlist and start playback from any item within it, not just the first one. Our new configuration option facilitates that out of the box. You can use this to resume a series from a viewer's next unwatched episode, or to feature certain videos instead of others. Happy playlisting!


Release Date: August 24, 2020 (Build 127)

  • Fixed a bug causing the player to error when it encountered a date range meta tag in live HLS streams.


Release Date: August 7, 2020 (Build 126)

  • Fixed an issue causing the controls to shift shifted unexpectedly when rotating to landscape orientation on some iPad models.


Release Date: July 20, 2020 (Build 124)

  • 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 JW Player 8.15.2.
  • Fixed an issue causing side-loaded VTT Captions to only show if deselected then selected in HLS streams.


Asynchronous API

We've extended the API to allow for asynchronous blocking between playlist items. Loading, ads, and playback of the next playlist item can be blocked until async operation resolves. We also added other new API callbacks and events, see the notes below.


Release Date: June 18, 2020 (Build 122)


  • 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.


Release Date: June 10, 2020 (Build 121)


  • 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.


  • Fixed a bug causing the onPlay callback to fire when resuming playback after a programmatic seek event.


Service release

Service release.


Release Date: May 21, 2020 (Build 120)


  • 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.


Release Date: May 15, 2020 (Build 119)


  • Fixed an issue where JWPlayerDelegate’s onAd callbacks were returning empty adEvents.
  • Fixed a build error when importing the SDK.


Release Date: May 6, 2020 (Build 118)


  • Upgraded iOS SDK to use JW Player 8.13.7.


  • 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.


Specify playback start time and more

iOS 3.13.0 is packed with updates including, startTime support, the new program-date-time metadata type, and so much more!


Release Date: April 27, 2020 (Build 117)


  • 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 JW Player 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.


  • 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.


Google IMA Library Upgade

Stay up to date with the latest Google IMA library in our iOS 3.12.0 release.


Release Date: April 22, 2020 (Build 116)


  • 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


Release Date: March 26, 2020 (Build 115)


  • 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


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


Google DAI Support

Monetize your live or VOD content with Google IMA Dynamic Ad Insertion (DAI) in our iOS 3.11.0 release! Visit our developer documentation for more details on how to get started.


Release Date: March 16, 2020 (Build 114)


  • Expanded support to display thumbnail images for audio-only MP4 files.
  • Added support to surface metadataCueParsed events for EXT-X-DATERANGE tags.


  • 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.


Release Date: February 28, 2020 (Build 113)


  • 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.


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


FreeWheel improvements and more!

iOS 3.10 is packed with some great updates! We have exposed HLS #EXT-X-DATERANGE tags that can be used to indicate when there are temporal breaks in a live stream—great for ad stitching. Speaking of advertising, we upgraded and made improvements to our FreeWheel ad client. And those who are looking for more customization, you can now add and remove buttons with custom callbacks in your iOS app.


Release Date: February 20, 2020 (Build 112)


  • 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


Release Date: February 6, 2020 (Build 111)


  • Exposed additional date-range metadata items that might be included in an HLS #EXT-X-DATERANGE tag


  • 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


Release Date: January 30, 2020 (Build 110)


  • 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+


  • 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
  • Fixed an issue where some VPAID ad tags return an "invalid XML" error


Version 2.9


Release Date: November 8, 2018


  • Fixed an issue where the app could crash if FreeWheel returned an empty ad tag (undocumented by FreeWheel)


Release Date: June 18, 2018 (Build 50)


  • We have integrated support for the FreeWheel ad-serving platform. Configure your FreeWheel Ad Manager settings in our new FreeWheel ad client to serve pre-rolls and mid-rolls with other features such as ad-skip and ad-click. Please refer to the new FreeWheel advertising section in our developer guide documentation to get started.


Version 1.x

Release Notes prior to JW SDK version 2.0 (1.x) are available in the readme.txt file included in the 1.x download packages.


Seamlessly autogenerate Swift headers from Objective-C

For the Swift developers out there! We have updated our Objective-C headers for improved Swift header autogeneration. See it yourself in the latest iOS SDK 3.6.0 release.


Release Date: September 12, 2019 (Build 102)


  • 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()


  • 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


Release Date: September 5, 2019 (Build 101)


  • Removed debug assertions from production build in ReachabilityCallback function to avoid uncaught exception


Release Date: August 7, 2019 (Build 100)


  • 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


Release Date: July 15, 2019 (Build 99)


  • 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 JW Player 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.


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


Two updates

Updated IMA and added a new class.


Release Date: May 2, 2019 (Build 91)


  • 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.


April release

A variety of updates.


Release Date: April 8, 2019 (Build 88)


  • 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 JW Player expired license user experience by adding an error message notification and halting player setup or playback

Known Issue

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


Version 3.2


Release Date: March 7, 2019 (Build 87)


  • 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


Release Date: Feb 25, 2019 (Build 86)


  • Enabled support for iOS 9 and 10 when using CocoaPods


Release Date: Feb 25, 2019 (Build 84)


  • Added support for the Developer license
  • Added a condition to use the previous DRM API to support iOS 9 and iOS 10


Release Date: Feb 5, 2019 (Build 83)


  • Fixed an issue where omitting ad rules would disable ad schedules after the first playlist item


Release Date: Jan 23, 2019 (Build 81)


  • 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


  • 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.


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


Version 3.1


Release Date: Dec 07, 2018 (Build 74)


  • Fixed an issue where the player fails to initialize with error code 100012 when target name has spaces or special characters.


Release Date: Oct 17, 2018 (Build 73)


  • 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.


Release Date: Sep 19, 2018 (Build 72)


  • 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.


Release Date: Sep 13, 2018 (Build 71)


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


Release Date: Aug 23, 2018 (Build 70)


  • 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.


Version 3.0

We are excited to announce JW Player SDK 3.0 for iOS. This release updates the SDK to JW8 and leverages its new UI & UX, optimization, and advertising enhancements to engage your audiences intelligently and monetize your content. In the coming months we will deploy more JW8 features into the JW Player SDKs for iOS & Android, so stay tuned!

Please refer to this important 3.x migration guide for iOS to update your current application from version 2.x to 3.x. This guide includes important information about API changes, new features & callbacks, and will help your team with the transition process.

You may use CocoaPods to update to SDK 3.x, or you can download the SDK 3 packages and new 3.x license keys from the Publish -> Tools section of your JW Player Dashboard. Please note that version 3 of the SDKs are available to our Enterprise edition customers, and require new license keys because 2.x license keys will not work.


Release Date: Jul 25, 2018 (Build 69)


  • 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


Release Date: Jul 2, 2018 (Build 63)


  • 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.


Release Notes


Release Date: May 21, 2018 (Build 49)


  • Fixed an issue where the onControlBarVisible event would trigger for Ad related controls


Release Date: May 4, 2018 (Build 48)


  • Fixed an issue where the app would crash if there was a problem with local player related files creation


  • Upgraded to support Google IMA SDK v3.3.1


Release Date: Apr 16, 2018 (Build 47)


  • Fixed a VAST issue where content would replay after completion of post-roll
  • Fixed an issue where skipping a VMAP ad did not proceed to the content


Release Date: Mar 28, 2018 (Build 46)


  • Fixed an issue where media playback would stop when the app was sent to the background
  • Fixed an issue where NowPlayingInfo (NPI) Center would not display the media's title & meta data, and NPI controls did not work


Release Date: Mar 20, 2018 (Build 45)


  • Fixed an HLS in-manifest webVTT captions issue where the list of available tracks was not showing when CC button was selected


Release Date: Feb 27, 2018 (Build 44)


  • IMPORTANT UPDATE Apple recently tightened their iOS app store submission restrictions. They started to flag the use of non-public APIs and rejecting apps using them - even if these apps were accepted previously without issue. Our team performed a full code audit and this release removes all use of non-public APIs. As a result, we temporarily removed picture-in-picture (PiP) for iPad and background audio support. We will work towards adding these features back in a subsequent release. We strongly recommend all users to update to this version to avoid this issue. If you're upgrading from SDK 2.7.x please refer to the Migration Guide


Release Date: Feb 09, 2018 (Build 43)


  • Fixed minor bugs


Release Date: Feb 07, 2018 (Build 42)


  • Fixed an issue where a 'Library not loaded' error message would appear during an Ad Hoc build
  • Fixed an issue where after a VMAP ad error, the player wouldn't gracefully recover and resume media playback


Release Date: Jan 23, 2018 (Build 41)


  • Fixed an issue where after a VAST ad error, the player wouldn't gracefully recover and resume media playback


Release Date: Jan 09, 2018 (Build 39)


  • Fixed an issue where SDKVersion returned an incorrect value


Release Date: Dec 20, 2017 (Build 38)


  • Fixed an issue where Chromecast and IMA libraries were required to build the app. Reminder: A migration is required from 2.7.x versions, please refer to the Migration Guide.


Release Date: Dec 11, 2017 (Build 36)


  • JW Player SDK for iOS is now a Dynamic Library and is no longer static. A migration is required from 2.7.x versions, please refer to the Migration Guide. Please note this version contains a known issue: Chromecast and IMA libraries are required to build the app. We recommend version 2.8.1.


Version 2.7


Release Date: Nov 17, 2017 (Build 35)


  • Renamed symbol _PLAYABLE_KEY to avoid conflicts with other exposed var / consts / symbols that may have the same name


  • Fixed an issue where the onControlBarVisible delegate was not called when the player status is "paused"
  • Fixed an issue where playbackPosition() always reported 0 when called immediately after onSeeked()
  • Fixed an issue where two playlist items having an identical video file would cause the player to buffer indefinitely on the second item


Release Date: Nov 15, 2017 (Build 34)


  • All CDN assets, including JS files, are now packaged with the SDK and loaded locally if the CDN is not available


  • Fixed an issue where the player did not resize correctly in fullscreen/ landscape view for the iPhone X simulator
  • Fixed an issue in CocoaPods where the player controls would appear after an IMA preroll even if config.controls was set to false


Release Date: Oct 03, 2017 (Build 32)


  • Fixed all remaining XCode 9 threading warnings
  • Fixed an issue playing ad tags pointing to media addresses that do not have a URI scheme


Release Date: Sep 19, 2017 (Build 31)


  • Prevents UIKit instance methods from being called on a background thread when the player is deallocated


Release Date: Sep 15, 2017 (Build 30)


  • onAdImpression: now includes click-through URL parameter


  • Upgraded SDK to use JW Player 7.12.6


Release Date: Aug 4, 2017 (Build 29)


  • Enabled seeking in DVR streams using the JWPlayerController seek: method


Release Date: July 21, 2017 (Build 28)


  • Added a new onFullscreenRequested() delegate callback to trigger when fullscreen is requested, but before the animation takes place


  • Upgraded SDK to use JW Player 7.12.1


  • Fixed an issue where the CC options would not display when replaying a video
  • Fixed an issue where the first frame of media flashes right before an IMA pre-roll ad played
  • Fixed an issue where the player would freeze after you seeked past two IMA ads in a video


Release Date: Jun 16, 2017 (Build 27)


  • Upgraded SDK to use JW Player 7.11.3


  • Fixed an issue where OnControlbarVisibilityChanged fired when the player was in buffering state and inaccurately reported as true


Release Date: Apr 7, 2017 (Build 26)


  • New onAdschedule: callback for the VAST ad client that provides detailed information of a VMAP ad schedule.


  • Upgraded SDK to use JW Player 7.10.4
  • onAdImpression: now includes VMAP ad schedule details


  • Fixed an issue where VMAP breakstart/breakend callbacks would not fire when no ad source was present.


Release Date: Mar 24, 2017 (Build 25)


  • Fixes bug where a file is downloaded on the main thread


Release Date: March 10, 2017 (Build 24)


  • Fixes bug where the onAdSkipped and onAdMeta delegate methods would not fire


Release Date: Feb 23, 2017 (Build 23)

New Features

  • Added the ability to programmatically setup the JW Player license key in JWPlayerController. Useful for developers who integrate our framework into their own and want to obfuscate the license key from users.
  • Added bitRateUpperBound property to set the maximum bitrate level during automatic quality switching. Useful in limiting bandwidth consumption for viewers.


  • Adaptive bitrate switching for HLS streams will now be managed directly by AV Player and will behave like "auto". The HD button in this case will not display and manual quality switching is no longer supported. As a result, this resolves issues regarding multiple audio and caption tracks not behaving correctly for HLS streams and improves overall bitrate switching behavior.


Version 2.6


Release Date: Feb 21, 2017 (Build 19)


  • Fixes bug where controlBarIsVisible did not fire during vast ads
  • Fixes bug where calling load: during a VAST ad does not load the requested file at time 0
  • Fixes bug where preload would occasionally load the same file twice
  • Fixes bug where occasionally buffer icon would stay on screen during playback


  • Supports Google IMA SDK version 3.3.1


Release Date: Feb 17, 2017 (Build 18)


  • Fixes bug where side loaded webVtt and SRT captions do not display


Release Date: Feb 7, 2017 (Build 17)

New Features

  • Added support for "preload" where media is preloaded after the player is setup but before the play button is pressed. This allows JW Player to fetch media information prior to playback and enhances perceived performance by users.
  • The "mediafile" string is now returned in the onAdImpression() delegate, which represents the currently playing media item. Also returns a boolean indicating if ad is linear


Release Date: Jan 31, 2017 (Build 16)


  • Added support for variable rate playback. Dynamically adjust the playback speed of the media to be slower or faster, for both forward and reverse playback.
  • Enabled pausing and resuming IMA Ad playback with the Player's playback API
  • Added support from the Google IMA SDK to specify the language to be used to localize ads


  • Supports Google ChromeCast version


  • Fixed bug where playlist containing vast pre-rolls would occasionally load next playlist item at the wrong start time
  • Fixed an out of bounds crash that would intermittently occur when loading a CSS Skin


Release Date: Jan 24, 2017 (Build 15)


  • Fixed bug where replaying a stream with a vast pre-roll would jump to the end after the ad completed
  • Fixed IMA crash caused when switching between view controllers


Release Date: Jan 12, 2017 (Build 14)


  • Fixed firing of VMAP breakstart tracking event


Release Date: Jan 12, 2017 (Build 12)


  • Fixed bug where HD button would not display
  • Fixed a crash when a poster image was set that returned a 404 status
  • Fixed a bug where the onAdImpression delegate method would not get called when playing vast ads that did not contain wrappers
  • Fixed a bug where the onAdImpression delegate method would incorrectly indicate "preroll" for some VAST ads played using the Google IMA ad client
  • Fixed a bug preventing ATS compliance


Release Date: Dec. 22, 2016 (Build 11)


  • Added onControlBarVisible callback that indicates when the player control bar's visibility changes. Sync your custom UI elements to display & hide with the player control bar.


Release Date: Dec. 12, 2016 (Build 9)


  • Added onAdCompanion() callback for VAST client that returns companion ad data


  • Upgraded SDKs to use JW Player 7.8
  • General improvements to SDK player UI
  • More detailed error messaging to assist debugging
  • onMeta() now includes bitrate, frame rate, & dropped frames information
  • Enhanced general fullscreen and rotation UI and behavior
  • Improved accuracy of state changes when JWPlayerStateChangedNotification is fired


  • Fixed visual transitions to and from full screen, and on rotations for iPad devices
  • Fixed an issue that would cause the player to exit fullscreen on a 180 degree rotation
  • Fixed an issue where calling Load() during an IMA Ad does not dismiss the ad
  • Fixed an issue where VPAID ads would start in Fullscreen


Version 2.5


Release Date: Nov. 30, 2016 (Build 99)


  • Fixed a bug where a crash would occur during the deallocation of a JWPlayerController that had been playing ads with the Google IMA client
  • Fixed a bug where occasionally a crash would occur during changes in Network Connectivity


Release Date: Nov. 22, 2016 (Build 97)


  • Fixed a bug where some JS and CSS files were downloading on the main thread
  • Fixed a bug where setting a file and a playlist in the JWConfig would result in the playlist being ignored


Release Date: Nov. 8, 2016 (Build 96)


  • Fixed a bug where Ads rendered using the Google IMA client would not render on multi-source streams.


Release Date: Oct. 31, 2016 (Build 95)


  • Fixed a bug where the video would automatically replay after a Google IMA post roll
  • FIxed a bug where seeking while offline would display the offline poster even though the video would continue playing in the background
  • Fixed a bug preventing offline playback of local files
  • Fixed a bug where setting the JWPlayerController pictureInPictureDisabled property to YES would not prevent entering Picture in Picture when exiting the app while in fullscreen
  • Fixed a bug preventing playback of AES encrypted streams after switching stream qualities
  • Fixed a bug preventing quality switching when reproducing DVR streams
  • Fixed a bug preventing AutoStart after calling the JWPlayerController's load: method
  • Fixed a bug where IMA VMAP post rolls would not replay after replaying the stream
  • Fixed a bug where occasionally MP4 and MP3 streams would restart after seeking many consecutive times


  • Compatible with Google IMA SDK version 3.2.1


Release Date: Oct. 3, 2016 (Build 90)


  • Fixed a bug in iOS 10 where rotating to landscape on a view controller supporting all interface orientations (UIInterfaceOrientationMaskAll) with the player's forceFullScreenOnLandscape property set to True would display an incorrect fullscreen orientation


Release Date: Sep. 22, 2016 (Build 87)


  • Fixed an issue where uploading to the App Store without the Google IMA or Google Cast SDKs would result in a rejection


Release Date: Sep. 22, 2016 (Build 86)


  • Fixed an issue where certain enums were not compatible with Swift


Release Date: Sep. 21, 2016 (Build 84)


  • Fixed an issue where certain HLS streams wouldn't be recognized correctly by the SDK
  • Fixed an issue in playlists where the HD button would appear even if some items in the playlist did not support multiple qualities
  • Fixed an issue where the HD button wouldn't appear after 'load:' was called
  • Fixed an issue where ads with a '#' in the URL would produce an error


  • Enums are now compatible with Swift


Release Date: Sep. 14, 2016 (Build 83)

New Features

  • Added support for Related Feeds player setup options
  • Added support for custom HTTP headers for video streams (including signed cookies or tokens) via AVURLAsset Options dictionary
  • New and updated delegate callbacks (eg. onAdStarted) for parity with HTML5 player
  • Added a media ID property to JWPlaylistItem to allow developers to specify the JW Media ID for an externally hosted media file in the JW Platform in order to track analytics for that video


  • Compatible with iOS 10
  • Improved onTime to ping every 100 ms
  • Poster image for lock screen is now fetched on the background thread
  • The player now detects the "Video Override" option from the users's "General -> Accessibiity -> Subtitles & Captioning -> Style" settings to determine whether to have the video settings override the user's accessibility settings


  • Fixed an issue where setting an adBreak tag with setter instead of using AdBreak's initWithTag custom initializer caused a crash
  • Fixed an issue where toggling displayLockScreenControls did not update correctly
  • Fixed an issue for multiple IMA midrolls where if one midroll should fail and return an ad error, the next scheduled midroll would erroneously play out of turn instead of resuming media playback
  • Fixed an issue where playlists with IMA or VAST ads would erroneously display "Live Stream" in the status bar after ending
  • Fixed an issue where captions from the media were displayed during ad playback


Version 2.4


Release Date: Sep. 6, 2016 (Build 79)


  • Optimized asset loading to be asynchronous on the background thread


  • Fixed an issue where if several instances of the player were created concurrently, only the last player instantiated would play


Release Date: Aug. 26, 2016 (Build 77)


  • Fixed an issue where unsupported/incompatible ad creative file types were not being ignored (e.g. Flash ads)


Release Date: Aug. 15, 2016 (Build 74)


  • Fixed an issue where a crash would occur upon player deallocation on iOS 8


Release Date: Aug. 10, 2016 (Build 73)


  • Player specific volume control

Known Issues

  • Volume control does not apply to Google IMA ads or casting at this time


Release Date: Jul. 08, 2016 (Build 58)


  • Fixed an issue where OnAdPlay() was not fired for IMA ads when ad resumed
  • Fixed an issue where VAST ads would loop if called during playback of a DRM encrypted file
  • Fixed an issue where the player incorrectly shows a "play" state when returning from background
  • Fixed an issue where IMA ads didn't play in playlists if the IMA tag contained percent-encoding within the optional "cust_params" query string parameter.
  • Fixed an issue where adClick would open Safari even if openSafariOnAdClick was set to "NO"
  • Fixed an issue where the ad would continue playing in the background after an ad click opens Safari
  • Fixed an issue where a paused video would resume playing when app sent to background


Release Date: Jun. 29, 2016 (Build 56)

New Features

  • Playback of HLS streams protected with Apple FairPlay Streaming (FPS) is now supported
  • Free, Premium, and Platinum license editions are now supported
  • Ad impression limits are now checked when ad playback is requested in order to prevent ad impression overage charges


Version 2.3


Release Date: Jun. 27, 2016 (Build 55)


  • Fixed an issue where Google IMA prerolls would not play in simulator
  • Fixed an issue where Google IMA prerolls would not play in certain devices
  • Fixed an issue where Google IMA VMAP midrolls would not play


Release Date: Jun. 08, 2016 (Build 53)


  • Fixed an issue where the onError callback was not getting called
  • Fixed an issue preventing bit coding for cocoapods


Release Date: Jun. 06, 2016 (Build 52)


  • VPAID 2.0 Support
  • Audio playback control for app in background


  • Fixed an issue where IMA ad callback events were fired twice
  • Fixed an issue where specifying a title would cause a crash when attempting to cast to certain devices
  • Fixed an issue where reload screen would disapper after locking and unlocking device
  • Fixed a general casting issue where casting to certain devices would fail
  • Fixed an issue where the letter "x" would appear in front of the default quality level label if attribute name was undefined
  • Fixed an issue where the playerController returned the playback position from the previous item during the first second of playback when a new file was loaded
  • Fixed an issue where some audio MP3 ID3 metadata would cause a crash
  • Fixed an issue where loadConfig was not working


Version 2.2


Release Date: Apr. 27, 2016 (Build 50)


  • Fixed issue where when submitting to Apple App Store, iTunes would complain about using private APIs
  • Fixed issue where sometimes buffering animation would not appear at video start
  • Fixed issue where background sound would be disabled
  • Enabled bit coding


Release Date: Apr. 08, 2016 (Build 49)


  • Apple AirPlay Support
  • Google Chromecast Support
  • Local Media File Playback (Offline)
  • CEA-608 Captions in HLS
  • HLS In-Manifest WebVTT subtitles


  • Fixed an issue where VOD videos would briefly display “Live Broadcast” if the duration of the video couldn't be calculated


HLS Improvements

A variety of HLS related features.


Release Date: February 2, 2016 (Build 36)


  • HLS Live DVR
  • ID3 Timed Metadata
  • Picture in Picture (iOS 9 iPad only)
  • HLS Multiple Track Audio


  • Fixed issue where video did not restart from beginning after 'repeat' button was tapped

Known Issues

  • iPads will display in-band text tracks (captions) within the m3u8 manifest if they exist and cannot be turned off


Version 2.0

2.0 marks a significant step toward our goal of “One JW Player”. The developer-facing APIs in the SDK are native iOS classes (Objective-C/Swift), but they are wrappers around the newest version of our flagship JW Player 7 JavaScript/HTML5 library (jwplayer.js), powering new player customization options like CSS skinning and a DPI-responsive player UI optimized for mobile. Check out our blog post to learn more about our "One JW Player" vision.


Release Date: Dec. 01, 2015 (Build 33)


  • Fixed an issue where the rotation observer wasn't properly updated if multiple players were created, resulting in a crash


Release Date: Nov. 17, 2015 (Build 32)

New Features

  • Updated to JW Player 7
    • CSS Skinning Model
    • DPI-responsive player UI with mobile optimization
    • Devices with a smaller viewing area will now see a more mobile-friendly control bar UI. Font size has been increased and secondary control bar elements have been relocated to an overflow menu
  • New API Calls
    • getBuffer
    • getVisualQuality
    • get/set Controls
    • stop
    • getSafeRegion
  • Dynamically load media sources within existing player for playlists or videos
  • Captions styling from iOS Accessibility options
  • Offline Error Handling & Custom Messaging
  • Advertising
    • Non-Linear Ads (Overlays)
    • Ad Tag variable support
  • JW SDK for iOS available via CocoaPods
  • Supports 608 captions and in-line captions
  • Supports accessibility styling for both 608 captions and in-line captions
  • Supports custom styling for in-line captions

Bug Fixes

  • Fixed bug that prevented full screen on rotation when player view is added to a view that is not the root view of the presented view controller
  • Fixed bug where MP3 & MP4 media loaded slower than expected
  • Fixed bug where the player would crash the app when opened for the first time while offline

Known Issues

  • Playlist icon does not display on the control bar on some phones
  • Ad Message will occasionally span 2 lines on some phones
  • For Google IMA prerolls, sometimes the media will appear briefly before the preroll begins
  • Calling playAd after a VMAP has been loaded using Google IMA will cause the completed ads to replay when the requested ad finishes reproducing
  • When reproducing a stream containing multiple qualities, if the viewer switches from a quality that contains embedded captions (608 captions or in-line captions) to a quality that does not contain embedded captions, the Closed Caption button might not be removed from the control bar. Toggling the Closed Caption button will have no effect
  • Occasionally toggling play/pause on lock screen will cause playback information to briefly disappear and then reappear


New WebView Handling

We have migrated to WKWebView, the latest iOS webkit, which fulfills Apple’s webview requirements. In the process of this migration, we implemented structural changes that have improved overall playback performance as well.


Release Date: May 30, 2019 (Build 93)


  • 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.


Release Date: May 14, 2019 (Build 92)



  • 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.