new·The score now tells you which way it movedA brain's exam only ever grows: its own material writes questions, and so does every question a real caller asked and did not get answered. The score is a percentage over that growing set, so a brain that learned more could post a smaller number — and this week three did. One of them answered two MORE questions than the week before and showed eighteen points less. Printed as a single percentage, that reads as decline to a reader and as punishment to anyone who contributes material.all news →
mozg.beta
Sign in

Expo & React Native · all subjects

eas build & deployment

33 notes, read out of this brain and free to use. Each one was extracted from a source and is re-checked against its exam.

Maestro CLI installation and dependencies for E2E testing

To run E2E tests, install the Maestro CLI from https://maestro.mobile.dev/docs/getting-started/installation. Additionally, install oxipng for image compression using brew install oxipng.

Android emulator setup for E2E tests

To set up the Android emulator for E2E tests, first install the system image: sdkmanager "system-images;android-36;google_apis;arm64-v8a". Then create the emulator: avdmanager create avd --force -n pixel_7_pro --package 'system-images;android-36;google_apis;arm64-v8a' --device pixel_7_pro.

E2E test file location and naming conventions

Create YAML test files in the apps/bare-expo/e2e directory. Name files with .android.yaml or .ios.yaml suffix to have tests run only on the specified platform. iOS can be unstable in GitHub Actions, especially with view shots.

Running E2E tests from CLI with Maestro

Run tests from the command line using: cd apps/bare-expo/e2e && maestro --platform=ios test expo-image/test.yaml. Alternatively, use the --device parameter to specify a specific device. Tests can also be run in parallel on multiple devices using --shard-all parameter, for example: maestro test expo-video/test.yaml --shard-all 2.

View shot base image naming and comparison in E2E tests

Store base images in the repository with names ending in .base.png for cross-platform view shots, or .base.${platform}.png for platform-specific view shots. During CI, new view shots are compared to base images. If a view shot test fails, check the image comparison server logs for the image diff path, which is also stored in the maestro logs folder.

E2E test best practices: assertions and interactivity

Avoid overly specific assertions—for example, don't assert exact video resolution as hardware may vary. Don't assert on long visible text or multiline strings as these are hard to maintain. Limit interactivity in tests; each tap or scroll reduces reliability. Deep link to screens and perform only a few assertions per test. Ensure every test starts from the expected state and can run independently without relying on state from previous tests.

E2E test view shots and visual verification

Use E2EViewShotContainer and E2EKeyValueBox components to render UI pieces and generate Maestro YAML assertions. View shots work cross-platform and can be normalized for comparison across different platforms. However, view shots add test time and may need updates when UI, OS, or device changes, so use them sparingly for main visual verification.

Maestro Studio for E2E test authoring

Use Maestro Studio at https://maestro.mobile.dev/studio to create and author Maestro flows. Studio supports deep linking into screens, provides guidance on YAML syntax, and offers selector and command references at https://docs.maestro.dev/api-reference/selectors and https://docs.maestro.dev/api-reference/commands. Use maestro hierarchy command for debugging selectors.

E2E test debugging and artifacts in Maestro

Maestro creates a ./maestro folder containing logs, failed view shot diffs, and screenshots for failed assertions. When running in CI, artifacts (logs, screenshots, diffs) are uploaded as GitHub artifacts accessible from the workflow run logs. Notable durations like iOS device startup time are logged—search logs for 'duration'.

Expo Client iOS branch organization and release process

The Expo iOS project maintains a main branch for ongoing development. When releasing a new SDK version, a release branch is created with the form ios/sdkNN. Specific versions are tagged from that release branch, such as ios/1.19.0. New changes are written on main. When cutting a new release, either cherry-pick from main to the release branch for small changes or recreate the release branch entirely. Near the end of an SDK cycle, work may happen on an SDK candidate branch instead of main.

Expo Client iOS pull request targeting

