The Access service token plus API token pair was three values to enter and Access in front of both. The player, the badge and CarPlay now send the ipx API token alone to https://ipxapi.sdf1.net: a route of the rays-unraid tunnel to the same ipx-web, with no Access application, held to the paths the app uses by a custom firewall rule on the sdf1.net zone (403 for anything without a bearer header or off the list: the page, the login form, /api/login, ?token= sign-in, the admin API). docs/sso.md says so, since it also says not to bypass Access for /api/*; this is that warning's narrow version, and the rule is on Cloudflare, not here. The unread badge (#421) shows All Subscriptions' count, as the page's badge does: set when the app comes forward, after an item is read, and by a background refresh iOS runs now and then. The test target had no Info.plist and could never have run; it does now. Build 4. Not yet run on a phone with the token set. Co-Authored-By: Claude Sonnet 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: "4"
|
|
# 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
|