Files
L'électron rare 3babe2b3ab feat(apps): zacus-hub SwiftUI hub (macOS + iOS)
New multiplatform SwiftUI app under apps/zacus-hub/ generated via
XcodeGen (project.yml). Three modes share a HubSession actor that
talks to tools/zacus-gateway over Tailscale-only HTTP/WS.

Game-master: live state stream (WebSocket /v1/state/ws), backend
health badges, hint trigger, journal.

Companion: push-to-talk via AVAudioRecorder (M4A AAC 16 kHz),
fallback file picker, hint request, transcript via voice-bridge
proxy.

Studio: YAML editor with validate/save (existing /v1/studio
routes), plus a Scratch tab hosting a Blockly + zelos-renderer
workspace in WKWebView. 38 custom Zacus block types across 10
categories (Scènes, NPC, Audio, LCD, Hardware ESP32, ESP-NOW,
BOX-3, M5, PLIP, Logique), .sb3 export/import via JSZip (procedure
calls + embedded YAML for lossless round-trip), Flasher sheet that
calls /v1/flash/{board} with auto/hot/cold strategies and shows
per-board step results including the cold-flash idf.py command.

ATS exception domains cover the Tailscale CGNAT range plus the
electron-server / studio / macm1 hostnames so the WebView and
URLSession can hit plain HTTP on the tailnet without TLS.

Token stays in the Keychain (cc.saillant.zacus.hub) — never
committed to source.
2026-05-24 10:51:26 +02:00

67 lines
2.2 KiB
YAML

name: ZacusHub
options:
bundleIdPrefix: cc.saillant.zacus
deploymentTarget:
iOS: "17.0"
macOS: "14.0"
createIntermediateGroups: true
settings:
base:
SWIFT_VERSION: "5.10"
MARKETING_VERSION: "0.1.0"
CURRENT_PROJECT_VERSION: "1"
DEVELOPMENT_TEAM: "JRLQM7V3V5"
CODE_SIGN_STYLE: Automatic
SWIFT_STRICT_CONCURRENCY: complete
targets:
ZacusHub:
type: application
supportedDestinations: [iOS, macOS, iPadOS]
sources:
- path: Sources
- path: Resources/blockly
type: folder
buildPhase: resources
info:
path: Resources/Info.plist
properties:
CFBundleDisplayName: Zacus Hub
ITSAppUsesNonExemptEncryption: false
NSMicrophoneUsageDescription: Push-to-talk avec Zacus dans le mode Companion.
NSCameraUsageDescription: Scanner les QR codes du jeu.
NSLocalNetworkUsageDescription: Communication avec le gateway Zacus sur le tailnet.
NSAppTransportSecurity:
NSAllowsArbitraryLoads: true
NSExceptionDomains:
"100.78.191.52":
NSExceptionAllowsInsecureHTTPLoads: true
NSTemporaryExceptionAllowsInsecureHTTPLoads: true
NSExceptionMinimumTLSVersion: TLSv1.0
"100.116.92.12":
NSExceptionAllowsInsecureHTTPLoads: true
NSTemporaryExceptionAllowsInsecureHTTPLoads: true
"100.112.121.126":
NSExceptionAllowsInsecureHTTPLoads: true
NSTemporaryExceptionAllowsInsecureHTTPLoads: true
electron-server:
NSExceptionAllowsInsecureHTTPLoads: true
NSIncludesSubdomains: true
macm1:
NSExceptionAllowsInsecureHTTPLoads: true
studio:
NSExceptionAllowsInsecureHTTPLoads: true
entitlements:
path: Resources/ZacusHub.entitlements
properties:
com.apple.security.app-sandbox: true
com.apple.security.network.client: true
com.apple.security.device.audio-input: true
com.apple.security.device.camera: true
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: cc.saillant.zacus.hub
GENERATE_INFOPLIST_FILE: NO
ENABLE_PREVIEWS: YES