5.4 Release Notes
5.4.0 is the first generally available release since the 5.3.0 release of You.i Engine One.
We have changed the Android target API version to API level 28 (Android 9) to meet Google Play's requirements, effective in August 2019. For more information, click here.
- Fixed an issue which caused
onDurationChangedto be mandatory, resulting in an error screen if they were undefined.
- Fixed an issue which caused Text to disappear from TextInputRef on Nvidia Shield devices.
- Fixed an issue which caused the Networking module to return 0, even though the request was successfully taken from the cache.
- Fixed an issue which caused the Input module to crash when pressing the function button on OSX.
- Fixed an issue where all iOS devices returned 72 DPI for their DPI values.
- Fixed an issue which caused an assertion when the
requestSPCMessagesignal is emitted and there is an error in the YiAVPlayer.
- Fixed an issue where a single Text component with more than 20,000 characters would cause an app to crash.
- Fixed an issue which caused the developer panel to close whenever a widget is turned on.
- Fixed an issue which caused padding and margin values to reset in the After Effects property panel.
- Fixed an issue which caused Android module resources to be searched for in the wrong directory.
- Fixed an issue where Text on Cloud Solution was continuing beyond the
You.i Engine React Native API Breaking Changes
- You.i Engine React Native apps that use the Input module will need to update their use of the
YI_KEY_names. Because it will not show up as a compilation error, you need to do a search for
YI_KEY_in your .js files to investigate what needs to be updated.
You.i Engine C++ API Breaking Changes
Replaced our enum uses with enum class (strong enums):
- Most enum types within the You.i Engine C++ have been changed from enum to enum class, and have had their names changed. For example, an enum value previously referenced as
CYILinearLayout::ORIENTATION_VERTICALis now referenced as
CYILinearLayout::Orientation::Vertical. In some cases, globally-scoped enums have been moved into an associated class. For example, the enum
YiTextEngine.hhas been moved into the
CYITextEngineclass, and would be referenced as
- You.i Engine C++ apps will need to update their use of the You.i Engine enums to reflect the new scopes and classes. This can simply be done by recompiling your application and fixing compilation errors as they appear.
Support conversions between
- Previously these classes used to hold pairs of points, or a point and dimension. However, some functions required values in a specific type, but converting between those types was cumbersome and error-prone.
- The conversion support changes the constructor of the
YI_FLOAT_RECT_RELclasses in a way that may cause compilation issues.
- If you make use of these classes’ constructors, you may need to update your constructors to match the new arguments.
- See documentation on these classes here:
- Previously, AddHeader did not return a value and had a single argument:
void CYIHTTPRequest::AddHeader(const CYIString &header )
- Now, AddHeader returns a boolean and has two arguments:
bool CYIHTTPRequest::AddHeader(const CYIString &name , const CYIString &value).
- It will now return false when an empty header name is passed in.
- The header will not be created if an empty header is passed in.
- Existing headers will behave as they did before this change.
- Previously, GetHeaders was getting a vector of header strings, but now it gets a vector of header structs. The new vector is a copy. The struct consists of the header’s name and value.
- Previously, GetHeaders was:
const std::vector<CYIString> &CYIHTTPRequest::GetHeaders() const. Now, GetHeaders is:
const std::vector<CYIHTTPRequest::Header> CYIHTTPRequest::GetHeaders() const.
You.i Engine Cloud Solution API Breaking Changes
- Prior to 5.3, some APIs used
CYICloudInterface::Bundle. These must be changed to use
- If an app is using any scrollTo APIs in React Native or scrollToPosition API in C++ for other non-cloud platforms, they may take effect on Cloud Solution now that scrollTo API support has been expanded. If your app employed custom solutions such as export hints or the
scrollListToIndex, to achieve this functionality on Roku, this may no longer be necessary.
- As of 5.4, the
exportAsScrollingViewmethod in the Cloud module has been removed. It should be replaced with
exportAsComponentScrollingView. For more information, see exportAsComponentScrollingView and Roku List Development.
You.i Engine C++
Updating text atlases is now faster, which improves list scrolling performance.
- Support for Widevine Modular DRM on Tizen.
Support for Widevine with a custom license acquisition handling on Android and Tizen:
- Exposes APIs to give developers the ability to add data to the body of a POST request when communicating with the license server.
- Expanding support for other platforms is planned for future releases.
For more information, see Widevine Custom Request DRM Handler.
You.i Engine React Native
React Native’s own WebView component will be deprecated, and they are planning to remove it. For more information, click here. If you are using React Native’s WebView component, you should replace it with You.i React Native’s WebView. To do this, import WebView from
react-native-youi instead of
For more information, see the WebView documentation.
Support for React Native on Samsung’s Tizen platform is officially available.
- The 5.4 release supports the native Tizen AVPlay media player. As with most players, there are some limitations and use cases that are not supported, such as closed captions which are controlled via the TV interface and not in the player. Please review encoding and DRM support against your specific media requirements.
Though the default Tizen player is preferred, we have seen other third-party players successfully implemented.
- Previously, the interpreter was running on the main thread for our application, which is also the rendering thread. This could cause scenarios where the interpreter and renderer were competing for resources.
- The multi-threaded approach increases the overall performance of the engine across all platforms, without having to change anything in your code.
Optimized loading of local assets:
- Previously, the local image assets were loaded using the network service using
- Now, local assets use the asset loader and its decode thread pool.
- Benchmark timing improved by over 50% in our JSX tests, and up to 40% in our After Effects tests.
Optimized prop application:
- Changes have been made to how props are applied, with the goal to reduce the time it takes to apply props to their views.
- Benchmark timing improved by up to 35% for application of the width prop over the course of the test.
Batched logic of prop application:
- Some prop’s application, such as
snapToInterval, caused other props to be reapplied with the same value within our engine.
- Changes were made to ensure that these props don’t redundantly reapply props when their values have not changed.
Native Animation Support: Added support for
useNativeDriver set to
true with the following methods:
- In this release,
Animated.event()is not supported when used with
Animated.event()is supported when not using the Native Driver.
- We plan to support
Animated.event()with Native Driver in the future releases.
For more information, see Vanilla React Native Supported Components.
You.i Engine React Native Known Issues
Using the JS Debugger throws exceptions due to an issue related to the Timing module. This issue has been seen across multiple platforms.
::0: F/TimingModule: Assertion failed: Negative difference in time since timer created in JS. Are the clocks aligned?!
This issue is being investigated and planned to be addressed as soon as possible.
You.i Engine Cloud Solution
The Cloud team has continued to focus on feature and performance improvements.
New features and functions include:
- Expanded React Native JSX support
- TextInput properties
- scrollTo APIs
- Image properties
- Roku support for ScrollView's
- Implemented the ID3
TimedMetadataInterfacetag support for Cloud Solution.
- Allows the client to capture any desired timed metadata on the available stream.
ComponentScrollingViewsupport for property, content, and animation updates.
- Improved queuing of analytic events.
- Improvements to React Native Animation support.
- List focus improvements.
- Resolved a Persistent Storage issue where an app's user upgrading from 5.2 to 5.3 may have been prompted to re-login on their client.
- Fixed an issue where background life cycle events could disrupt the mobile experience.
- Fixed an issue where the text continued beyond the
- Fixed an issue where an internet connection loss could result in an infinite spinner.
- Fixed an issue where animations and transitions on other platforms may not have appeared as expected.
- Reduced the severity of an issue where the aligned 9-12pt text was occasionally ellipsized.
- Updated to comply with Roku certification requirements.
roInputEventis used when deep linking for direct playback commands.
- Signal beacons are added on app start and EPG launch.
- Removed API: The
exportAsScrollingViewAPI has been removed from the Cloud module.
Expanded React Native JSX Support on Cloud
In 5.4, we have continued to expand our JSX capabilities for the You.i Engine Cloud Solution.
Support for React Native's
scrollTo has been expanded to cover all APIs
- Corresponding methods for ListRef and ScrollRef You.i RN components
- Support for React Native's
scrollTofeature has following limitations and known issues:
- Animated scrolling may not be smooth if scrolling across many items. It is recommended to use less than 10 items and to use non-animated scrolling in this case.
- This feature will only work when exporting your list as a
- For C++ apps, although the supported
CYIScrollingView::ScrollToPositionmethod is part of
CYIScrollingView, it will only work if used on a
scrollTofunctions do not work on carousel lists.
- There is an issue, for both Roku and non-Roku builds, where scrolling may not work on lists that have magnets. It has only been observed when calling
scrollTomultiple times in succession on the same list.
To know more, see Vanilla React Native Supported Components.
Dynamic support for TextInput properties
onFocus: It is called when TextInput is focused.
onEndEditing: It is called when the OK button is pressed on the keyboard or even if text has not changed. It is not called if the user abandons editing.
onSubmitEditing: It is called when the OK button is pressed on the keyboard or even if text has not changed. It is not called if the user abandons editing.
onChange: It is called if the OK button is pressed and text has changed.
onChangeText: It is called if the OK button is pressed and text has changed.
clearTextOnFocus: It is called when TextInput receives focus.
onKeyPress: It is not called on Roku.
To know more, see Vanilla React Native Supported Components.
Support for dynamically changing the attributes of view components at run-time
backgroundColoris implemented for the following components:
CYISceneView(related RN component:
CYIImageView(related RN component:
CYITextEditView(related RN component:
Dynamic support for additional Image properties
resizeModeis now partially supported:
CYIImageView::ScaleMode::Stretch(related RN property:
CYIImageView::ScaleMode::Fit(related RN property:
CYIImageView::ScaleMode::Fill(related RN property:
centerare not supported.
Cloud Solution Known Issues
In 5.3, we noted that some text could be truncated, followed by an ellipsis. This issue has been addressed and is resolved in most cases. It still may occur in rare cases (depending on very specific font, font size, and character usage). In other cases, text nodes aligned by the
alignItemsproperty may not align exactly as expected.
- As of 5.4, text overflow occurs in some cases with certain combinations of custom fonts and fontSizes. To avoid this behavior, test your app on multiple devices to ensure text is not set to a font and fontSize that causes overflow.
Due to technical limitations the Roku platform does NOT support all standard You.i Engine One features. Please review all Working With Roku documentation, and schedule a design review prior to project kick-off.
After Effects Workflow
Introducing experimental support for After Effects shape layer export. Supported Features are:
- Parametric shapes: Rectangle and Ellipses
- Paint Operations: Stroke, Fill, Gradient Stroke, and Gradient Fill
- Shape Groups
To know more, see Working With Shapes.
This is an experimental feature that is not recommended for production use due to performance impact.
Fixed an issue which caused padding and margin values to reset in the After Effects property panel.