Add iPhone target with shared data layer and persistent cache

Two-target restructure: shared sources (models, services, settings,
extensions, team logos) move into Shared/, consumed by both the
existing macOS menu bar app and a new iOS app. MainService no longer
imports AppKit — platform code attaches via a MainServiceObserver
protocol (MacObserverAdapter wires back to MenuManager / StatusItemManager
/ NotificationManager).

iPhone app is a single SwiftUI page mirroring the macOS menu (playoff
round + yesterday/today/tomorrow), with a gear-icon settings sheet
(display option + IndieAbout for license/changelog). Persistent JSON
snapshot in Application Support paints last-known data on cold launch;
"Updated …" header escalates secondary → orange (>5min) → red (>30min)
so staleness is visually unmistakable. Foreground polling, scenePhase
refresh, and pull-to-refresh; no notifications on iOS in v1.
This commit is contained in:
2026-04-25 06:34:36 -04:00
parent 18c4ef64d6
commit aaffa3771c
70 changed files with 1011 additions and 65 deletions
+52 -2
View File
@@ -3,6 +3,7 @@ options:
bundleIdPrefix: dev.rzen.indie
deploymentTarget:
macOS: "13.0"
iOS: "17.0"
xcodeVersion: "16.0"
generateEmptyDirectories: true
@@ -16,12 +17,13 @@ targets:
type: application
platform: macOS
sources:
- path: IceGlass
- path: Shared
excludes:
- Resources/TeamLogos
- path: IceGlass/Resources/TeamLogos
- path: Shared/Resources/TeamLogos
type: folder
buildPhase: resources
- path: IceGlass
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: dev.rzen.indie.IceGlass
@@ -57,6 +59,45 @@ targets:
com.apple.security.app-sandbox: true
com.apple.security.network.client: true
IceGlass-iOS:
type: application
platform: iOS
sources:
- path: Shared
excludes:
- Resources/TeamLogos
- path: Shared/Resources/TeamLogos
type: folder
buildPhase: resources
- path: IceGlass-iOS
excludes:
- Resources
- path: LICENSE.md
buildPhase: resources
- path: CHANGELOG.md
buildPhase: resources
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: dev.rzen.indie.IceGlass.iOS
MARKETING_VERSION: "1.0.0"
CURRENT_PROJECT_VERSION: "1"
INFOPLIST_FILE: IceGlass-iOS/Info.plist
DEVELOPMENT_TEAM: C32Z8JNLG6
SWIFT_VERSION: "6.0"
IPHONEOS_DEPLOYMENT_TARGET: "17.0"
TARGETED_DEVICE_FAMILY: "1"
PRODUCT_NAME: IceGlass
SWIFT_STRICT_CONCURRENCY: complete
ENABLE_USER_SCRIPT_SANDBOXING: false
GENERATE_INFOPLIST_FILE: false
configs:
Debug:
SWIFT_ACTIVE_COMPILATION_CONDITIONS: DEBUG
Release:
SWIFT_OPTIMIZATION_LEVEL: -O
dependencies:
- package: IndieAbout
schemes:
IceGlass:
build:
@@ -66,3 +107,12 @@ schemes:
config: Debug
archive:
config: Release
IceGlass-iOS:
build:
targets:
IceGlass-iOS: all
run:
config: Debug
archive:
config: Release