The sleep timer pauses after 5 minutes to an hour, fading out over the
last ten seconds. In the iOS app the phone's player keeps the time:
with the screen locked the web view is frozen, and a timer in the page
would not fire until the app was opened again. A browser plays on in a
background tab, so there the page keeps it.
The app says at ready what it does itself ({t:"host", can}), so a page
deployed ahead of the app falls back to its own timer and shows no
AirPlay button an older app would ignore. This deploy order problem
came up with #425.
AirPlay opens AVRoutePickerView by pressing its button from code; there
is no API to present it. On iOS 27 the picker opens on the button's
primary action, not touch-up, so that is what is sent, with touch-up
for versions that have nothing on it. The simulator has no AirPlay
devices and never showed the picker, so this is unverified until it
runs on a phone.
On a phone the player's one line left the title two letters wide once
the two controls were added, so the title takes the top line and the
controls flank play below it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
79 lines
2.5 KiB
YAML
79 lines
2.5 KiB
YAML
# XcodeGen makes the .xcodeproj from this, so the project is something a diff can show rather
|
|
# than a pbxproj nobody reviews. On a Mac:
|
|
#
|
|
# brew install xcodegen && cd ios && xcodegen generate && open iPX.xcodeproj
|
|
name: iPX
|
|
options:
|
|
bundleIdPrefix: net.sdf1
|
|
deploymentTarget:
|
|
iOS: "17.0"
|
|
createIntermediateGroups: true
|
|
settings:
|
|
base:
|
|
SWIFT_VERSION: "5.9"
|
|
TARGETED_DEVICE_FAMILY: "1,2"
|
|
CODE_SIGN_STYLE: Automatic
|
|
targets:
|
|
iPX:
|
|
type: application
|
|
platform: iOS
|
|
sources:
|
|
- Sources
|
|
- Resources/Assets.xcassets
|
|
info:
|
|
path: Resources/Info.plist
|
|
properties:
|
|
CFBundleDisplayName: iPX
|
|
CFBundleShortVersionString: $(MARKETING_VERSION)
|
|
CFBundleVersion: "7"
|
|
# Playing on with the screen locked. A plist key, not a signed entitlement, so it works on
|
|
# a free personal team; CarPlay's own dashboard app is an entitlement Apple has to grant.
|
|
UIBackgroundModes: [audio, fetch]
|
|
# The unread badge's refresh while the app is closed (#421).
|
|
BGTaskSchedulerPermittedIdentifiers: [net.sdf1.ipx.refresh]
|
|
# HTTPS only, so TestFlight need not ask the export-compliance question on every build.
|
|
ITSAppUsesNonExemptEncryption: false
|
|
UILaunchScreen: {}
|
|
UIApplicationSceneManifest:
|
|
UIApplicationSupportsMultipleScenes: false
|
|
UISceneConfigurations:
|
|
UIWindowSceneSessionRoleApplication:
|
|
- UISceneConfigurationName: Default Configuration
|
|
UISceneDelegateClassName: $(PRODUCT_MODULE_NAME).SceneDelegate
|
|
UISupportedInterfaceOrientations:
|
|
- UIInterfaceOrientationPortrait
|
|
- UIInterfaceOrientationPortraitUpsideDown
|
|
- UIInterfaceOrientationLandscapeLeft
|
|
- UIInterfaceOrientationLandscapeRight
|
|
# Plain HTTP only for a server on your own network (192.168.1.130:8099); the tunnel is HTTPS.
|
|
NSAppTransportSecurity:
|
|
NSAllowsLocalNetworking: true
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: net.sdf1.ipx
|
|
MARKETING_VERSION: "0.1.0"
|
|
DEVELOPMENT_TEAM: 8743L8D729
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
|
|
iPXTests:
|
|
type: bundle.unit-test
|
|
platform: iOS
|
|
sources:
|
|
- Tests
|
|
dependencies:
|
|
- target: iPX
|
|
settings:
|
|
base:
|
|
PRODUCT_BUNDLE_IDENTIFIER: net.sdf1.ipx.tests
|
|
GENERATE_INFOPLIST_FILE: YES
|
|
|
|
schemes:
|
|
iPX:
|
|
build:
|
|
targets:
|
|
iPX: all
|
|
iPXTests: [test]
|
|
test:
|
|
targets:
|
|
- iPXTests
|