mirror of
https://github.com/saphid/frame-control.git
synced 2026-10-06 01:00:18 +02:00
An iPhone can't run Python or ssh, but the Frame can. The app (ios/, SwiftUI) connects with its own SSH key (Citadel), copies the server and helpers to ~/.cache/frame-control/<version> on the Frame once per version, starts ui/server.py there with FRAME_LOCAL=1 on the Frame's 127.0.0.1, and shows the page through an SSH tunnel. The server exits when the phone disconnects. Server: FRAME_LOCAL=1 puts ui/local-bin on PATH, whose ssh stand-in runs each `ssh frame COMMAND` locally (and serves as rsync's transport), so desktop and phone share one code path. Android display goes through podman exec there, as the Frame has no adb. FRAME_UI_KEY replaces the fixed X-Frame-UI value with a per-session key. Power actions take the Developer Mode password via sudo -S. --port 0 now prints the port it took. Page: a bottom tab bar and safe areas on phones, Play buttons visible on touch screens, saving through the share sheet, SSH/SFTP/Steam Link/remote desktop opening in their iOS apps, and a password dialog for power. App: pairing with the Developer Mode password once (never stored) or with a key the user adds; host key pinned on first use; plain-language connection errors with quiet retries; frame-control://install links; alerts and confirms. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
117 lines
4.4 KiB
XML
117 lines
4.4 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<Scheme
|
|
LastUpgradeVersion = "1430"
|
|
version = "1.7">
|
|
<BuildAction
|
|
parallelizeBuildables = "YES"
|
|
buildImplicitDependencies = "YES"
|
|
runPostActionsOnFailure = "NO">
|
|
<BuildActionEntries>
|
|
<BuildActionEntry
|
|
buildForTesting = "YES"
|
|
buildForRunning = "YES"
|
|
buildForProfiling = "YES"
|
|
buildForArchiving = "YES"
|
|
buildForAnalyzing = "YES">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "1015B8BE90EB02C2062752A1"
|
|
BuildableName = "FrameControl.app"
|
|
BlueprintName = "FrameControl"
|
|
ReferencedContainer = "container:FrameControl.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildActionEntry>
|
|
<BuildActionEntry
|
|
buildForTesting = "YES"
|
|
buildForRunning = "NO"
|
|
buildForProfiling = "NO"
|
|
buildForArchiving = "NO"
|
|
buildForAnalyzing = "NO">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "88565F33E966FD0BAC7AC9C8"
|
|
BuildableName = "FrameControlTests.xctest"
|
|
BlueprintName = "FrameControlTests"
|
|
ReferencedContainer = "container:FrameControl.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildActionEntry>
|
|
</BuildActionEntries>
|
|
</BuildAction>
|
|
<TestAction
|
|
buildConfiguration = "Debug"
|
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
onlyGenerateCoverageForSpecifiedTargets = "NO">
|
|
<MacroExpansion>
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "1015B8BE90EB02C2062752A1"
|
|
BuildableName = "FrameControl.app"
|
|
BlueprintName = "FrameControl"
|
|
ReferencedContainer = "container:FrameControl.xcodeproj">
|
|
</BuildableReference>
|
|
</MacroExpansion>
|
|
<Testables>
|
|
<TestableReference
|
|
skipped = "NO"
|
|
parallelizable = "NO">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "88565F33E966FD0BAC7AC9C8"
|
|
BuildableName = "FrameControlTests.xctest"
|
|
BlueprintName = "FrameControlTests"
|
|
ReferencedContainer = "container:FrameControl.xcodeproj">
|
|
</BuildableReference>
|
|
</TestableReference>
|
|
</Testables>
|
|
<CommandLineArguments>
|
|
</CommandLineArguments>
|
|
</TestAction>
|
|
<LaunchAction
|
|
buildConfiguration = "Debug"
|
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
launchStyle = "0"
|
|
useCustomWorkingDirectory = "NO"
|
|
ignoresPersistentStateOnLaunch = "NO"
|
|
debugDocumentVersioning = "YES"
|
|
debugServiceExtension = "internal"
|
|
allowLocationSimulation = "YES">
|
|
<BuildableProductRunnable
|
|
runnableDebuggingMode = "0">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "1015B8BE90EB02C2062752A1"
|
|
BuildableName = "FrameControl.app"
|
|
BlueprintName = "FrameControl"
|
|
ReferencedContainer = "container:FrameControl.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildableProductRunnable>
|
|
</LaunchAction>
|
|
<ProfileAction
|
|
buildConfiguration = "Release"
|
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
savedToolIdentifier = ""
|
|
useCustomWorkingDirectory = "NO"
|
|
debugDocumentVersioning = "YES">
|
|
<BuildableProductRunnable
|
|
runnableDebuggingMode = "0">
|
|
<BuildableReference
|
|
BuildableIdentifier = "primary"
|
|
BlueprintIdentifier = "1015B8BE90EB02C2062752A1"
|
|
BuildableName = "FrameControl.app"
|
|
BlueprintName = "FrameControl"
|
|
ReferencedContainer = "container:FrameControl.xcodeproj">
|
|
</BuildableReference>
|
|
</BuildableProductRunnable>
|
|
</ProfileAction>
|
|
<AnalyzeAction
|
|
buildConfiguration = "Debug">
|
|
</AnalyzeAction>
|
|
<ArchiveAction
|
|
buildConfiguration = "Release"
|
|
revealArchiveInOrganizer = "YES">
|
|
</ArchiveAction>
|
|
</Scheme>
|