tv-anarchy/project.yml
Natalie 4a2ceb9781 feat(offline): inline star-to-keep and trash-to-cull on cache rows
Surface the existing pin (keep-from-cull) and per-file delete actions as
visible inline buttons on each offline cache row instead of context-menu-only:
a star toggles protection from auto-cull (and restore-if-missing), a trash
culls that file early. Aligns wording/icons to the star metaphor.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:12:41 -04:00

170 lines
6.7 KiB
YAML

name: TVAnarchy
options:
bundleIdPrefix: local.lilith
createIntermediateGroups: true
deploymentTarget:
macOS: "14.0"
iOS: "17.0"
packages:
VLCKit:
url: https://github.com/tylerjonesio/vlckit-spm
exactVersion: 3.6.0
# Reuse the shared Lilith dark-first design system (dependency-free tokens).
# Absolute path: stable from both this worktree and main on this machine.
LilithDesignTokens:
path: /Users/natalie/Code/@packages/@swift/@ui/tokens
configs:
Debug: debug
Release: release
configFiles:
Debug: Config/BuildVersion.xcconfig
Release: Config/BuildVersion.xcconfig
settings:
base:
SWIFT_VERSION: "5.0" # Swift 6.2 compiler, language mode 5 (relaxed concurrency)
MACOSX_DEPLOYMENT_TARGET: "14.0"
# Compile-time opt-in for the built-in adult feature. Present here → the
# Adult tab, the native PornService, and the adult browse/gating surfaces are
# compiled in. Drop this flag (or build a target without it) for a clean
# build with no adult surfaces at all — the defensive bits that keep porn OUT
# of the Home/queue (`isAdult`, QueueStore stripping, the default category
# exclude) stay unconditional, so a flag-off build never leaks adult content;
# it simply offers no way to browse it. Applies to all targets.
SWIFT_ACTIVE_COMPILATION_CONDITIONS: ENABLE_ADULT
# MARKETING_VERSION + CURRENT_PROJECT_VERSION come from Config/BuildVersion.xcconfig
# (generated by tools/stamp-build.sh before each build). Semver auto-bumps patch from
# the latest vX.Y.Z git tag + commits since; cut releases with tools/release.sh [vX.Y.Z].
CODE_SIGNING_ALLOWED: "NO" # local dev, unsigned
CODE_SIGNING_REQUIRED: "NO"
ENABLE_HARDENED_RUNTIME: "NO" # needs Process/ssh + localhost+overlay network, no sandbox
targets:
TVAnarchyCore:
type: framework
platform: macOS
sources: [Sources/TVAnarchyCore]
dependencies:
- sdk: MediaPlayer.framework # system transport + Now Playing (NowPlayingController)
- sdk: Security.framework # Keychain for VPN provider logins (VPNCredentialStore)
- sdk: CoreAudio.framework # HDMI audio routing for local VLC playback
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: local.lilith.TVAnarchyCore
GENERATE_INFOPLIST_FILE: "YES"
TVAnarchy:
type: application
platform: macOS
sources:
- path: Sources/TVAnarchy
excludes:
- Resources/**
- path: Sources/TVAnarchy/Resources/base-2.91.wsz
buildPhase: resources
dependencies:
- target: TVAnarchyCore
info:
path: Sources/TVAnarchy/Info.plist
properties:
CFBundleDisplayName: TVAnarchy
# XcodeGen regenerates this Info.plist from these properties on every
# `xcodegen generate`, so the version MUST live here (a hand-edit to the
# plist gets clobbered). Version vars come from Config/BuildVersion.xcconfig.
CFBundleShortVersionString: "$(MARKETING_VERSION)"
CFBundleVersion: "$(CURRENT_PROJECT_VERSION)"
LSMinimumSystemVersion: "14.0"
LSApplicationCategoryType: public.app-category.video
NSAppTransportSecurity:
NSAllowsLocalNetworking: true # talk to VLC on 127.0.0.1 over http
NSCameraUsageDescription: Scan a fleet-join QR code with this Mac's camera.
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: local.lilith.TVAnarchy
GENERATE_INFOPLIST_FILE: "NO"
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon # Sources/TVAnarchy/Assets.xcassets
# The human version (CFBundleShortVersionString) comes from MARKETING_VERSION
# via info.properties above — reliable. The dynamic git SHA / build time live
# in a generated Swift constant (Sources/TVAnarchyCore/BuildStamp.swift,
# gitignored) written by tools/stamp-build.sh, which build-install.sh runs
# BEFORE `xcodegen generate`. A compiled constant can't be lost the way a
# post-build Info.plist edit was (TARGET_BUILD_DIR there pointed at an
# intermediate, so the stamp never reached the copied app plist).
TVAnarchyiOS:
type: application
platform: iOS
sources: [Sources/TVAnarchyiOS]
dependencies:
- package: VLCKit
product: VLCKitSPM # SPM product; the iOS slice's module is `MobileVLCKit`
- package: LilithDesignTokens
product: LilithDesignTokens
info:
path: Sources/TVAnarchyiOS/Info.plist
properties:
CFBundleDisplayName: TVAnarchy
CFBundleShortVersionString: "$(MARKETING_VERSION)"
CFBundleVersion: "$(CURRENT_PROJECT_VERSION)"
UILaunchScreen: {}
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
# The bridge is plain HTTP over localhost (plum) / the WireGuard mesh
# (black) — never the open internet — so arbitrary loads are allowed.
NSAppTransportSecurity:
NSAllowsArbitraryLoads: true
NSLocalNetworkUsageDescription: Connect to your media bridge on the local network.
NSCameraUsageDescription: Scan the fleet setup QR shown by your Mac.
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: local.lilith.TVAnarchyiOS
GENERATE_INFOPLIST_FILE: "NO"
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
TARGETED_DEVICE_FAMILY: "1,2"
IPHONEOS_DEPLOYMENT_TARGET: "17.0"
# Unlike the macOS targets (unsigned local dev), the iOS app installs on
# a physical iPhone, which requires a real signing identity.
CODE_SIGNING_ALLOWED: "YES"
CODE_SIGNING_REQUIRED: "YES"
CODE_SIGN_STYLE: Automatic
CODE_SIGN_IDENTITY: "Apple Development"
DEVELOPMENT_TEAM: 8SX7UH9HF4
TVAnarchyiOSUITests:
type: bundle.ui-testing
platform: iOS
sources: [Tests/TVAnarchyiOSUITests]
dependencies:
- target: TVAnarchyiOS
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: local.lilith.TVAnarchyiOSUITests
GENERATE_INFOPLIST_FILE: "YES"
TEST_TARGET_NAME: TVAnarchyiOS
IPHONEOS_DEPLOYMENT_TARGET: "17.0"
CODE_SIGNING_ALLOWED: "NO"
CODE_SIGNING_REQUIRED: "NO"
TVAnarchyCoreTests:
type: bundle.unit-test
platform: macOS
sources: [Tests/TVAnarchyCoreTests]
dependencies:
- target: TVAnarchyCore
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: local.lilith.TVAnarchyCoreTests
GENERATE_INFOPLIST_FILE: "YES"
schemes:
TVAnarchy:
build:
targets:
TVAnarchy: all
test:
targets:
- TVAnarchyCoreTests
gatherCoverageData: false
TVAnarchyiOS:
build:
targets:
TVAnarchyiOS: all
test:
targets:
- TVAnarchyiOSUITests
gatherCoverageData: false