Conversation
Replicates all 11 mobile/ screens (Home, Login, Biometric, Dashboard, Settings, Items, Gestures, API, Device, Visual, Dynamic) in plain SwiftUI with real behavior — same navigation shape, state transitions, and assertable text as the Flutter app. Every interactive/assertable view carries an accessibilityIdentifier mirroring the Flutter app's ValueKey 1:1. - Bundle id com.alphawavesystems.probeTestApp.native (distinct from the Flutter app to avoid simulator collisions). - Biometric screen uses real LocalAuthentication (Face ID/Touch ID). - Built via xcodegen + xcodebuild, same pattern as flutter-probe/native-test-apps/ios/. - Verified: xcodebuild build succeeds, app installs and launches on simulator, and a standalone XCUITest smoke suite (UITests/ProbeNativeTwinUITests.swift) confirms key accessibilityIdentifiers resolve at runtime (home, login, dashboard screens, 3/3 passing). - Not yet runnable via ProbeScript end-to-end: iOS N-2 (XCTest/ WebDriverAgent native UI bridging) is a written, unimplemented proposal in flutter-probe. probe-tests/native_suite.probe records the intended scenarios, marked pending at the top of the file.
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.
Summary
Adds
native/ios-swift/— a hand-built SwiftUI app atnative/ios-swift/that replicates all 11mobile/screens with real (not stubbed) behavior, for exercising FlutterProbe's native-UI capabilities once iOS bridging lands. Every interactive/assertable view carries an.accessibilityIdentifierthat mirrors the Flutter app'sValueKey1:1, so the same ProbeScript scenarios can eventually target either framework with only the selector syntax changing.com.alphawavesystems.probeTestApp.native(distinct from the Flutter app'scom.alphawavesystems.probeTestApp— both can coexist on one simulator).xcodegen+xcodebuild -sdk iphonesimulator ... CODE_SIGNING_ALLOWED=NO, same pattern asflutter-probe/native-test-apps/ios/.LocalAuthentication(Face ID/Touch ID) — flutter-probe drives match/no-match outcomes at the Simulator level (xcrun simctl ... notifyutil), independent of the app, so this is compatible with the existingenroll biometric/biometric match/biometric no matchverbs..gitignorefollows the sibling fixture's convention — generated.xcodeproj,build/, andSources/Info.plistare not committed.Screen-by-screen parity notes
TabView) for full control overtab_*/tab_*_iconidentifiersLAContextalways (task requirement), vs. Flutter's PROBE_AGENT-gated RPC branch — see belowWelcome, Guest), exact stat/item text incl. theitem_N→Item N+1index offsetshared_preferencesdep)SwipeToDismiss.swift) instead of native two-stepswipeActions, to match FlutterDismissible's single-continuous-swipe gesture shape.draggable/.dropDestinationfor drag-and-drop; custom long-press popup (Copy/Delete, no-op) instead of.contextMenuso the long-press-start gesture-count increment fires reliablyUIPasteboardfor clipboardDeliberate deviations
LocalAuthentication, per the task's explicit instruction — this native app has no probe-agent socket bridge to receive an RPC-delivered bool the way the Flutter app's PROBE_AGENT branch does.PROBE_AGENTis unset — a fixed delay then the happy-path result.deliver signalscenarios are out of scope until such a bridge exists (noted innative_suite.probe, commented out).N-2 status (iOS native UI bridging)
Still unimplemented.
flutter-probe/website/src/content/docs/platform/ios.md("Native UI Automation" section) confirmstap native/type native/see nativeare Android-only; iOS support via WebDriverAgent is a written, scoped proposal (docs/proposals/n2-ios-native-ui-bridging.md) not yet implemented. Since ProbeScript'stap/see/wait untilverbs against Flutter apps go through an embedded Dart agent package that doesn't exist in this plain-SwiftUI app, no ProbeScript verb can currently drive this app end-to-end — not just the native-specific ones.native/ios-swift/probe-tests/native_suite.proberecords the intended test scenarios (home nav, tabs, login success/failure, biometric match/no-match, dashboard, settings, items, gestures, API, device, visual, dynamic), clearly marked pending at the top of the file, ready to run once N-2 lands.accessibilityIdentifier ↔ ValueKey table (for Android-twin cross-check)
Identical strings throughout — every Flutter
ValueKey('x')maps to SwiftUI.accessibilityIdentifier("x"). Full set (137 identifiers) is enumerated acrossnative/ios-swift/Sources/Screens/*.swift; representative sample:tab_home,tab_tests,tab_about,welcome_text,version_text,nav_login…nav_dynamic(11 tiles),email_field,password_field,sign_in_button,error_message,sign_in_with_face_id,biometric_error_banner,welcome_banner,stat_card_1..3,item_0..9,logout_button,refresh_button,dark_mode_toggle,notifications_toggle,terms_checkbox,language_dropdown,save_button,search_field,fab_add,list_item_N,dismissible_N,drag_source,drag_target,double_tap_area,long_press_area,swipe_card,gesture_count,request_camera,request_location,request_notifications,gps_display,paste_button,pasted_text,visual_counter,increment_button,countdown,fade_widget,trigger_error,repeat_action,action_count,request_push_permission,start_payment,open_deep_link,signal_status,fetch_users_button,create_post_button,user_0..2,post_result.Test plan
xcodegen generatesucceedsxcodebuild -scheme ProbeNativeTwin -sdk iphonesimulator -configuration Debug build CODE_SIGNING_ALLOWED=NO— BUILD SUCCEEDEDxcodebuild test— 3/3 XCUITest smoke tests pass, confirmingaccessibilityIdentifiers actually resolve at runtime (home tiles/tabs, login fields/buttons, dashboard-without-auth)native_suite.proberun — blocked on N-2, not yet possible🤖 Generated with Claude Code