field_ios

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

commit d9b521d738d0ce7fd23a3c95a235ba047bcb0b55
parent ff66524327b7f83ba4d04a55e97c1e5016b9d84b
Author: triesap <tyson@radroots.org>
Date:   Sat, 29 Aug 2026 01:31:25 +0000

ios: harden persona settings navigation

- Require the visible Settings row to become hittable before tapping it.
- Confirm the native identity destination before reading its public key.
- Preserve ordinary Me-sheet navigation and generated identity custody.
- Compile the complete iOS test target with build-for-testing.

Diffstat:
MRadrootsUITests/RadrootsRemoteQualificationUITests.swift | 12+++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/RadrootsUITests/RadrootsRemoteQualificationUITests.swift b/RadrootsUITests/RadrootsRemoteQualificationUITests.swift @@ -662,12 +662,18 @@ final class RadrootsRemoteQualificationUITests: XCTestCase { XCTFail("Settings was unavailable through the visible Me sheet") throw QualificationError.missingProductSurface } - settings.tap() - let publicKey = app.descendants(matching: .any)[ "radroots.settings.identity.public_key" ] - XCTAssertTrue(publicKey.waitForExistence(timeout: 10)) + guard waitUntilHittable(settings, timeout: 10) else { + XCTFail("Settings did not become hittable through the visible Me sheet") + throw QualificationError.missingProductSurface + } + settings.tap() + guard publicKey.waitForExistence(timeout: 10) else { + XCTFail("Settings did not present the native identity public key") + throw QualificationError.missingProductSurface + } guard let value = publicKey.value as? String, value.range(of: "^[0-9a-f]{64}$", options: .regularExpression) != nil else {