PackageTrack
Sign in Get early access

flutter_tvos

Platform detection and utilities for Flutter apps running on Apple TV (tvOS). Provides runtime checks for tvOS, device info, and capability queries.

1.1.3 38K downloads/mo #1667 most downloaded on pub.dev fluttertv/flutter-tvos

What this package is like to depend on

Last release 18 days ago

05 Aug 2026

Release timing varies

gaps range from 1 weeks to 6 weeks

Nearly every release is documented

notes for 8 of 8 stable releases

2 versions withdrawn

withdrawn after publishing

3 months old

10 releases · first in 2026

10 releases in the last 12 months

see the full history below

Release timeline

10 releases · May 2026 to Aug 2026
Release Pre-release Withdrawn

Releases

latest 10
  1. 1.1.3 05 Aug 2026
    Release notes
    • Documentation: the README no longer says this package wires the Siri Remote to Flutter's focus system. The engine does that — an app using only Focus, FocusTraversal, Shortcuts and standard focusable widgets responds to the remote without depending on flutter_tvos at all. The README now says what the package is actually for (tuning key synthesis, the analog touch stream, swipe events) and calls out raw touch forwarding as the one feature that genuinely requires it.
    • Example app: the tvOS Xcode project now derives bundle paths from $(WRAPPER_NAME) instead of $(PRODUCT_NAME).app (the latter is wrong whenever the product name is overridden), and gained a build phase that code-signs the Flutter.framework embedded through the Swift Package Manager umbrella — Xcode embeds it but does not sign it, so device installs otherwise carry nested code signed by a foreign team. These landed in the repository earlier but had never been published, because the package version was not bumped at the time.
    • No library, API, or native plugin changes — lib/ and tvos/Classes/ are byte-identical to 1.1.2.
    Open source →
  2. 1.1.2 23 Jun 2026
    Release notes
    • Documentation: list Siri Remote support in the README feature summary and bump the install snippet to the current version. No functional or API changes.
    Open source →
  3. 1.1.1 19 Jun 2026
    Release notes

    Patch release. No Flutter SDK or engine-artefact change — pinned versions match v1.1.0.

    Fixed

    • --obfuscate and --split-debug-info are now honoured by release/profile (AOT) builds. The tvOS AOT step runs gen_snapshot directly (rather than going through upstream AOTSnapshotter), and previously dropped these flags entirely — the build succeeded but the App binary kept readable Dart symbols and the split-debug-info directory stayed empty. The gen_snapshot invocation now forwards --obfuscate, the --dwarf-stack-traces / --resolve-dwarf-paths / --save-debugging-info=<dir>/app.tvos-arm64.symbols trio, and any --extra-gen-snapshot-options, matching upstream AOTSnapshotter.build (issue #10).
    Open source →
    Release notes
    • Fixed the remote-control configure handshake racing native plugin registration at startup. TvRemoteController.init() now retries the configure call until the native FlutterTvRemotePlugin acknowledges it, so the touchpad reliably starts forwarding swipe/touch events instead of intermittently appearing dead when the first push landed before the native handler was registered. The retry now only swallows the expected MissingPluginException / PlatformException (any other error — e.g. a config serialization bug — propagates instead of being silently retried), and if the handshake is never acknowledged within the retry budget it surfaces via FlutterError.reportError rather than giving up silently.
    Open source →
  4. 1.1.0 12 Jun 2026
    Release notes

    Minor release — the "porter release". Adds the entire flutter-tvos plugin port command for scaffolding federated *_tvos plugins from existing iOS / macOS plugins, first-class flutter-tvos create --platforms=tvos, a build-time nudge for plugins missing tvOS support, and a handful of build-pipeline fixes. No Flutter SDK or engine-artefact change — pinned versions match v1.0.1.

    Added

    • flutter-tvos plugin port — new command. Scaffolds a federated <plugin>_tvos sibling from any existing iOS or macOS Flutter plugin. The source plugin is never modified. Source loaders: positional local path, --from-pub <name>, or --from-git <url> --ref <ref>. The 11 packages published at fluttertv/plugins / pub.dev/publishers/fluttertv.dev were all produced this way. Built in 7 phases — scaffold → copy native verbatim → Swift transformer → Objective-C transformer → --include-example → fetch loaders → polish. The transformer:
      • widens Swift #if os(iOS) / #elseif os(macOS) and Objective-C #if TARGET_OS_IOS so tvOS follows the iOS branch (UIKit / AVFoundation / Flutter embedder shape);
      • widens @available iOS X, * / #available / API_AVAILABLE(ios()) to also list tvOS X (Apple ships those symbols on tvOS at the same OS version);
      • matches a compatibility database of tvOS-incompatible APIs (WebKit, SafariServices, LocalAuthentication, CoreLocation, CaptiveNetwork, NEHotspot, StoreKit code-redemption, UIPasteboard, AVAudioSession Bluetooth / speaker options, CoreTelephony, GoogleSignIn SDK, …) and either strips the import + stubs the enclosing method-channel handler, or wraps type-level uses behind #if !os(tvOS) (graceful partial port — package still compiles with the feature disabled);
      • collapses modern multi-target SwiftPM packages (Swift API + _objc / _ios / _macos siblings) into one CocoaPods module, dropping the macOS-only target;
      • emits a buildable Swift skeleton for FFI / native-assets plugins (dart:ffi + package:objective_c + hook/build.dart) that the tvOS toolchain can't build for as-is, so the user still gets a working scaffold to hand-finish;
      • prunes cross-platform Dart from the generated lib/_plus-style packages bundle Linux / Windows / Web / macOS / Android implementations alongside the iOS one; none reachable at runtime on tvOS, and their transitive imports (package:web, flutter_web_plugins, win32, package:nm, …) aren't in the generated pubspec, so shipping them inflates the package and breaks pana / dart pub publish analysis. Every transformation is recorded in a PORTING_REPORT.md written alongside the package.
    • flutter-tvos create --platforms=tvos / --tvos-only — first-class tvOS-only project scaffold. No more "create-iOS-then-strip" — the generated project ships a tvos/ Apple TV target only, with no iOS / Android / web / desktop platforms to delete by hand.
    • Build-time warning for plugins missing tvOS support. During flutter-tvos build/run, each plugin in the app's dep graph that has a FlutterTV-published <name>_tvos sibling the user hasn't added is surfaced as a one-line warning, e.g. audioplayers_tvos is available on pub.dev under the fluttertv.dev verified publisher. Did you forget to add it to pubspec.yaml?. Keyed on the user-facing aggregator name, so the federated iOS implementation (audioplayers_darwin) and platform-specific siblings (audioplayers_android, audioplayers_linux, …) don't produce duplicate or noisy warnings. Plugins outside the curated list are silently ignored.
    • doc/port-plugin.md — proper user guide for plugin port, matching the existing doc/ style: quick start, full flag reference, what the transformer does and doesn't do, after- porting workflow, troubleshooting.

    Fixed

    • flutter-tvos build/run now reads the app's version: from pubspec.yaml and writes the parsed FLUTTER_BUILD_NAME / FLUTTER_BUILD_NUMBER into Generated.xcconfig (1.2.3+41.2.3 / 4). Previously they were hardcoded to 1.0.0 / 1 unless explicitly passed via --build-name / --build-number, which broke package_info_plus and any code reading CFBundleShortVersionString / CFBundleVersion. Resolution order now matches iOS via xcode_backend.dart: CLI flag → project.manifest.buildName / buildNumber → canonical default.
    • FLTAssetsPath is now baked into the generated Info.plist so Flutter's plugin asset lookup (Asset / lookupKey(forAsset:)) resolves correctly on a real Apple TV — previously only worked on the simulator.
    • Device builds now pass -allowProvisioningUpdates to xcodebuild so the first build on a fresh team / device can refresh provisioning profiles itself instead of failing.
    • Tvos build skips the Dart native-assets target so an app that transitively pulls in an FFI / native-assets plugin (e.g. path_provider_foundation, package_info_plus) no longer fails with Target native_assets required define SdkRoot on first build (issue #3).

    Documentation

    • README's plugin-porting section is now a 4-line pointer to doc/port-plugin.md. The platform-key paragraph also points at the published fluttertv/plugins repo and the fluttertv.dev verified publisher in place of the older "FlutterTV-curated index being assembled and will be published soon" wording.
    • doc/ index gains "Porting an existing plugin" under "Plugin development".

    Engine

    • Updated to Flutter 3.44.0 (559ffa3f75e7402d65a8def9c28389a9b2e6fe42).
    • Updated bin/internal/engine.version to v1.0.0-flutter3.44.0.
    • Bumped packages/flutter_tvos to 1.0.5.
    Open source →
    Release notes
    • Added Swift Package Manager support. flutter_tvos now ships a tvos/Package.swift alongside its podspec, so apps using SPM-based plugin integration link it through the generated FlutterGeneratedPluginSwiftPackage umbrella. Previously this FFI plugin was CocoaPods-only because its symbols, resolved at runtime via dart:ffi, had no compile-time caller and the static linker dropped them. The plugin now declares its exported C symbols under flutter.plugin.platforms.tvos.ffiSymbols; flutter-tvos reads that list to emit forced link references in the app's generated registrant, and each export is annotated __attribute__((used)) / visibility("default") so it reaches the binary's dynamic symbol table. Requires flutter-tvos 1.3.0 or newer; older CLIs ignore ffiSymbols and the plugin continues to work via CocoaPods.
    Open source →
  5. 1.0.5 29 May 2026
    Release notes
    • Updated compatibility with Flutter 3.44.0.
    Open source →
  6. 1.0.4 15 May 2026
    Release notes
    • Fixed dart:ffi and dart:io compile errors on Web. flutter_tvos can now be added to a core package shared across tvOS, iOS, Android, and Web targets without stub workarounds. All TvOSInfo properties return safe defaults (false / '' / 0) on Web.
    Open source →
  7. 1.0.3 10 May 2026
    Release notes
    • Example: call WidgetsFlutterBinding.ensureInitialized() before TvRemoteController.instance.init() so the Flutter binding is ready when the platform channel attaches.
    • pubspec: added issue_tracker link so GitHub issues surface on pub.dev.
    Open source →
  8. 1.0.2 09 May 2026
    Release notes
    • Removed the runTvApp helper from the public API; apps should use normal runApp.
    • TvRemoteController.instance.init() now attaches Dart touch handlers explicitly and remains a no-op off tvOS.
    • Updated README setup/tuning guidance to reflect explicit initialization and current usage patterns.
    Open source →
  9. 1.0.1 04 May 2026 withdrawn
    Release notes

    Patch release updating the pinned Flutter SDK and tvOS engine artifacts to Flutter 3.41.9.

    Changed

    • Updated bin/internal/flutter.version to Flutter 00b0c91f06209d9e4a41f71b7a512d6eb3b9c694.
    • Updated bin/internal/engine.version to v1.0.0-flutter3.41.9.
    • Published matching tvOS engine artifacts for debug, profile, release, simulator, and host tooling.
    Open source →
    Release notes
    • Changelog corrected and metadata updated for publication on pub.dev (removed incorrect 1.1.0 header and merged entries under 1.0.0).
    Open source →
  10. 1.0.0 04 May 2026 withdrawn
    Release notes

    First public release. Targets Flutter 3.41.4.

    Highlights

    • RCU (Remote Control Unit) Support: Full integration with the Apple TV Siri Remote, including directional pad (D-pad) focus manipulation and enter/select interactions.
    • Native TextField Implementation: Deep integration with the tvOS on-screen keyboard, allowing users to interact with Flutter TextField widgets identically to native tvOS text inputs.
    • Flutter DevTools Integration: Full support for Flutter DevTools, Observatory, profiling, and debugging across both simulator and physical devices.

    Commands

    Ten commands are available in this release:

    Command Description
    build tvos Build an IPA or app bundle for tvOS device or simulator
    run Build, install, and launch on a simulator or device with hot reload
    create Scaffold a new tvOS app or plugin
    clean Delete build artefacts
    devices List connected Apple TV devices and running simulators
    doctor Check that the toolchain is configured correctly
    attach Attach to an already-running Flutter app for debugging
    drive Run integration tests via flutter_driver
    test Run unit tests
    precache Pre-download engine artifacts

    Simulator Support

    • Debug (JIT) builds targeting appletvsimulator SDK
    • Hot reload and hot restart over the VM service
    • Simulator listed and targeted by device ID via flutter-tvos devices and flutter-tvos run -d <id>

    Physical Device Deployment

    • Deployment to physical Apple TV hardware via xcrun devicectl
    • Release and profile (AOT) builds targeting appletvos SDK
    • Three-tier code signing resolution: environment variable → embedded .pbxproj setting → keychain lookup

    AOT Compilation

    • Release builds use gen_snapshot to produce ahead-of-time compiled binaries
    • Profile builds include observatory/DevTools hooks without JIT overhead

    Plugin Support

    • Native Swift plugins via CocoaPods integration
    • Plugin template: flutter-tvos create --template=plugin
    • Plugins declare a tvos platform entry in their pubspec.yaml

    flutter_tvos Platform Package

    A companion Dart/Swift package providing:

    • TvOSInfo — device model, OS version, and screen size queries
    • Device detection helpers (physical vs. simulator)
    • tvOS capability queries (focus engine availability, game controller presence)

    Tests

    74 unit tests covering command parsing, artifact resolution, build configuration, code signing logic, and device discovery. All tests use Flutter's standard test infrastructure and run without a connected device.

    Known Limitations

    • tvOS Simulator only supports debug (JIT) mode; profile/release simulator builds are not available (Apple restriction)
    • Metal is the only supported rendering backend; OpenGL is not present on tvOS
    • macOS host and Xcode 15 or later are required
    Open source →
    Release notes

    Remote Control (RCU)

    • TvRemoteController.init() — Siri Remote wired to Flutter's keyboard/focus pipeline on tvOS; passthrough on iOS/Android.
    • TvRemoteConfig — runtime-tunable thresholds (swipe, D-pad dead zone, auto-repeat delays); shipped to native via method channel.
    • TvRemoteController.addRawListener — raw touchpad events for custom swipe zones (video scrubbers etc.).
    • TvRemoteController.addSwipeListener — receive aggregated SwipeEvent notifications (direction + magnitude + isFast) without hand-rolling a SwipeDetector from raw touches. Raw and swipe listeners fire in parallel for the same gesture.
    • Lock-screen media commands (MPRemoteCommandCenter) forwarded to flutter/keyevent so widgets reacting to LogicalKeyboardKey.mediaPlay/Pause/Stop/... light up for free.

    Round-3 review follow-ups (Flutter Android / flutter-tizen parity)

    • Select → LogicalKeyboardKey.enter (was select). Flutter's default ActivateIntent binds to enter, so standard buttons and list items now activate on Select press without any app-level shortcut registration.

    • Menu → Navigator.maybePop via flutter/navigation popRoute (was a dead press(key=menu) method call). Mirrors Android's physical back-button behavior.

    • Play/Pause → LogicalKeyboardKey.mediaPlayPause (was a dead press(key=playPause) method call). Via Android keymap (Flutter's macOS map has no media entries).

    • Touches channel no longer spams "message discarded" warnings when no addRawListener is registered — engine installs a no-op drain, transparently replaced by Dart handler on attach.

    • Initial release

    • Platform detection: isTvOS, isSimulator

    • Device info: tvOSVersion, deviceModel, machineId

    • Capability queries: supports4K, supportsHDR, supportsMultiUser

    • Display info: displayResolution

    • Result caching with clearCache() support

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive