Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 12 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ jobs:
FLUTTER_COMMIT=$(cat bin/internal/flutter.version | tr -d '[:space:]')
git clone --depth=1 https://github.com/flutter/flutter.git
cd flutter
git fetch --depth=1 origin "$FLUTTER_COMMIT"
# --tags is required so `git describe --tags` can resolve the SDK
# version. Without it the checkout reports 0.0.0-unknown, which
# `dart test` does not care about but `flutter test` does: it runs
# pub resolution, and any package with a `flutter:` SDK constraint
# fails version solving. Same reason bin/internal/shared.sh passes it.
git fetch --depth=1 --tags origin "$FLUTTER_COMMIT"
git checkout "$FLUTTER_COMMIT"

- name: Resolve dependencies
Expand All @@ -35,6 +40,12 @@ jobs:
PUB_OFFLINE: "1"
run: flutter/bin/dart test test/

# Path-scoped to the root suite, so the bundled package's 103 widget
# tests need their own step with the flutter runner. See test.yml.
- name: Run package tests
working-directory: packages/flutter_tvos
run: ../../flutter/bin/flutter test

- name: Run dart analyze
run: flutter/bin/dart analyze lib/

Expand Down
25 changes: 23 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ jobs:
FLUTTER_COMMIT=$(cat bin/internal/flutter.version | tr -d '[:space:]')
git clone --depth=1 https://github.com/flutter/flutter.git
cd flutter
git fetch --depth=1 origin "$FLUTTER_COMMIT"
# --tags is required so `git describe --tags` can resolve the SDK
# version. Without it the checkout reports 0.0.0-unknown, which
# `dart test` does not care about but `flutter test` does: it runs
# pub resolution, and any package with a `flutter:` SDK constraint
# fails version solving. Same reason bin/internal/shared.sh passes it.
git fetch --depth=1 --tags origin "$FLUTTER_COMMIT"
git checkout "$FLUTTER_COMMIT"

# Resolve dependencies before running tests. Without an explicit
Expand All @@ -40,6 +45,17 @@ jobs:
PUB_OFFLINE: "1"
run: flutter/bin/dart test test/

# The step above is path-scoped to the root suite, so the bundled
# package's 103 tests never ran. They are widget tests and need the
# flutter runner rather than `dart test`. Among them is
# rcu/protocol_drift_test.dart, which pins the RCU wire protocol
# against FlutterTvRemoteProtocol.h — the test most likely to catch
# engine-side drift on a version bump, and precisely what CI should
# be checking on a PR that moves the engine.
- name: Run package tests
working-directory: packages/flutter_tvos
run: ../../flutter/bin/flutter test

analyze:
runs-on: macos-latest
steps:
Expand All @@ -50,7 +66,12 @@ jobs:
FLUTTER_COMMIT=$(cat bin/internal/flutter.version | tr -d '[:space:]')
git clone --depth=1 https://github.com/flutter/flutter.git
cd flutter
git fetch --depth=1 origin "$FLUTTER_COMMIT"
# --tags is required so `git describe --tags` can resolve the SDK
# version. Without it the checkout reports 0.0.0-unknown, which
# `dart test` does not care about but `flutter test` does: it runs
# pub resolution, and any package with a `flutter:` SDK constraint
# fails version solving. Same reason bin/internal/shared.sh passes it.
git fetch --depth=1 --tags origin "$FLUTTER_COMMIT"
git checkout "$FLUTTER_COMMIT"

- name: Resolve dependencies
Expand Down
79 changes: 79 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,85 @@ All notable changes to flutter-tvos will be documented here.

## [Unreleased]

## [1.4.3] - 2026-07-25

### Changed

- Bumped the pinned Flutter SDK to **3.44.8** (`058e0af2c2b5`).
- Engine artifacts are now `v1.0.1-flutter3.44.8`, rebuilt from source against
the 3.44.8 tree rather than republished.

The range is quoted from 3.44.6 rather than 3.44.7 because the 3.44.7 artifacts
were republished 3.44.6 binaries, so 3.44.6 is the last version whose engine was
actually compiled.

Nothing in that range changes tvOS behaviour. `DEPS` is unchanged, so Dart stays
at `d684a576` (a gclient `dart_revision` pin, not a submodule) and the SDK hash
our AOT artifacts embed does not move. The engine-source changes are Android-side
(`AccessibilityBridge.java`, `FlutterRenderer.java`, the Android toolchain GN
file), an ASan-only copy rule in `darwin/ios/BUILD.gn`, a host-architecture fix
for the clang path in `copy_info_plist.py`, plus test- and CI-only files.
`impeller/` is untouched.

