This repository outlines a solution for creating a suite of native mobile application, for iOS and Andriod, pulling from a single content repository. The aim is to demonstrate and communicate the requirements for ongoing operations to keep the applications up to date with minimal additional work outside of making edits and additions to the content repository.
The example utilises React Native and the Expo library and toolchain to generate and maintain the native runtimes. In addition Expo provides automation tools to submit the applications to the app stores and also has the capability to make OTA updates for critical alerts and messaging.
The code is in TypeScript, implementing React Native components.
The content is pulled from a Druapl 9 JSON:API endpoint. This CMS also powers the website. There would be some additional data structures set up in Drupal for the apps where data structures do not already exist. This content centralisation allows content editors to quickly update content across the platforms, implementing the paradigm of publish once, distribute many.
There are three types of updates:
- Changes detected from the CMS that trigger an OTA update
- Changes detected from the CMS that trigger a new build and automatic app store submissions
- Changes in git repository to non-CMS controlled content or structure with automatic app store submission
A plugin for Drupal needs to be installed and configured so it can trigger a CI/CD platform for update types 1 and 2. Github Actions is an option for CI/CD.
For the third type of update, ideally the development environment required to make code/structural changes could be web-based, allowing department staff to run it in the SOE. This repository demonstrates this capability through the use of Github Codespaces.
Submission of code changes would be achieved through a Pull Request where demo builds of the app(s) would be available through Expo for testing prior to merging into the main branch. Merging into the main branch would build and distribute the apps to the app stores via the CI/CD.