Skip to the content.

Release notes — iInteract 3.4.0 (iOS) + matching 3.4.1 (Android)

Release-notes copy for the App Store Connect “What’s New in This Version” field. iOS marketing version 3.4.0; the build-14 increment bundles a 3-way settings parity cleanup with the matching Android 3.4.1 release.

iOS version: 3.4.0, build 15 (branch ios_gesture). Android version: 3.4.1, build 26 (same branch — cross-platform parity pass; flutter_app/ diff is no longer empty for this release). Build 15 ships the Mac Catalyst dedicated Settings window (Phase 2); build 14 was the 3-way settings parity polish. See the build sections below.


iOS — App Store Connect “What’s New in This Version (3.4.0)”

(≤4000 chars; pasted into App Store Connect’s release-notes field.)

A safer, cleaner way to switch between kid view and parent view — and now your settings follow you across iPhone, iPad, and Mac.

• Parent Gesture (new). Press and hold the "iInteract" title at the top of the screen to enter Edit Mode. The gear icon appears, you can adjust panels and settings, and Edit Mode auto-locks after 10 minutes of inactivity. Same gesture as the Android app.

• Pick your Parent Access mode. Fresh installs see a one-shot Parent Access prompt after onboarding: "Long-Press Title (Recommended)" for child safety, or "Always Show Gear" if you prefer the classic affordance. Switch any time in Settings → Configuration.

• Your settings sync across devices. Pick a Parent Access mode on iPhone, and your iPad and Mac inherit it on next launch. Same for PIN, custom panels, Mode, voice, and Screen Stays Awake.

• Mac users get a dedicated Settings window. On Mac, tapping the gear (or ⌘,) opens Settings in its own macOS-style window — not a modal sheet. Auto-closes after 10 minutes idle.

• One Erase All flow that cascades. A single PIN-gated Erase All wipes every iCloud-signed-in device within seconds. iCloud Sync re-enable is smart too — if you made changes offline, you're asked Keep iCloud Data or Push This Device to iCloud; if nothing changed, the toggle is silent.

• Full Settings parity, restored. Mode (Default / Configurable / Customize), Voice, Screen Stays Awake, Configuration (Parent Access), and Change PIN are all back in iOS Settings.app. The in-app gear → Settings sheet still has everything too.

What's preserved on upgrade
• Your panels, voice choice, mode, PIN, and security question are untouched.
• If you had Hide Configuration on, the gear stays hidden — same as 3.1.3.
• The Parent Access picker fires once on whichever iCloud-signed-in device opens iInteract first.

Under the hood
• 780+ automated tests across iPhone, iPad, Mac Catalyst, Apple Watch, and Flutter (Android port).
• New iPad-specific layout tests (iInteractTests/iPadLayoutTests.swift).
• License-header invariant tests on both iOS and Flutter (catches any new file shipping without the license header).
• Cross-platform: Long-Press Gesture matches the Flutter port's Edit Mode (flutter_app/lib/utils/edit_mode.dart).

Free, no accounts, no tracking.

What’s NOT in 3.4.0


Bundle of changes since 3.3.0

(Internal changelog — what landed on ios_gesture.)

Restored Settings.bundle parity (commit 56c27a7)

Unified Parent Access Mode picker

EditModeController (port of Flutter edit_mode.dart)

Long-press title + nav-bar refresh

Gear visibility decision tree (PINGate.swift)

ParentAccessMigrator

Onboarding text + post-onboarding picker

Cross-device sync (post-Phase A simplification)


Smoke test before submitting

  1. Fresh install — Welcome alert → PIN nudge (Skip or Set Up) → Parent Access picker fires with Long-Press Title (Recommended)
    • Always Show Gear options. Pick one; flag persists.
  2. 3.1.3 upgrade simulation — pre-seed voice_style=girl + hide_config=false, launch 3.4.0 → identical gear-visible behavior, “What’s New” card fires on first foreground, Got it leaves everything as-is.
  3. What’s New → Try It Now — Card → Try It Now → gear vanishes, toast appears, long-press title → PIN prompt → correct PIN → gear back.
  4. Parent Gesture idle timeout — set idleTimeout = 0.1 in DEBUG-only branch (or wait 10 min) → auto-exit.
  5. Configuration picker round-trip — gear_always → gesture (no confirm) → gear_hidden (confirm fires) → cancel reverts.
  6. Cross-device parent_access_mode sync — pick Long-Press Title on iPhone → launch Mac → Mac inherits gesture mode + skips the picker (KVS adoption).
  7. Erase All cascade — Erase All on Mac → JAZ iPhone (if running) wipes via KVS observer within seconds, or on next launch via applyCascadedClearAllIfNeeded.
  8. iCloud OFF→ON re-enable — (a) toggle OFF, no changes, toggle back ON → silent re-enable; (b) toggle OFF, set a new PIN, toggle back ON → 3-way prompt (Keep iCloud Data / Replace iCloud / Cancel) appears.
  9. Change PIN with no PIN — Toggle Change PIN in iOS Settings without a PIN set → app foregrounds → Set PIN cycle starts directly (no “Enable PIN first” alert).
  10. All 3.1.3 settings preserved — Voice / Mode / PIN / Security Question all read back correctly after upgrade.
  11. Mac Catalyst — Long-press = click-and-hold; same flow. Gear tap (or ⌘,) opens dedicated Settings window scene.
  12. iPad layout — run on iPad sim, panels distribute evenly, Settings sheet shows Done button, gear renders flat-white without iOS 26 platter.

Cross-platform parity check (Gate 4)

git diff ios_before_gesture..ios_gesture --stat -- flutter_app/
# 3.4.0 build 13 expected: empty.
# 3.4.0 build 14 expected: NON-empty (Settings parity pass —
#   Voice alphabetical, section reorder, push-style Mode picker,
#   Display + Privacy footer wording, pubspec 3.3.0+25 → 3.4.1+26).

git diff ios_before_gesture..ios_gesture --stat -- iInteractWatch/
# expected: empty (parent gesture is iOS-only; watch unchanged)

Build 14 settings parity polish (deferred from build 13)

Driven by a 3-way audit of iOS in-app SettingsViewController vs Settings.bundle/Root.plist vs flutter_app/lib/screens/settings_screen.dart. Goal: every shared setting matches verbatim across the three surfaces; each surface’s platform-idiomatic affordances stay intact.

iOS (in-app + Settings.bundle)

Flutter (Android 3.4.1+26)

Tests added / updated

Verified

What stays platform-idiomatic (intentional non-parity)


Build 15 Mac Catalyst Settings window (Phase 2)

Build 15 replaces the Catalyst page-sheet Settings modal with a dedicated UIScene window — what every native Mac app does for Preferences/Settings. iPhone + iPad keep the existing modal sheet (correct UX for touch-first surfaces). This is platform-conditional UX, not a rewrite.

Behavior

Implementation (new files)

Implementation (modified)

Tests

Verified

What still belongs to Phase 3 (deferred)