- Wrap the pairing action dock in a rounded glassEffect container with linear-gradient edge fades at the top and bottom of the scroll, producing the native iOS 26 Liquid Glass chrome without masking blur hacks. - Realign the welcome layout to match the shadcn cards used by the home tab: tighter 40pt hero glyph, ShadcnBadge callout, AppSectionCard step/note rows, and PrimaryActionStyle/SecondaryActionStyle buttons instead of a tint-colored glassProminent pill. - Add a VariableBlurView utility in GlassChrome.swift (adapted from nikstar/VariableBlur, MIT) for cases where a real progressive Gaussian blur is needed, and capture the chrome/blur playbook plus tsswift screenshot workflow notes in readme.knowledge.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
idp.global Swift App
Multiplatform SwiftUI passport companion for idp.global on iPhone, iPad, Mac, and Apple Watch.
Current App Behavior
- iPhone pairing starts on a welcome screen and then opens QR scanning explicitly.
- QR pairing supports a manual paste fallback when camera scanning is unavailable.
- NFC pairing and NFC identity proof attach a signed GPS position on supported iPhones.
- The app uses the live
idp.globalbackend by default for pairing, dashboard loading, approvals, and alerts. - The Apple Watch companion and widgets live in the same Xcode project and build with the main app scheme.
MockIDPServicestill exists for previews and test scaffolding, but normal runtime usesLiveIDPService.
Repo Layout
- root
package.json - root
.smartconfig.json - Swift project at
swift/IDPGlobal.xcodeproj
tsswift Setup
This repo is configured for tsswift from the repo root and expects a named global remote builder.
Install tooling:
corepack pnpm install
Configure a global remote macOS builder once:
corepack pnpm exec tsswift config -g add-builder \
--name <builder-name> \
--host <ssh-host> \
--root-dir <remote-project-root> \
--platforms macos,ios,ipad
The global builder registry lives at:
~/.git.zone/tsswift/config.json
Verify it with:
corepack pnpm exec tsswift config list-builders
corepack pnpm exec tsswift config show
Remote Builder Behavior
This project does not keep per-repo SSH details inside .smartconfig.json.
Instead, it references a named builder, and tsswift resolves that builder from the global registry in ~/.git.zone/tsswift/config.json.
How it works:
tsswiftsyncs the repo to the configured remote project root viarsyncxcodebuild,simctl, and simulator boot or launch commands execute on the remote macOS builder over SSH- the local machine only orchestrates the workflow; Apple platform builds happen on the builder
- the selected simulator is opened by the requested device identifier instead of reviving a previously used simulator
- simulator builds are pinned to the builder machine's native architecture
Prerequisites:
- working SSH access to the remote builder host
- a configured global
tsswiftbuilder entry - local permission to run
sshandrsync
Quick verification:
corepack pnpm exec tsswift config -g list-builders
corepack pnpm swift:doctor
swift:doctor should report the resolved remote builder and remote project root.
This repo's .smartconfig.json already points at that builder by name:
"remoteBuilder": {
"name": "<builder-name>"
}
Current project defaults:
- default scheme:
IDPGlobal - default configuration:
Debug - default run platform:
macos - build platforms:
macos,ios,ipad - test platform:
macos - preferred iPhone and iPad simulators are configured in
.smartconfig.json - derived data path:
swift/.build/xcode-derived-data
tsswift pins simulator builds to the builder machine's native architecture and opens the selected simulator device directly instead of reviving a previously used iPhone.
Common Commands
From the repo root:
corepack pnpm swift:doctor
corepack pnpm swift:emulators
corepack pnpm swift:build
corepack pnpm swift:build:macos
corepack pnpm run swift:build -- --platform ios
corepack pnpm run swift:build -- --platform ipad
corepack pnpm swift:test
corepack pnpm run swift:run -- --platform ios
corepack pnpm run swift:run -- --platform ipad
corepack pnpm swift:watch
Notes:
swift:buildbuilds the configured macOS, iPhone, and iPad matrix.swift:testruns the macOS test target.swift:runwithout extra flags follows the configured default platform, which is currentlymacos.swift:run -- --platform iosboots the configured remote iPhone simulator, installs the app, and launches it.swift:run -- --platform ipaddoes the same for the configured remote iPad simulator.
Direct Xcode Use
If you are working directly on a Mac instead of through tsswift, open:
swift/IDPGlobal.xcodeproj
Useful targets and schemes:
IDPGlobalfor the main appIDPGlobalWatchfor the watch appIDPGlobalWidgetsfor widgets
Pairing Notes
- Start a fresh pairing flow from the
idp.globalweb session you want to trust. - Scan the QR shown by that web flow, or paste the pairing link manually if camera access is unavailable.
- NFC flows are for supported iPhone hardware and include signed location evidence.