tv-anarchy/project.yml
Natalie f0669f1ca8 feat(ios): TVAnarchyiOS app target + UI tests
(cherry picked from commit 7f8f4b0dd92358ba687f8230a922d8f316cb06e9)
2026-06-09 05:50:26 -07:00

141 lines
5.3 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
settings:
base:
SWIFT_VERSION: "5.0" # Swift 6.2 compiler, language mode 5 (relaxed concurrency)
MACOSX_DEPLOYMENT_TARGET: "14.0"
MARKETING_VERSION: "1.1.0" # human version — bump here on a feature milestone.
# The build number (CFBundleVersion) + git SHA + build
# time are stamped onto the built Info.plist by the app
# target's always-run "Stamp version" phase below.
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)
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: local.lilith.TVAnarchyCore
GENERATE_INFOPLIST_FILE: "YES"
TVAnarchy:
type: application
platform: macOS
sources: [Sources/TVAnarchy]
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). `$(MARKETING_VERSION)` resolves at build time.
CFBundleShortVersionString: "$(MARKETING_VERSION)"
LSMinimumSystemVersion: "14.0"
LSApplicationCategoryType: public.app-category.video
NSAppTransportSecurity:
NSAllowsLocalNetworking: true # talk to VLC on 127.0.0.1 over http
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
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.
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"
CODE_SIGNING_ALLOWED: "NO"
CODE_SIGNING_REQUIRED: "NO"
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