field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | LICENSE

commit 2d120b23e4004995ba48a81dca90fde1d66f8a76
parent ef2fb7e6f3f70be6530edfbe4d172f404914dc66
Author: triesap <tyson@radroots.org>
Date:   Sat, 13 Jun 2026 15:21:56 -0700

ui: align identity setup copy

- rename stored-identity setup affordances around on-device unlock behavior
- make settings status rows describe saved versus runtime identity state
- replace sign-out copy with lock semantics while preserving the stable action id
- rename destructive reset copy to identity deletion without exposing raw secrets

Diffstat:
MRadroots/Views/SettingsView.swift | 14+++++++-------
MRadroots/Views/SetupView.swift | 8++++----
2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/Radroots/Views/SettingsView.swift b/Radroots/Views/SettingsView.swift @@ -16,8 +16,8 @@ struct SettingsView: View { Text("No local Nostr identity is selected.") .foregroundStyle(.secondary) } - LabeledContent("Stored identities", value: app.storedIdentityAvailable ? "1" : "0") - LabeledContent("Runtime identity", value: app.runtimeIdentityReady ? "Ready" : "Locked") + LabeledContent("Saved identity", value: app.storedIdentityAvailable ? "Available" : "Missing") + LabeledContent("Runtime identity", value: app.runtimeIdentityReady ? "Unlocked" : "Locked") NavigationLink { ProfileView() @@ -58,14 +58,14 @@ struct SettingsView: View { Button { app.signOut() } label: { - Label("Sign Out", systemImage: "lock.fill") + Label("Lock Identity", systemImage: "lock.fill") } .accessibilityIdentifier("field_ios.settings.sign_out") Button(role: .destructive) { showResetConfirmation = true } label: { - Label("Reset Local Identity", systemImage: "trash") + Label("Delete Identity", systemImage: "trash") } .accessibilityIdentifier("field_ios.settings.reset_identity") } footer: { @@ -78,16 +78,16 @@ struct SettingsView: View { .listStyle(.insetGrouped) .inlineNavigationTitle("Settings") .confirmationDialog( - "Reset local Nostr identity?", + "Delete saved Nostr identity?", isPresented: $showResetConfirmation, titleVisibility: .visible ) { - Button("Reset Identity", role: .destructive) { + Button("Delete Identity", role: .destructive) { resetIdentity() } Button("Cancel", role: .cancel) {} } message: { - Text("This removes the local identity from this app. Sign out keeps it.") + Text("This removes the identity saved on this iPhone. Lock keeps it available.") } .accessibilityIdentifier("field_ios.settings") } diff --git a/Radroots/Views/SetupView.swift b/Radroots/Views/SetupView.swift @@ -22,7 +22,7 @@ struct SetupView: View { .frame(width: 112, height: 112) VStack(spacing: 8) { - Text(app.hasKey ? "Local identity ready" : "Create a Nostr identity") + Text(app.hasKey ? "Identity saved on this iPhone" : "Create a Nostr identity") .font(.title.weight(.semibold)) .multilineTextAlignment(.center) @@ -33,7 +33,7 @@ struct SetupView: View { .multilineTextAlignment(.center) .textSelection(.enabled) } else { - Text("Radroots uses your local Nostr identity to publish and read field events.") + Text("Radroots uses a local Nostr identity to publish and read field events.") .font(.subheadline) .foregroundStyle(.secondary) .multilineTextAlignment(.center) @@ -51,7 +51,7 @@ struct SetupView: View { Button { continueWithIdentity() } label: { - Label("Continue", systemImage: "arrow.right.circle.fill") + Label("Unlock Identity", systemImage: "lock.open.fill") .frame(maxWidth: .infinity) } .buttonStyle(.borderedProminent) @@ -98,7 +98,7 @@ struct SetupView: View { Button { importIdentity() } label: { - Label("Use Secret Key", systemImage: "checkmark.circle.fill") + Label("Import Identity", systemImage: "checkmark.circle.fill") .frame(maxWidth: .infinity) } .buttonStyle(.borderedProminent)