dskuza 08532a7036 Add visionOS and tvOS support to Apple runtime
This pull request adds support for both visionOS and tvOS to the Apple (colloquially referred to as iOS) runtime.

It should _not_ be a breaking change, since the only major API change is an internal one (see `RenderContext` below). I believe we should be able to make this a minor release. Developers who have subclassed `RiveView` or `RiveRendererView` should not see any changes, unless they were explicitly expecting this view to be `MTKView`, which is fully unavailable on visionOS (hence our recreation - see `RiveMTKView` below.

## Premake Scripts

The premake scripts were updated to add a few new variants for iOS:
- xros (visionOS devices; named after the internal sdk)
- xrsimulator (visionOS simulator; named after the internal sdk)
- appletvos (tvOS devices; named after the internal sdk)
- appletvsimulator (tvOS simulators; named after the internal sdk)

The majority of the work here is copy/pasting existing code, and just adding additional filters when these new options are used, primarily used to target the new SDKs / minimums for those SDKs.

## Shaders

Shaders are pre-compiled for visionOS and tvOS separately, and the correct shaders are then used later-on at compile time.

## Build scripts

Build scripts were updated to support building the new libraries, targeting the new devices, using the new options above. Additionally, they have to point to new output files.

The `build_framework` script has been updated to build the new libraries to add to the final output `xcframework`.

## Project

Example targets for both visionOS and tvOS, since these truly are the "native" apps, rather than just iPad-on-your-device. These use a new `streaming` riv by the creative team.

The tvOS example app adds additional support for remote control, since that behavior can be utilized in multiple ways during development; that is, we don't add any "default" behavior for remote controls. The visionOS app, on the other hand, works out-of-the-box with no additional changes.

## RenderContext

`RenderContext` is an internal type; it's forward-declared, so it's unusable outside of the scope of internal development. There have been some "breaking" changes here - the API has been updated to, instead of passing in `MTKView` around, using `id<RiveMetalDrawableView>`. This had to be changed, regardless, since visionOS does not have `MTKView`. The choice to use a protocol was because it forces a little more explicit initialization across platforms, rather than having a parent class that acts as an abstract class, but isn't abstract because it still needs some default values, but those values are different based on device and API availability, etc. We could've passed around `RiveMTKView` as the type, but with a protocol, there's a possibility of being able to use a type that isn't exactly a view, but might want to still act against the drawing process. Personal choice, really.

## RiveRendererView

`RiveRendererView` is now a subclass of `RiveMTKView`. `RiveMTKView`'s superclass depends on the device:
- On visionOS, this is a `UIView` with an underlying `CAMetalLayer`
- On all other platforms, `MTKView`

This new class conforms to `RiveMetalDrawableView`, which allows it to be passed to `RenderContext` types.

### RiveMTKView (visionOS)

`RiveMTKView` on visionOS is a subclass of `UIView` that is backed by a `CAMetalLayer`, providing the necessary properties of `RiveMetalDrawableView` (compile-time safety here, baby). This is quite a simple recreation of the default `MTKView`, since that type is not available on visionOS (thanks, Apple).

## Other things

Additional compile-time checks for platform OS have been added to make sure each new platform compiles with the correct APIs that can be shared, or otherwise newly implemented.

Diffs=
6f70a0e803 Add visionOS and tvOS support to Apple runtime (#8107)

Co-authored-by: David Skuza <david@rive.app>
2024-12-11 23:37:59 +00:00
2021-06-11 18:42:37 +01:00
2024-12-10 02:07:09 +00:00
2023-12-05 21:23:08 +00:00
2024-12-10 02:07:14 +00:00
2020-08-26 11:46:54 -07:00
2024-12-10 02:07:09 +00:00
2024-12-10 02:07:09 +00:00
2024-12-10 02:07:14 +00:00

Emerge badge Discord badge Twitter handle

Rive iOS

Rive hero image

An iOS/macOS runtime library for Rive that supports both UIKit, AppKit, and SwiftUI.

The library is distributed both through Swift Package Manager and Cocoapods.

Table of contents

Rive overview

Rive is a real-time interactive design and animation tool that helps teams create and run interactive animations anywhere. Designers and developers use our collaborative editor to create motion graphics that respond to different states and user inputs. Our lightweight open-source runtime libraries allow them to load their animations into apps, games, and websites.

🏡 Homepage

📘 Rive docs

🛠 Rive Forums

Getting started

To get started with Rive iOS, check out the following resources:

For more information, see the Runtime sections of the Rive help documentation:

Supported devices

Currently, this runtime library supports a minimum iOS version of 14.0+. Devices supported include iPhone, iPad, and Mac catalyst. macOS support supports a targeted version of 13.1.

Examples

Check out the Example-iOS/ folder for an example application using the Rive iOS/macOS runtime.

Open the project in XCode and ensure the selected scheme/target is set to Preview/Preview (macOS). These schemes make use of the hosted Rive package dependency. The other targets are for local development and require additional configuration and set-up. See Customizing the build schemes for a project for instructions to switch schemes, and CONTRIBUTING.md for more information.

The example showcases a number of ways to use the high-level RiveViewModel API through UIKit and SwiftUI examples, including:

  • Setting a Rive file via a URL or asset in the bundle
  • Setting layout and loop mode options
  • Displaying single or multiple animations / artboards on one component
  • Setting up and maniuplating a state machine via inputs
  • ...and more!

Awesome Rive

For even more examples and resources on using Rive at runtime or in other tools, checkout the awesome-rive repo.

Migration guides

Using an older version of the runtime and need to learn how to upgrade to the latest version? Check out the migration guides below in our help center that help guide you through version bumps; breaking changes and all!

Migration guides

Contributing

We love contributions! Check out our contributing docs to get more details into how to run this project, the examples, and more all locally.

Issues

Have an issue with using the runtime, or want to suggest a feature/API to help make your development life better? Log an issue in our issues tab! You can also browse older issues and discussion threads there to see solutions that may have worked for common problems.

Description
iOS runtime for Rive
Readme MIT 2.4 GiB
Languages
Swift 48.9%
Objective-C++ 31.4%
Objective-C 12.1%
Shell 6.2%
C++ 1%
Other 0.4%