Project

General

Profile

Feature #11349

ensure that the web client works on iOS devices (both iPad and iPhone)

Added by Greg Shah 4 months ago. Updated 4 months ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:
version_reported:
version_resolved:
reviewer:
production:
No
env_name:
topics:

History

#1 Updated by Greg Shah 4 months ago

The purpose of this task is to test the FWD web client on iOS devices and fix blocking issues that stop users from using the application. We need to determine which versions of iOS to test/support.

No new capabilities will be implemented in this task. We will only fix issues that stop the existing design from working properly.

#2 Updated by Greg Shah 4 months ago

One very likely issue is that our avoidance of the DOM/HTML controls means that the mobile keyboard support probably will not work. What can we do to solve that?

#3 Updated by Alexandru Lungu 4 months ago

One very likely issue is that our avoidance of the DOM/HTML controls means that the mobile keyboard support probably will not work. What can we do to solve that?

I would expect to have something similar to the current approach of simulating the clipboard (aka a hidden input). We can programmatically change the focus to it and trigger the keyboard to be displayed. Afterward, we use that input as a general keyboard input place where we listen for events and redirect to server. I did not try this out tho.

#5 Updated by Hynek Cihlar 4 months ago

We already did some preliminary work on mobile browsers support, see #9172. Below are the items needed to be addressed and time efforts (in man hours), #9172 outcomes are included in the estimates.

  • Virtual keyboard won't appear - no focusable <input> element, only <canvas> (8 hrs)
  • Even if keyboard opens, keydown/keyup events may not fire - mobile keyboards use input/beforeinput/compositionstart/compositionend events instead (24 hrs)
  • IME composition (autocorrect, swipe-typing, predictive text) entirely unhandled (32 hrs)
  • No <meta name="viewport"> tag - page renders at ~980px width then shrinks to fit, everything appears tiny (2 hrs)
  • Orientation change handling untested - window.resize listener exists but server-side relayout not verified (2 hrs)
  • No touchstart/touchmove/touchend listeners - FWD relies on synthesized mouse events which behave differently (24 hrs)
  • No right-click mapping - contextmenu requires long-press which FWD doesn't handle (4 hrs)
  • No multi-touch support - pinch, zoom, two-finger scroll unhandled (16 hrs)
  • Browser default gestures (double-tap zoom, pinch-zoom, pull-to-refresh, swipe-back) interfere with the app since no touch listeners call preventDefault() (4 hrs)
  • Modal overlay blocking assumes mouse interaction - touch events may pass through (4 hrs)
  • Window drag and resize rely on mousemove tracking that degrades on touch (16 hrs)

Total: 136 hrs

There are some notable differences between iOS/Safari and Android/Chrome, these could incur additional efforts.

  • Virtual keyboard behavior: iOS Safari fires keydown/keyup more reliably than Android Chrome for simple keys. Android relies more heavily on input/compositionend events. iOS has a different keyboard toolbar (Done/Next buttons) that fires different events. iOS doesn't fire resize when the keyboard opens; Android does on some versions.
  • Touch events: iOS Safari has a ~350ms delay on first touch after page load (first-interaction policy). Safari's touchmove handling with preventDefault() requires {passive: false} explicitly. iOS requires user gesture to play sound, enter fullscreen, or access clipboard - more restrictive than Android.
  • Viewport/rendering: iOS Safari ignores viewport width values below 320px. Safe area insets (notch, dynamic island) need env(safe-area-inset-*) CSS on iOS. iOS Safari pinch-zoom cannot be fully disabled with meta viewport alone since iOS 10.
  • WebSocket: iOS Safari has stricter limits on concurrent WebSocket connections. iOS background tabs aggressively suspend WebSocket connections after ~30 seconds.
  • Canvas: iOS Safari has a lower maximum canvas size limit (~16 megapixels) compared to Android Chrome. iOS may purge large canvases under memory pressure without warning.

Additional effort for cross-platform testing and iOS-specific fixes: 16-24 man hours, mostly in keyboard and viewport areas.

#6 Updated by Greg Shah 4 months ago

Several of these areas would be things I'd expect to defer to #11352. This task is just to do the minimum to allow the existing web client to work.

Which of these items are critical for that objective?

Also available in: Atom PDF