One of those does reach the shipped framework, and it accounts for the size
delta: `copy_info_plist.py` generates the `Info.plist` embedded in
`Flutter.framework`, and in this range its `subprocess.check_output` gained
`text=True`, changing the recorded clang version from a bytes repr to a plain
string. The rebuilt zips therefore differ from 3.44.7 by a small, explained
amount rather than by build noise:

host_debug_unopt.zip +3 (no framework)
host_release.zip +4 (no framework)
tvos_debug_sim_arm64.zip +546
tvos_profile_arm64.zip +1191
tvos_debug_arm64.zip +1193
tvos_release_arm64.zip +1204

The two host zips embed no `Flutter.framework` and moved 3-4 bytes; all four
that do embed one moved 546-1204.

On the tooling side, 3.44.8 changes `UnpackDarwin.thinFramework` to run
`lipo -verify_arch` once per architecture (an Xcode 27 fix). flutter-tvos does
not use `UnpackDarwin` — it copies the engine framework itself — so nothing
needed mirroring.

The upstream build-graph types this CLI depends on are byte-identical to
3.44.7, so the tvOS overrides are unchanged. Note the relationships differ, and
they carry different risk on a future upgrade: `TvosKernelSnapshot`,
`TvosCopyFlutterBundle` and `TvosAotElfRelease` are true subclasses and inherit
upstream fixes, whereas `TvosDartPluginRegistrantTarget` extends `Target`
directly and *replaces* the stock `DartPluginRegistrantTarget` — a replacement
inherits nothing, so upstream drift there is a behavioural risk rather than a
non-event. `tvosGenSnapshotArgs` similarly mirrors `AOTSnapshotter.build` in
`base/build.dart` (untouched in this range) and belongs on the same
keep-in-sync checklist.

Verified against the freshly built artifacts, extracted through `precache`
after clearing `engine_artifacts/` so no stale extraction could be reused:

verify_artifacts.sh all checks pass, including the designated-requirement
origin signature, the on-device JIT RWX fix, and the
platform-identity patch in both host SDKs
dart analyze lib/ 0 errors, 0 warnings (135 infos)
CLI suite 297 passed
JIT/debug, tvOS 17.5 simulator
builds, installs, launches and renders; zero
"Target OS is incompatible" errors; 10/10 FFI symbols
exported; hot reload and hot restart both verified by
asserting the reloaded code actually ran
Apple TV 4K, tvOS 26.5
debug/JIT (including hot reload over the wireless
tunnel), profile and release: install, launch, render,
10/10 FFI symbols in each

Platform identity in all four of those modes:
`Platform.operatingSystem == "tvos"`, `Platform.isIOS`, `Platform.isTvOS` and
the package-level `FlutterTvosPlatform.isTvos` all true, with
`defaultTargetPlatform == TargetPlatform.iOS`.

The 17.5 run is the one that matters for shaders: tvOS 26 tolerates a wrong
metallib platform triple and older runtimes do not.

## [1.4.2] - 2026-07-21

### Changed
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ A Flutter toolchain for building and running Flutter apps on **Apple TV (tvOS)**

## Current version

- flutter-tvos: `1.4.2`
- Flutter SDK: `3.44.7` (`84fc5cbb223bc12f83d65b647ff8a56caf779ffd`)
- tvOS engine artifacts: `v1.0.1-flutter3.44.7` (origin-signed)
- flutter-tvos: `1.4.3`
- Flutter SDK: `3.44.8` (`058e0af2c2b57e369d905a03ac9748b0ebf543c6`)
- tvOS engine artifacts: `v1.0.1-flutter3.44.8` (origin-signed)

## Installation

Expand Down
2 changes: 1 addition & 1 deletion bin/internal/engine.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v1.0.1-flutter3.44.7
v1.0.1-flutter3.44.8
2 changes: 1 addition & 1 deletion bin/internal/flutter.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
84fc5cbb223bc12f83d65b647ff8a56caf779ffd
058e0af2c2b57e369d905a03ac9748b0ebf543c6
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: flutter_tvos
description: Flutter CLI tool for building and running Flutter apps on Apple TV (tvOS). A custom embedder wrapping Flutter SDK with tvOS-specific build targets, device management, and plugin support.
version: 1.4.2
version: 1.4.3
homepage: https://fluttertv.dev
repository: https://github.com/fluttertv/flutter-tvos
publish_to: "none"
Expand Down
Loading