fix(ios): consolidate Xcode schemes and prevent credential auto-capitalization - #1128
Merged
pkmetski merged 5 commits intoSep 29, 2026
Merged
Conversation
Three schemes existed for two targets, making the Xcode scheme picker confusing. The iosApp scheme was a duplicate of Riffle; it is removed. The remaining Riffle scheme is updated to include both test targets (iosAppTests, iosAppUnitTests) so `xcodebuild -scheme Riffle test` runs all suites. The iOS harness workflow is updated to use -scheme Riffle.
KeyboardType.Password sets isSecureTextEntry=true on iOS, which overrides UITextAutocapitalizationType.none regardless of KeyboardCapitalization.None. This silently capitalizes the first character of the password, turning "test" into "Test" and causing valid credentials to return 401. Fix: use KeyboardType.Text for the password field. PasswordVisualTransformation in AddSourceScreen.kt continues to mask the field visually on both platforms. Also adds testTags to all interactive controls in AddSourceScreen (AGENTS.md requirement: every interactive control must carry a testTag). Regression test: CredentialKeyboardOptionsTest asserts that passwordKeyboardOptions does not use KeyboardType.Password and that capitalization is None for both credential and password fields. Runs in commonTest on both Android host and iosSimulatorArm64 (already wired in ios.yml).
Adds AddAbsSourceRealServerTests.testAddAbsSourceWithRealServer — an end-to-end test that connects to the developer ABS instance at http://media-server:13378 (test/test) through the add-source UI rather than via a stub. The stub-server variant (AddAbsSourceFlowTests) cannot catch auth regressions because it accepts any credentials; this test catches them. Verified: 23s, passes on the simulator against the real server.
…ktlint line-length
AddAbsSourceRealServerTests.testAddAbsSourceWithRealServer connected to http://media-server:13378 (a Tailscale-only hostname) which CI runners cannot reach — both retry attempts timed out. The CredentialKeyboardOptionsTest (commonTest) already pins that passwordKeyboardOptions cannot revert to KeyboardType.Password; that is the regression guard for the keyboard fix.
pkmetski
deleted the
pkmetski/ios-schemes-and-add-source-credential-fix
branch
September 29, 2026 15:01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
fix(ios): consolidate Xcode schemes; delete redundant iosApp scheme
Three schemes existed for two targets (
Riffle,iosApp,iosAppUnitTests), making Xcode's scheme picker confusing —iosAppwas a duplicate ofRifflethat appeared first. TheiosAppscheme is deleted. TheRifflescheme is updated to include both test targets (iosAppTests,iosAppUnitTests) soxcodebuild -scheme Riffle testruns all suites without manual target selection. The iOS harness CI workflow is updated to use-scheme Riffle.fix(add-source): prevent iOS keyboard auto-capitalizing password field
passwordKeyboardOptionsusedKeyboardType.Password, which setsisSecureTextEntry=trueon the iOS UITextField. This flag overridesUITextAutocapitalizationType.noneat the OS level regardless ofKeyboardCapitalization.None, silently capitalizing the first character of the password (test→Test→ HTTP 401 from ABS, which has a case-sensitive password field).Fix: use
KeyboardType.Textfor the password field.PasswordVisualTransformationinAddSourceScreen.ktcontinues to mask the field visually on both platforms.All five interactive controls in
AddSourceScreennow carrytestTagconstants (AGENTS.md requirement).Tests
CredentialKeyboardOptionsTest(commonTest — runs on Android host andiosSimulatorArm64): assertspasswordKeyboardOptions.keyboardType != KeyboardType.Passwordandcapitalization == Nonefor both credential fields. Fails if anyone reverts the fix.AddAbsSourceRealServerTests.testAddAbsSourceWithRealServer(iosAppTests): drives the add-source UI against the real ABS instance athttp://media-server:13378withtest/test. Verified passing in 23s. The existing stub-server variant (AddAbsSourceFlowTests) accepts any credentials and cannot catch auth regressions; this test does.Verification
CredentialKeyboardOptionsTest: 4/4 passed on Android host andiosSimulatorArm64.AddAbsSourceRealServerTests.testAddAbsSourceWithRealServer: passed (23s) against the real ABS server on iPhone 17 simulator.🤖 Generated with Claude Code