path_provider_tvos 패키지는 Flutter 플러그인 path_provider의 tvOS(Apple TV)용 구현을 제공하여 Flutter 앱이 Apple TV에서 애플리케이션 문서, 캐시 및 임시 폴더와 같은 표준 디렉터리에 접근할 수 있도록 합니다. 이는 Flutter TV 플러그인 생태계의 일부이며 tvOS 플랫폼 간 일관된 파일 경로 처리를 보장합니다. 이 패키지는 Apple TV를 대상으로 하는 Flutter 앱을 지원하며, tvOS 환경의 제약 속에서도 로컬 파일 저장소를 신뢰성 있게 관리할 수 있도록 합니다.
사용 사례
Apple TV에서 앱 전용 문서 디렉터리에 접근하기
오프라인 사용을 위한 캐시 데이터 저장
tvOS 앱에서 일시 파일 관리
사용자 선호 또는 설정 유지
Apple TV 앱에서 미디어 파일 처리
주요 기능
tvOS 전용 경로 해결
Flutter의 path_provider API와의 통합
문서, 캐시 및 임시 디렉터리 지원
최소의 오버헤드와 가벼움
다른 Flutter 플랫폼과 일관성 유지
적합한 대상
Apple TV용 앱을 개발하는 Flutter 개발자
tvOS에서 로컬 파일 저장이 필요한 앱
다중 플랫폼에서 path_provider 패턴을 사용하는 프로젝트
크로스플랫폼 파일 유틸리티를 유지 관리하는 팀
고려 사항
tvOS 기기 또는 시뮬레이터에서만 작동합니다
iOS 또는 Android 플랫폼을 지원하지 않습니다
Flutter TV SDK 설정이 필요합니다
파일 시스템 경로에 한정되며, 네트워크 기능 없음
flutter-tvos 플러그인 생태계에 의존
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
FlutterTV Plugins
Flutter plugins with Apple TV (tvOS) support, maintained by the
fluttertv.dev organization.
These are companions to flutter-tvos
— the Flutter tvOS custom embedder. Most are federated *_tvos
implementations of popular pub.dev plugins, produced with the
flutter-tvos plugin port tool and finished/verified by hand.
Published on pub.dev under the
fluttertv.dev
verified publisher. Add them like any other plugin (<name>_tvos: ^0.0.1).
List of plugins
Every plugin below has a tvOS implementation; full details (API
coverage, disabled regions, and porting notes) are available in each
package's README.md and PORTING_REPORT.md.
Then use the upstream plugin's API exactly as on iOS — the tvOS
implementation registers automatically. Once published these become
plain ^version dependencies.
A few packages need a writable directory and therefore also
path_provider_tvos: e.g. video_player_tvos (for
VideoPlayerController.file) and sqflite_tvos (for the database
path). Their READMEs note this.
How this repository was created
These packages were not hand-written from scratch. They were produced
with the flutter-tvos plugin port tool (part of
flutter-tvos) and then
verified — and where needed finished — by hand. This is the exact,
reproducible workflow.
For the full porter reference — every flag, what the transformer
does and doesn't do, and how to read the generated PORTING_REPORT.md
— see Porting an existing plugin
in the flutter-tvos docs. The summary below is the recipe we used to
produce this repo.
flutter-tvos plugin port takes an existing Apple plugin (the iOS or
macOS implementation package) and emits a federated *_tvos package.
# from a published pub.dev package (what we used):$TVOS plugin port --from-pub video_player_avfoundation \
--output plugins/packages/video_player_tvos --include-example
# or from git, or from a local path:$TVOS plugin port --from-git https://github.com/foo/bar.git --ref main --output ...
$TVOS plugin port ../some_plugin_ios --output ...
The exact upstream source for each package is recorded at the top of
its PORTING_REPORT.md (e.g. video_player_tvos ←
video_player_avfoundation, shared_preferences_tvos ←
shared_preferences_foundation, audioplayers_tvos ←
audioplayers_darwin).
What the porter does automatically:
Copies the upstream Dart lib/ (rewriting package: self-imports)
and federates through the upstream *_platform_interface.
Copies the native Swift/Objective-C into tvos/Classes/ and
generates a tvOS *.podspec (no dependency on the Flutter
CocoaPod — tvOS resolves Flutter.framework via search paths).
Makes tvOS follow the iOS code paths: widens #if os(iOS) →
(os(iOS) || os(tvOS)), ObjC #if TARGET_OS_IOS →
(TARGET_OS_IOS || TARGET_OS_TV), and @available / #available
/ API_AVAILABLEiOS <v> → also tvOS <v>.
Collapses modern multi-target / include/-modular SwiftPM packages
into one CocoaPods module (drops the macOS-only target).
Sets FLTAssetsPath so plugin asset lookup resolves on a real
Apple TV; sanitizes example pub-workspace / dependency_overrides
wiring.
Graceful partial port: an API that genuinely doesn't exist on
tvOS, used at type/top-level scope, is wrapped in #if !os(tvOS) /
#if !TARGET_OS_TV so the package still compiles with that feature
disabled, and every such region is listed in PORTING_REPORT.md
under "Disabled on tvOS". A compatibility database
(WebKit, SafariServices, CoreLocation, CoreTelephony,
AVAudioSession routing options, …) drives this.
2. Read the porting report
Every package gets a PORTING_REPORT.md: the source + version, the
tvOS build outlook, methods ported/stubbed, every disabled region with
the reason, and a checklist. Read it before trusting a port.
3. Verify
cd plugins/packages/<pkg>/example
flutter pub get
$TVOS build tvos --simulator --debug # must be green$TVOStest integration_test/<plugin>_test.dart -d <sim-udid>
# on a physical Apple TV (set your signing team):
DEVELOPMENT_TEAM=XXXXXXXXXX $TVOS run -d <device-udid>
Only a green simulator build (and, ideally, passing integration tests
on a real Apple TV) qualifies a package for this list.
4. Hand-finish where the porter can't
The porter is honest about its limits; some packages needed manual
work, all of it documented in their PORTING_REPORT.md:
path_provider_tvos — path_provider_foundation is a
dart:ffi/native-assets plugin the tvOS toolchain can't build, so the
porter only emits a skeleton. A real native implementation
(NSSearchPathForDirectoriesInDomains / NSTemporaryDirectory) was
written by hand.
flutter_secure_storage_tvos — Keychain works on tvOS; the
optional LAContext / .biometryAny / Secure-Enclave biometric
path (which tvOS lacks) was guarded out by hand.
audioplayers_tvos, flutter_tts_tvos — AVAudioSession
category options that don't exist on tvOS
(allowBluetooth, defaultToSpeaker, …) were mapped to no-ops.
sqflite_tvos — re-ported once the porter learned to collapse
single-target include/-modular SwiftPM packages.
5. Curate
Packages whose primary purpose can't work on tvOS, or that don't
build after best-effort, are removed rather than published broken (see
Evaluated but not provided).
See AUTHORING.md for the deeper per-plugin recipe.
Repository layout
plugins/├──packages/<plugin>_tvos/# one directory per plugin│├──lib/# Dart (federated impl)│├──tvos/Classes/# native Swift/ObjC│├──tvos/<plugin>.podspec# CocoaPods spec, tvOS 13+│├──example/# runnable tvOS example│├──PORTING_REPORT.md# port detail + checklist│├──README.mdCHANGELOG.mdLICENSE└──AUTHORING.md# how to add a new one
Contributing
Federate via the upstream *_platform_interface; suffix _tvos.
Target tvOS 13.0+; guard shared iOS code with #if os(tvOS).
Document API support and any disabled regions in the package README.md
and PORTING_REPORT.md so users can assess compatibility.