Coding Environment Software Technology Assessment

Coding Environment Software Technology Assessment

Potential Target Platforms

  • Android phones and tablets

  • Apple iOS iPhones and iPads

  • Chromebooks (ChromeOS)

  • Linux

  • macOS

  • Web browser

  • Windows

Platform Integration Features

  • An installable application that can be run without an internet connection

  • Distributable via the platform 'store'

  • Integration with platform accessibility features and assistive technologies

  • Text-to-speech and Speech-to-text

  • Bluetooth for integrating with robots and other devices

  • Ability to integrate/use 'native' code, for example to access a platform accessibility API or to make use of a vendor-provided API library

  • Media

    • Graphics

    • Sound

    • Music

  • Access to device hardware

    • Camera

    • Microphone

    • Accelerometer

    • Gyroscope

    • Haptic feedback / vibration

  • Drag and drop

Programming Features

  • Shared model/state management (to support multiple notations for the same program)

  • Support for rich and dynamic UIs

  • Media

    • Graphics

    • Sound

    • Music

Technology Types and Platform Matrix

Technology Types Being Considered

  • Cross-Platform Native UI: A cross-platform layer on top of platform features, but using native UI components (rather than a web view; an example would be React Native)

  • Web: A web application using HTML, CSS, and JavaScript

  • Web View Wrapper: Runs a web application inside a platform application using an embedded web browser (for example Cordova or Electron), also known as "hybrid" mobile applications

Matrix

Technology

Type

Android

Apple iOS

ChromeOS

Linux

macOS

Web browser

WIndows

Technology

Type

Android

Apple iOS

ChromeOS

Linux

macOS

Web browser

WIndows

Capacitor

Web View Wrapper

Y

Y

As PWA

With Electron

With Electron

Y

As PWA/Electron

Cordova/PhoneGap

Web View Wrapper

Y

Y

 

 

 

 

 

Electron

Web View Wrapper

 

 

 

Y

Y

 

Y

Flutter

Cross-Platform Native UI

Y

Y

 

 

 

 

 

Ionic

Web View Wrapper

Y

Y

As PWA

With Electron

With Electron

Y

As PWA/Electron

PWA

Web-standards based packaging of web applications

 

 

Y

 

 

Y

Y

React

Web

 

 

 

 

 

Y

 

React Native

Cross-Platform Native UI

Y

Y

 

 

 

With react-native-web

With react-native-windows

SwiftUI

Apple-Specific Declarative UI

 

Y

 

 

Y

 

 

Vue.js

Web

 

 

 

 

 

Y

 

Vue.js NativeScript

Cross-Platform Native UI

Y

Y

 

 

 

 

 

Notes

  • The Web Bluetooth API is currently available on a limited number of browsers/platforms (primarily Chrome and ChromeOS)

  • In addition to NativeScript, there is also Vue Native

Technology Notes

Capacitor

Cordova/PhoneGap

Electron

Flutter

Ionic

Progress Web Apps

React

React Native

Reactive Native Scenarios

  • Without Expo (react-native-cli)

    • Mac, Android Emulator

    • Mac, iOS Simulator (error, see below)

    • Windows, Android Emulator ('react-native run-android' works)

  • With Expo

    • Mac, with Expo App, Android Emulator

    • Mac, without Expo App, Android Emulator

    • Mac, with Expo App, iOS Simulator

    • Mac, without Expo App, iOS Simulator

    • Windows, with Expo App, Android Emulator

    • Windows, without Expo App, Android Emulator ('expo build:android -t apk' builds on Expo remote servers, queue/build time: 20 minutes)

Error Running React Native iOS on Mac (non-Expo)

$ react-native run-ios
...

In file included from /Users/daniel/Desktop/c2lc-react-native-without-expo/c2lc-react-native-without-expo/ios/C2lcReactNative/main.m:10:
/Users/daniel/Desktop/c2lc-react-native-without-expo/c2lc-react-native-without-expo/ios/C2lcReactNative/AppDelegate.h:8:9: fatal error: 'React/RCTBridgeDelegate.h' file not found
#import <React/RCTBridgeDelegate.h>
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
...

Not able to load npm module
...

Invariant Violation: requireNativeComponent: "RNSVGPath" was not found in the UIManager.



...

Svelte

SwiftUI

Vue.js

iOS Notes

Alan's Adjustr Preferences Work

Exploratory Projects

Tasks

  • Make a React Native with Expo project with same functionality as c2lc-react

    Add one label per text editor (Done, requires additional style fix)
    Get running in iOS Simulator or physical iOS devices with Expo App (Done on Simulator, iPad, iPhone)
    Get running in iOS Simulator without Expo App (expo build:ios -t simulator) (Done)
    Get running in Android Emulator or physical Android device with Expo App (Done on Emulator)
    Configure Flow types
    Test with VoiceOver on iOS (Done, requires additional support for relationship between components)
    Test permission to access location (Done)
  • Make a React Native without Expo project with same functionality as c2lc-react

    Get running in iOS Simulator (blocked right now by error, see above) – update : After downloading cocoapods, was able to run it on iOS simulator; however there's an issue with loading required module (react-native-svg). When components from the module are commented out, the issue is solved.
    Get running in Android Emulator (Done with some difficulties; though, android build didn't run into the issue calling react-native-svg module)
    Configure Flow types
  • Select which technology/technologies to explore next

  • Make notes on experiences and issues encountered

    • With Expo App, running on both iOS Simulator and Android Emulator are functioning as expected, but there was difference in styles in components

    • It is hard to connect relationship between label and contents for text to speech feature, since react-native does not support 'htmlfor' property

    • When iOS simulator failed due to unable to load npm modules, problem can be solved by linking required modules in iOS library – refer to https://facebook.github.io/react-native/docs/linking-libraries-ios

    • There were few errors, that I encountered when I tried to run the project without Expo on Android Emulator:

      1. SDK location not found – go to the android/ directory of the react-native project and create a file named 'local.properties' with a line 'sdk.dir = /Users/USERNAME/Library/Android/sdk

      2. adb: command not found – on terminal, type 'export PATH=$PATH:~/Library/Android/sdk/platform-tools/