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
It's been a while since we've done significant work on this project. Since then, expo has become an excellent choice of tooling to reduce the overall maintenance burden. This PR fundamentally moves us over to expo, with a number of tooling changes that will simplify working with the project successfully.
Expo CNG
Continuous native generation means that we no longer have to maintain specific
ios
andandroid
folders - these are generated on build with the appropriate config. Much more stable & deterministic across different setups.Expo Router
Instead of setting up the screens and structure for defining screens ourselves,
expo-router
uses filesystem-based routing. Since the convention is public, it makes it much easier for everyone to know where and how to add new routes. It also comes with deeplinking OOTB. It's powered byreact-navigation
under-the-hood, which is what we were explicitly using beforehand.Atomic Design
Organising component code has been made clearer by adopting Atomic Design. Components must fit into
atoms
,molecules
,organisms
,templates
, andtemplates
are always rendered by routes, to improve testability and reusability. We have not figured out a convention for layout routes just yet.We should adopt this for our design library/system.
Logging
We're using a proper logger, with module-scoped messages O_o
Config
Env variables can be set in the
config/environment/config.{environment}.ts
files. Running the app withAPP_ENV=next
will inject the values inconfig.next.ts
and so forth. TS files have been used to ensure we can catch missed declarations/fields.By default,
APP_ENV=local
, soconfig.localts
is used. This file is gitignored and so you should copyconfig.example.ts
over asconfig.local.ts
.Mise/Simplified Tooling
We now recommend using mise to install the different versions of tools, in
.ruby-version
,.node-version
, and.java-version
. You can also use other tools separately, such asasdf
,rvm
, andnvm
.EAS build + submit
Now that we're using the
eas-cli
to build and submit (in local mode), there is no need for fastlane, homebrew (graphicsmagik), or ruby! Simplified tooling and reduced maintenance burden :)