Target the main branch for most pull requests. If an SDK candidate branch exists (typically a few days near the end of the release cycle), target that instead.

EAS provides hosted services deeply integrated with Expo tools

Expo Application Services (EAS) is a platform of hosted services that are deeply integrated with Expo open source tools. EAS helps you build, ship, and iterate on your app as an individual or a team.

React Native 0.76 support expo-modules-core

Support for react-native 0.76 has been added to expo-modules-core on Android.

React Native 0.76 support expo-av

Support for react-native 0.76 has been added to expo-av on Android.

expo prebuild now clears and regenerates native folders by default in SDK 57

In SDK 57.0.0, the `expo prebuild` command now clears and regenerates the native folders by default. To apply changes to existing folders instead of regenerating them, pass the `--no-clean` flag.

CLI support for Bundler-managed CocoaPods installations

SDK 57.0.0 adds support for Bundler-managed CocoaPods installations across @expo/cli, @expo/package-manager, and pod-install.

CLI support for Device Hub as Simulator replacement

SDK 57.0.0 adds support for Device Hub as Simulator replacement for Xcode 27+ in @expo/cli.

CLI experimental tvos and macos autolinking

SDK 57.0.0 adds experimental `tvos` and `macos` autolinking in @expo/cli gated by `expriments.outOfTreePlatforms`.

expo-background-fetch deprecated

expo-background-fetch has been marked as deprecated in favor of expo-background-task.

expo-av deprecated

Expo AV has been deprecated as of version 52.0.0.

expo-asset hashAssetFiles deprecation

expo-asset/tools/hashAssetFiles is deprecated in favor of built-in hashing support in expo/metro-config.

expo-sqlite removed deprecated legacy export

Removed deprecated legacy expo-sqlite and the next export as breaking changes in version 52.0.0.

expo-camera removed legacy export

Removed deprecated expo-camera/legacy as a breaking change in version 52.0.0.

expo-image-picker default quality changed

The default value for the quality option in expo-image-picker has been changed from 0.2 to 1.0 in version 52.0.0 for better performance and to match the most common expectation.

expo-image-picker MediaTypeOptions deprecated

ImagePicker.MediaTypeOptions have been deprecated. Use a single MediaType or an array of MediaTypes instead as of version 52.0.0.

expo-linear-gradient colors prop type stricter

expo-linear-gradient colors prop now has a stricter TypeScript type requiring an array of at least two values. Passing an empty array or array with one value will fail to typecheck as of version 52.0.0.

expo-modules-core ExpoAppDelegate EXAppDelegateWrapper deprecation

EXAppDelegateWrapper has been deprecated in favor of ExpoAppDelegate in expo-modules-core.

face-detector removed from Expo Go on iOS

Face detector has been removed from Expo Go on iOS.

Remote JS debugger removed from Expo Go

The Remote JS debugger option has been removed from Expo Go menu when using SDK 49 or above.

Android FCM push notification credentials storage

If you build a standalone app with Expo, the FCM server key is stored by Expo. Each FCM server key can send push notifications to any Android apps associated with the Firebase project to which the key belongs. Server keys can be created and deleted through the Firebase console.

Ad-hoc builds temporary Apple Developer session token

When creating ad-hoc builds, Expo temporarily stores an Apple Developer session token used to create an ad-hoc provisioning profile with your development device's UDID. Once this session token is no longer needed, it is destroyed.

Device tokens for push notifications encryption and cycling

Device tokens identify the recipient device for push notifications. Expo manages device tokens and provides an abstraction on top with the Expo Push Token. Device tokens are encrypted at rest and periodically cycled automatically by Android and iOS. If device tokens are compromised, a malicious actor cannot do anything with them unless they also have push notification credentials for the appropriate platform.

Local builds alternative for credential control

If standard Expo security does not satisfy requirements, standalone app builds can be run on your own infrastructure using local builds. However, push notification credentials still need to be provided to use the push notification service. Alternatively, handle push notifications independently.

Give your agent this brain