Rebased onto develop (post #1663 sentence-case pass). Adds a dependency-free
Bun checker (bun run i18n:check) wired into the lint matrix: flags keys used in
code but missing from en.json, and keys present in en.json but referenced
nowhere. Source-only - only en.json is checked/edited; Crowdin syncs the other
locales.
en.json: +8 missing source keys, -86 dead keys. Planned-feature keys kept and
allow-listed with tracking issues:
- home.settings.other.show_large_home_carousel (#1702 native media-bar)
- home.settings.logs.delete_all_logs (#1703 iOS logs fix)
- home.suggested_episodes (#1704)
login: point the TV password modal at the existing login.login_button instead
of a redundant login.login alias.
Build #9 proved `-weak_framework SwiftUICore` does NOT bypass the allowed-client
check, and applying it to the tvOS app target regressed tvOS — reverted that
plugin (withSwiftUICoreWeakLink).
Confirmed root cause from build #8/#9 logs: both iOS jobs fail at the app
*executable* link (`Ld … Streamyfin`), not at any pod. SwiftUI was split into
SwiftUI + SwiftUICore on iOS 26; the SwiftUI pods emit a `-framework SwiftUICore`
autolink directive that, under use_frameworks :static, is inherited by the app's
static link, and the app isn't an allowed client of the private SwiftUICore.tbd.
Fix: in the pod post_install, compile pods with
`-Xfrontend -disable-autolink-framework -Xfrontend SwiftUICore` so they stop
emitting that direct autolink. SwiftUICore symbols then resolve through SwiftUI's
re-export (SwiftUI.tbd re-exports SwiftUICore). Scoped to phone
(ENV['EXPO_TV'] != '1') to leave the green tvOS build untouched.
Also harden scripts/ios/build-ios.ts: displayBuildError now surfaces the
"Undefined symbols for architecture …" linker block, which the error:-only
pattern filter was swallowing (so unsigned-build failures show the real symbol).