Files
Felitendo 08012551eb feat: split the admin console out of the manager into its own app
The web/ dashboard used to ride along inside FTStore Manager as a second
tab, hidden behind a developer-mode switch. Hiding was the wrong tool:
the Manager is what a normal user installs to get FTStore onto a phone,
and the worker controls were one gesture away from it.

FTStore Admin (admin/, app.ftstore.admin) is now its own app:

- admin/FTStoreAdmin/Console/* is the moved console, unchanged in
  behaviour — ManagerConfig became AdminConfig, ManagerHomeView.brand
  became AdminTheme.brand.
- It links no Swift package at all, only system frameworks. The three
  helpers it borrowed from NimbleKit and the engine (User-Agent, share
  sheet, image resize, AnyCodable) are inlined in Support/, so the IPA
  stays what it claims to be: a login form and nothing else.
- Its Keychain service is app.ftstore.admin and its User-Agent is
  FTStore-Admin/…, deliberately outside web/'s APP_UA gate — the console
  only calls session-authenticated routes.
- The optional biometric gate now re-arms whenever the app leaves the
  screen, not just at launch.
- Sideloaded on purpose: admin-release.yml cuts a draft release from an
  admin-v* tag and admin-build.yml compiles every push, but there is no
  AltStore source and no self-update channel.

The Manager loses the console, the developer-mode gate and therefore the
tab bar — FTStoreManagerApp shows ManagerHomeView directly. Its camera
and Face ID usage strings go with it, and ManagerLegacyConsole.purge()
wipes the session an updated install would otherwise still be holding.
2026-08-04 08:53:22 +02:00

79 lines
2.9 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1620"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57AD10000000000000000005"
BuildableName = "FTStoreAdmin.app"
BlueprintName = "FTStoreAdmin"
ReferencedContainer = "container:FTStoreAdmin.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</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 = "57AD10000000000000000005"
BuildableName = "FTStoreAdmin.app"
BlueprintName = "FTStoreAdmin"
ReferencedContainer = "container:FTStoreAdmin.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57AD10000000000000000005"
BuildableName = "FTStoreAdmin.app"
BlueprintName = "FTStoreAdmin"
ReferencedContainer = "container:FTStoreAdmin.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>