Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
41d009f
feat: experimental iOS Rive backend with synchronous API
mfazekas Feb 9, 2026
3df9e6f
chore: move docs to .local/docs, remove from git
mfazekas Feb 9, 2026
788d3de
refactor: remove ExperimentalFileSource from legacy backend
mfazekas Feb 9, 2026
e50b608
fix: restore whitespace in legacy files, remove fragile asset type gu…
mfazekas Feb 9, 2026
dc3e72a
fix: share single Worker across all files, fix artboard property data…
mfazekas Feb 9, 2026
ed7e9c2
fix: wire up trigger property to experimental fire/stream API
mfazekas Feb 9, 2026
1c55c87
fix: set fit after view setup to fix .layout mode on initial render
mfazekas Feb 11, 2026
4cbcd0f
test: add advanced data binding harness tests
mfazekas Feb 11, 2026
8233123
fix: guard negative index in legacy viewModelByIndex and createInstan…
mfazekas Feb 11, 2026
2e437e1
fix: correct trigger property listener task type signature
mfazekas Feb 11, 2026
90017a3
fix: embed SPM RiveRuntime.framework via Podfile post_install hook
mfazekas Feb 11, 2026
a920d97
refactor: split Android into legacy/experimental backend directories
mfazekas Feb 12, 2026
e87fe71
feat: implement Android experimental backend using new app.rive.* API
mfazekas Feb 12, 2026
3fcd575
feat: implement Android experimental backend with CommandQueue API
mfazekas Feb 16, 2026
8ea55d9
feat: migrate getEnums() from sync to async (Promise)
mfazekas Feb 17, 2026
726aac6
fix: color property overflow and test tolerance for cross-platform di…
mfazekas Feb 17, 2026
3d510ad
feat: add backend property to RiveFileFactory for runtime detection
mfazekas Feb 17, 2026
312f208
feat: migrate viewModelByIndex, createInstanceByIndex, viewModel to a…
mfazekas Feb 17, 2026
2b2b396
fix: lint formatting in ViewModel spec and harness test
mfazekas Feb 17, 2026
1128d80
ci: add experimental runtime harness tests for iOS and Android
mfazekas Feb 18, 2026
600162d
ci: increase iOS experimental harness timeout to 90min for cold builds
mfazekas Feb 18, 2026
956d42e
fix: handle throwing Worker() init in rive-ios 6.15.1
mfazekas Feb 18, 2026
cc25b29
fix: experimental iOS instance lookup and test guards
mfazekas Feb 19, 2026
7499c32
feat: add async APIs for RiveFile/ViewModel and fix experimental inst…
mfazekas Feb 19, 2026
4a2ec7d
chore: upgrade rive-ios SPM to 6.15.2
mfazekas Feb 19, 2026
e6d98ce
fix: only allow snakeLizard enum on android legacy backend
mfazekas Feb 19, 2026
ea446a7
test: add useViewModelInstance e2e harness tests
mfazekas Feb 19, 2026
60034a5
fix: implement color property get/listen and fix UInt32 crash on expe…
mfazekas Feb 26, 2026
6416647
feat(ios): decouple SPM from experimental runtime toggle
mfazekas Mar 11, 2026
35fe7b3
fix: unify USE_RIVE_NEW_API flag, replace SPM with CocoaPods, fix exp…
mfazekas Mar 12, 2026
2249388
fix: skip autoPlay test on both experimental backends
mfazekas Mar 12, 2026
4a8b7b2
fix: remove unused Platform import
mfazekas Mar 12, 2026
a3e8b3c
chore: update nitrogen generated files
mfazekas Mar 16, 2026
a66f3b5
fix: use ArrayBuffer instead of ArrayBufferHolder in new HybridRiveFi…
mfazekas Mar 16, 2026
0a336ce
feat: add async versions of viewModelCount, artboardCount, artboardNames
mfazekas Mar 16, 2026
97a59fd
feat: add async alternatives for ViewModel property value getters
mfazekas Mar 16, 2026
64c5873
fix: add missing Promise import in experimental Android property file…
mfazekas Mar 16, 2026
3023448
ci: remove android style guide enforcement from ktlint
mfazekas Mar 17, 2026
c23a288
fix(kotlin): fix all ktlint violations and add lint:fix:kotlin script
mfazekas Mar 17, 2026
fdbacab
ci: fail lint-kotlin job on ktlint errors
mfazekas Mar 17, 2026
2df4fb0
feat: add explicit type field to ResolvedReferencedAsset for asset lo…
mfazekas Mar 17, 2026
2e4d65a
fix: format import in ReferencedAssets.ts to satisfy Prettier
mfazekas Mar 17, 2026
cffa095
chore: re-run nitrogen to regenerate bridge code for RiveAssetType/ty…
mfazekas Mar 17, 2026
c0ae1ff
fix: disable function-naming ktlint rule for Composable PascalCase fu…
mfazekas Mar 17, 2026
f5852b7
fix: apply ktlint auto-format to ComposeTestActivity
mfazekas Mar 17, 2026
46daf24
fix(ios): update ExperimentalAssetLoader to use typed RiveAssetType enum
mfazekas Mar 17, 2026
eb56abd
fix(android): update ExperimentalAssetLoader to use typed RiveAssetTy…
mfazekas Mar 17, 2026
69e9afb
refactor: API cleanup — validate option, createBlankInstanceAsync ren…
mfazekas Mar 17, 2026
a8cb705
fix(ios): correct set(value:) argument label to match generated protocol
mfazekas Mar 17, 2026
a77ede1
fix(ios): createInstanceByIndex(Async) now respects the index
mfazekas Mar 18, 2026
8759882
fix: remove createInstanceByIndexAsync, fix createInstanceByIndex on …
mfazekas Mar 18, 2026
98d680c
fix(ios): implement propertyCount and instanceCount using runtime APIs
mfazekas Mar 18, 2026
474cf82
test: strengthen replaceViewModel assertion to verify actual replacement
mfazekas Mar 18, 2026
5892b92
fix(ios): don't set instanceName to property path for nested VMIs
mfazekas Mar 18, 2026
51c13a8
fix(android): remove VM name heuristic, throw on unsupported ops for …
mfazekas Mar 23, 2026
cc9f8a8
fix: update Podfile.lock to RiveRuntime 6.17.0 from main
mfazekas Mar 23, 2026
3b93d37
chore: regenerate nitrogen bindings after rebase
mfazekas Mar 26, 2026
b6031a0
fix: remove duplicate async methods in legacy files, make HybridRiveV…
mfazekas Mar 26, 2026
e880e4d
fix: add missing createInstanceAsync to experimental backends
mfazekas Mar 26, 2026
f038fed
fix: remove redundant createInstanceAsync, keep only createBlankInsta…
mfazekas Mar 26, 2026
56efa57
fix: use yarn nitrogen (with postprocess), fix ktlint blank line
mfazekas Mar 26, 2026
d9e08fa
chore: add Issue189 reproducer and nodefaultbouncing.riv from fix/and…
mfazekas Mar 26, 2026
58b419b
fix(ios-exp): skip auto-binding when artboard has no default ViewModel
mfazekas Mar 26, 2026
5e11aff
Fix "0x1 not found" error when artboard has no default ViewModel on A…
mfazekas Mar 26, 2026
3499f0a
fix: enable experimental API flag, await Worker init, update Podfile.…
mfazekas Mar 27, 2026
1bccac8
fix: update test harnesses for useViewModelInstance {instance, error}…
mfazekas Mar 27, 2026
9c4a9f1
fix: ktlint spacing between declarations with comments
mfazekas Mar 27, 2026
44fc9ce
test: skip Android experimental tests that need rive-android#443
mfazekas Mar 30, 2026
e025dfe
test: clarify skip reasons for Android experimental test guards
mfazekas Mar 30, 2026
6e1185c
fix: clean up legacy files to match upstream, fix Issue159 error type
mfazekas Mar 30, 2026
dea92ee
fix: make legacy HybridViewModel identical to main
mfazekas Mar 31, 2026
6cc1bb7
feat: make experimental runtime the default, legacy opt-in via USE_RI…
mfazekas Mar 31, 2026
aec3038
refactor: rename android/src/experimental to android/src/new to match…
mfazekas Mar 31, 2026
c9a14ff
fix: add missing getPropertyCountAsync/getInstanceCountAsync to new b…
mfazekas Mar 31, 2026
9f61446
chore: enable prerelease (beta) versioning for 0.5.0 release track
mfazekas Mar 31, 2026
e96e039
fix(ios): add @MainActor to RiveReactNativeView, guard stale config t…
mfazekas Apr 8, 2026
6fc3aad
fix(ios): make awaitViewReady reentrant, support multiple callers
mfazekas Apr 8, 2026
aa805eb
fix(android): use RuntimeException instead of Error for recoverable f…
mfazekas Apr 8, 2026
ce29667
fix: log error instead of swallowing in createInstanceByName catch
mfazekas Apr 8, 2026
d9fd128
fix(android): log warning when inferFromMagicBytes falls back to IMAG…
mfazekas Apr 8, 2026
074c670
fix(ios): add MainActor.assumeIsolated for calls into @MainActor Rive…
mfazekas Apr 8, 2026
aeb9084
fix(ios): port Xcode 26 ODR workaround from main into podspec
mfazekas Apr 8, 2026
3628c5a
fix(ios): add missing try to MainActor.assumeIsolated in afterUpdate
mfazekas Apr 8, 2026
2ece0f7
fix(ios): use onMainSync instead of MainActor.assumeIsolated for JS-c…
mfazekas Apr 8, 2026
3d30764
fix(ios): make onMainSync provide @MainActor isolation, fix infinite …
mfazekas Apr 9, 2026
c026f6d
fix(ios): use Result to propagate errors from onMainSync across dispa…
mfazekas Apr 9, 2026
5783bb2
fix(android): use device density for Fit.Layout default scale factor …
mfazekas Apr 14, 2026
aac60a3
fix(android): use device density for Fit.Layout in experimental backe…
mfazekas Apr 14, 2026
5d31b0a
feat: add RiveLogger with configurable JS handler and deprecation war…
mfazekas Apr 24, 2026
603eaf3
fix(ios): defer fit assignment until MTKView is ready in experimental…
mfazekas Apr 27, 2026
701b9c1
feat: add RiveLog.setLogLevel() to filter log output (#232)
mfazekas Apr 29, 2026
8832115
chore(ios): bump rive-ios to 6.19.1 (#233)
mfazekas Apr 29, 2026
f6e2e74
fix(ios): add backend property to legacy HybridRiveFileFactory (#236)
mfazekas Apr 29, 2026
8a1a35e
fix(ios): prevent crash on color values with high alpha (#234)
mfazekas Apr 29, 2026
de915e3
fix(ios): pass fit in constructor, OOB asset improvements (#237)
mfazekas Apr 29, 2026
75e9d81
feat: add async variants for ViewModelListProperty mutation methods
mfazekas Apr 30, 2026
992088c
fix: remove pinned rive-android version from example app
mfazekas Apr 30, 2026
0393c35
chore: upgrade react-native-nitro-modules to 0.35.6
mfazekas Apr 30, 2026
3b4200d
chore: remove ComposeTestActivity and LegacyTestActivity from example…
mfazekas Apr 30, 2026
f7666d0
chore(ios): bump rive-ios to 6.19.2
mfazekas Apr 30, 2026
98e2bdf
fix(ios): remove Xcode 26 modulemap stripping workaround (#239)
mfazekas May 4, 2026
26aea77
chore(ios): remove 'Experimental' naming and debug logs (#240)
mfazekas May 5, 2026
f4799c0
fix(android): prevent draw errors on view dispose (#243)
mfazekas May 5, 2026
9adfd44
fix(android): await asset registration before file load, fix dispose …
mfazekas May 6, 2026
2861aa9
feat: add native iOS code coverage integration
mfazekas May 8, 2026
2510967
fix(ios): remove stale experimental iOS test skips (#246)
mfazekas May 8, 2026
60cb2a2
chore(android): rename ExperimentalAssetLoader to AssetLoader (#245)
mfazekas May 8, 2026
dd67305
chore: add kanit_regular.ttf to expo example assets (#242)
mfazekas May 8, 2026
78b64b7
chore(ios): bump rive-ios to 6.20.0 (#241)
mfazekas May 8, 2026
4fdd1f3
feat: add properties enumeration to ViewModel and ViewModelInstance (…
mfazekas May 12, 2026
e991261
chore: bump example app to React Native 0.80.3 (#254)
mfazekas May 13, 2026
2bf6631
chore: bump react-native-harness to 1.1.0 (#253)
mfazekas May 14, 2026
ba25bff
test: add async API coverage tests (#258)
mfazekas May 18, 2026
f299fe1
chore: upgrade react-native-harness to 1.2.0
mfazekas May 19, 2026
45f34b0
chore: fix prettier formatting
mfazekas May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ ktlint_standard_string-template-indent = disabled
ktlint_standard_backing-property-naming = disabled
ktlint_standard_no-consecutive-comments = disabled
ktlint_standard_no-empty-first-line-in-class-body = disabled
ktlint_standard_condition-wrapping = disabled
ktlint_standard_if-else-wrapping = disabled
ktlint_standard_function-naming = disabled

[nitrogen/generated/**/*.kt]
ktlint = disabled
197 changes: 196 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
ktlint_version: "1.5.0"
android: true
fail_on_error: true

lint:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -472,3 +472,198 @@ jobs:
run: |
echo "=== Checking logcat for errors ==="
adb logcat -d -s ReactNativeJS:* RiveExample:* RNRive:* | tail -200 || echo "No logs found"

test-harness-ios-legacy:
runs-on: macos-latest
timeout-minutes: 90
env:
XCODE_VERSION: 16.4
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Use appropriate Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ env.XCODE_VERSION }}

- name: Restore cocoapods
id: cocoapods-cache
uses: actions/cache/restore@v4
with:
path: |
**/ios/Pods
key: ${{ runner.os }}-legacy-cocoapods-${{ hashFiles('example/ios/Podfile', '*.podspec') }}
restore-keys: |
${{ runner.os }}-legacy-cocoapods-

- name: Install cocoapods
if: steps.cocoapods-cache.outputs.cache-hit != 'true'
run: |
cd example
bundle install
USE_RIVE_LEGACY=1 bundle exec pod install --project-directory=ios

- name: Save cocoapods cache
if: steps.cocoapods-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
**/ios/Pods
key: ${{ steps.cocoapods-cache.outputs.cache-key }}

- name: Restore iOS build cache
id: ios-build-cache
uses: actions/cache/restore@v4
with:
path: example/ios/build
key: ${{ runner.os }}-ios-legacy-build-${{ env.XCODE_VERSION }}-${{ hashFiles('yarn.lock', 'ios/**', 'nitrogen/generated/ios/**', '*.podspec', 'example/ios/Podfile', 'example/ios/RiveExample/**') }}
restore-keys: |
${{ runner.os }}-ios-legacy-build-${{ env.XCODE_VERSION }}-

- name: Build iOS app
if: steps.ios-build-cache.outputs.cache-hit != 'true'
working-directory: example/ios
run: |
set -o pipefail && xcodebuild \
-derivedDataPath build \
-workspace RiveExample.xcworkspace \
-scheme RiveExample \
-sdk iphonesimulator \
-configuration Debug \
build \
CODE_SIGNING_ALLOWED=NO

- name: Save iOS build cache
if: steps.ios-build-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: example/ios/build
key: ${{ steps.ios-build-cache.outputs.cache-primary-key }}

- name: Boot iOS Simulator
uses: futureware-tech/simulator-action@v4
with:
model: 'iPhone 16 Pro'
os_version: '18.6'

- name: Install app on simulator
run: xcrun simctl install booted example/ios/build/Build/Products/Debug-iphonesimulator/RiveExample.app

- name: Wait for simulator to be fully ready
run: |
echo "Waiting for simulator to be fully ready..."
sleep 10
xcrun simctl list devices | grep Booted

- name: Run harness tests on iOS
working-directory: example
run: |
for attempt in 1 2 3; do
echo "Attempt $attempt of 3"
if yarn test:harness:ios --verbose --testTimeout 120000; then
echo "Tests passed on attempt $attempt"
exit 0
fi
echo "Attempt $attempt failed, retrying..."
sleep 5
done
echo "All attempts failed"
exit 1

- name: Debug - Check for console logs
if: failure()
run: |
echo "=== Checking simulator logs for errors ==="
xcrun simctl spawn booted log show --predicate 'processImagePath CONTAINS "RiveExample"' --last 5m --style compact 2>&1 | tail -200 || echo "No logs found"

test-harness-android-legacy:
runs-on: ubuntu-latest
timeout-minutes: 30
env:
ANDROID_API_LEVEL: 35
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Install JDK
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Finalize Android SDK
run: |
/bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null"

- name: Enable legacy Rive backend
run: |
echo "USE_RIVE_LEGACY=true" >> example/android/gradle.properties

- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/wrapper
~/.gradle/caches
key: ${{ runner.os }}-gradle-harness-legacy-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-harness-legacy-
${{ runner.os }}-gradle-harness-
${{ runner.os }}-gradle-

- name: Restore Android build cache
id: android-build-cache
uses: actions/cache/restore@v4
with:
path: example/android/app/build
key: ${{ runner.os }}-android-legacy-build-${{ env.ANDROID_API_LEVEL }}-${{ hashFiles('yarn.lock', 'android/**', 'nitrogen/generated/android/**', 'example/android/app/build.gradle', 'example/android/gradle.properties') }}
restore-keys: |
${{ runner.os }}-android-legacy-build-${{ env.ANDROID_API_LEVEL }}-

- name: Build Android app
if: steps.android-build-cache.outputs.cache-hit != 'true'
working-directory: example/android
env:
JAVA_OPTS: "-XX:MaxHeapSize=6g"
run: |
./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=x86_64

- name: Save Android build cache
if: steps.android-build-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: example/android/app/build
key: ${{ steps.android-build-cache.outputs.cache-primary-key }}

- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: Run harness tests on Android
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ env.ANDROID_API_LEVEL }}
arch: x86_64
target: google_apis
force-avd-creation: false
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim
disable-animations: true
script: |
adb install example/android/app/build/outputs/apk/debug/app-debug.apk
sleep 10
cd example && for attempt in 1 2 3; do echo "Attempt $attempt of 3"; if timeout 300 env ANDROID_AVD=test yarn test:harness:android --verbose --testTimeout 120000; then echo "Tests passed on attempt $attempt"; exit 0; fi; echo "Attempt $attempt failed (exit $?), retrying..."; sleep 5; done; echo "All attempts failed"; exit 1

- name: Debug - Check logcat
if: failure() || cancelled()
run: |
echo "=== Checking logcat for errors ==="
adb logcat -d -s ReactNativeJS:* RiveExample:* RNRive:* | tail -200 || echo "No logs found"
77 changes: 77 additions & 0 deletions NATIVE_IOS_COVERAGE_INTEGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Native iOS Code Coverage

Native iOS code coverage is integrated via `react-native-harness` 1.2.0+, which includes
`@react-native-harness/coverage-ios` support out of the box.

## Prerequisites

- Xcode with `xcrun llvm-profdata` and `xcrun llvm-cov` available
- iOS simulator booted (the harness test runner handles this)

## Configuration

The harness config (`example/rn-harness.config.mjs`) specifies which CocoaPods targets
get instrumented:

```js
coverage: {
native: {
ios: {
pods: ['RNRive', 'RiveRuntime'],
},
},
},
```

The `pods` array lists which CocoaPods targets get instrumented with
`-profile-generate -profile-coverage-mapping` (Swift) and
`-fprofile-instr-generate -fcoverage-mapping` (C/ObjC).

Start with just `['RNRive']` if you only care about your own code.
Add `'RiveRuntime'` to also cover the upstream Rive SDK.

## Running

```bash
cd example

# Pod install will auto-instrument the configured pods
cd ios && pod install && cd ..

# Clean build required after instrumentation changes
xcodebuild clean -workspace ios/RiveExample.xcworkspace -scheme RiveExample
yarn build:ios

# Run tests with coverage
yarn test:harness:ios:coverage
```

When tests finish, the harness merges `.profraw` files and produces an `.lcov` report.

Profraw files are written to `/tmp/harness-coverage/` which persists across app reinstalls
on iOS simulators.

## Viewing Results

```bash
# Quick summary
lcov --summary coverage/native-ios.lcov

# Generate HTML report
genhtml coverage/native-ios.lcov -o coverage/native-ios-html
open coverage/native-ios-html/index.html
```

## Troubleshooting

**No `.profraw` files generated:**
- Verify `pod install` printed the `[HarnessCoverage] Instrumenting pods` message
- Ensure the app was rebuilt from scratch after `pod install`
- Check simulator logs: `xcrun simctl spawn booted log show --predicate 'message CONTAINS "HarnessCoverage"' --last 1m`

**`xcrun llvm-cov` fails:**
- The `.profraw` file must match the exact binary that produced it — do a clean build

**Xcode 16+ / debug dylibs:**
- The app binary may be a thin stub; the real code is in `RiveExample.debug.dylib`
- The coverage collector handles this automatically via `findAppExecutable()`
42 changes: 19 additions & 23 deletions RNRive.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,14 @@ if !rive_ios_version
raise "Internal Error: Failed to determine Rive iOS SDK version. Please ensure package.json contains 'runtimeVersions.ios'"
end

Pod::UI.puts "@rive-app/react-native: Rive iOS SDK #{rive_ios_version}"

# Xcode 26 workaround: strip .Swift Clang submodule from RiveRuntime's prebuilt
# modulemaps to prevent ODR conflicts with locally-compiled Swift C++ interop.
# See: https://github.com/rive-app/rive-nitro-react-native/issues/173
if defined?(Pod::Installer)
module RiveXcode26SwiftModuleFix
def run_podfile_pre_install_hooks
rive_dir = File.join(sandbox.root.to_s, 'RiveRuntime')
if Dir.exist?(rive_dir)
Dir.glob(File.join(rive_dir, '**', 'module.modulemap')).each do |path|
content = File.read(path)
next unless content.include?('RiveRuntime.Swift')
cleaned = content.gsub(/\nmodule RiveRuntime\.Swift \{[^}]*\}\n?/m, "\n")
File.write(path, cleaned)
end
end
super
end
end

Pod::Installer.prepend(RiveXcode26SwiftModuleFix)
# The experimental runtime backend is used by default. Set USE_RIVE_LEGACY=1
# (or $UseRiveLegacy = true in Podfile) to fall back to the legacy backend.
use_legacy = ENV['USE_RIVE_LEGACY'] == '1' || (defined?($UseRiveLegacy) && $UseRiveLegacy)

if use_legacy
Pod::UI.puts "@rive-app/react-native: Using legacy Rive runtime backend (iOS SDK #{rive_ios_version})"
else
Pod::UI.puts "@rive-app/react-native: Using experimental Rive runtime backend"
end
Comment thread
mfazekas marked this conversation as resolved.

Pod::Spec.new do |s|
Expand All @@ -65,11 +51,21 @@ Pod::Spec.new do |s|

s.source_files = "ios/**/*.{h,m,mm,swift}"

if use_legacy
s.exclude_files = ["ios/new/**"]
else
s.exclude_files = ["ios/legacy/**"]
end

s.public_header_files = ['ios/RCTSwiftLog.h']
load 'nitrogen/generated/ios/RNRive+autolinking.rb'
add_nitrogen_files(s)

s.dependency "RiveRuntime", rive_ios_version
s.dependency 'RiveRuntime', rive_ios_version

install_modules_dependencies(s)

unless use_legacy
s.xcconfig = { 'OTHER_SWIFT_FLAGS' => '$(inherited) -DRIVE_EXPERIMENTAL_API' }
end
end
7 changes: 7 additions & 0 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,17 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}

def useLegacy = rootProject.findProperty('USE_RIVE_LEGACY') == 'true'

sourceSets {
main {
java.srcDirs += ["generated/java",
"generated/jni"]
if (useLegacy) {
java.srcDirs += ["src/legacy/java"]
} else {
java.srcDirs += ["src/new/java"]
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,23 @@ class HybridRiveFile : HybridRiveFileSpec() {
}
}

override fun getEnums(): Promise<Array<RiveEnumDefinition>> {
val file = riveFile ?: return Promise.resolved(emptyArray())
return Promise.async {
try {
file.enums
.map { enum ->
RiveEnumDefinition(
name = enum.name,
values = enum.values.toTypedArray()
)
}.toTypedArray()
} catch (e: NoSuchMethodError) {
throw UnsupportedOperationException("getEnums requires rive-android SDK with enums support")
}
}
}

override fun dispose() {
scope.cancel()
weakViews.clear()
Expand Down
Loading
Loading