Skip to content

[crypto] Add support for AES encryption#41249

Merged
barthap merged 16 commits intomainfrom
@barthap/crypto-aes
Jan 9, 2026
Merged

[crypto] Add support for AES encryption#41249
barthap merged 16 commits intomainfrom
@barthap/crypto-aes

Conversation

@barthap
Copy link
Copy Markdown
Contributor

@barthap barthap commented Nov 26, 2025

Why

AES encryption/decryption is a common use case, and all platforms supported by Expo have native APIs for it.

How

Used native implementations for each platform:

Key design ideas:

  • Secure random key generation, possibility import and export to byte array
  • AES 128/192/256 GCM encryption/decryption, with AAD authentication
  • Easy to use API with secure defaults, with advanced configuration possibilities
    • Inspired by web SubtleCrypto and iOS CryptoKit
    • Configurable parameters: IV (nonce) and GCM tag length
    • Defaults to NIST recommended values (96-bit nonce, 128-bit tag)
  • Portable SealedData format for encrypted data, both easy to use and
    compatible with any 3rd-party AES GCM API.
    • Ease of use: Concatenated IV || ciphertext || tag into contiguous byte array.
    • Compatibility: Possibility to extract its components and build from components.

Modes other than AES-GCM are not supported. They have limited platform support and are discouraged for safety reasons.

👉 Basic usage example

import { AES } from "expo-crypto";

// alternatively, TextEncoder can be used
const plaintext = "Hello, world!";
const plaintextBase64 = btoa(plaintexxt);

const encryptionKey = await AES.EncryptionKey.generate();
const sealedData = await AES.encryptAsync(plaintextBase64, key);
const decryptedBase64 = await AES.decryptAsync(sealedData, key, {
  output: "base64",
});

const decrpyted = atob(decryptedBase64);
console.log("Decrypted: ", decrpyted);

📂 With FileSystem and SecureStore

import { AES } from "expo-crypto";
import { File, Paths } from "expo-file-system";
import * as SecureStore from "expo-secure-store";

async function encryptAndSaveData(plaintextData: Uint8Array) {
  // generate encryption key
  const encryptionKey = await AES.EncryptionKey.generate();

  // encrypt data
  const sealedData = await AES.encryptAsync(plaintextData, encryptionKey);
  const encryptedBytes = await sealedData.combined();

  // store encryption key
  const keyHex = await encryptionKey.encoded("hex");
  await SecureStore.setItemAsync("aes-encryption-key", keyHex);

  // save encrypted file
  const file = new File(Paths.cache, "encrypted.dat");
  file.create({ overwrite: true });
  file.write(encryptedBytes);
}

async function loadAndDecryptData(): Promise<Uint8Array> {
  // Load encryption key
  const keyHex = await SecureStore.getItemAsync("aes-encryption-key");
  const encryptionKey = await AES.EncryptionKey.import(keyHex!, "hex");

  // Load encrypted file
  const file = new File(Paths.cache, "encrypted.dat");
  const encryptedBytes = await file.bytes();
  const sealedData = AES.SealedData.fromCombined(encryptedBytes);

  // decrypt data
  const plaintextBytes = await AES.decryptAsync(sealedData, encryptionKey);
  return plaintextBytes;
}
📖 NIST safety recommendations

Default and allowed values are based on
NIST SD 800-38D
and RFC-5116 recommendations.

Key points:

  • Nonce (IV) cannot be reused between encryptions! Must be generated every time AES.encryptAsync() is called.
  • Recommended IV length is 96 bit (12 bytes)
  • Recommended tag length is 128 bit (16 bytes), a few other arbitrary values are allowed under certain circumstances

From NIST SD 800-38D section 5.2.1:

For IVs, it is recommended that implementations restrict support to the length of 96 bits, to
promote interoperability, efficiency, and simplicity of design.

The bit length of the tag, denoted t, is a security parameter, as discussed in Appendix B. In
general, t may be any one of the following five values: 128, 120, 112, 104, or 96. For certain
applications, t may be 64 or 32; guidance for the use of these two tag lengths, including
requirements on the length of the input data and the lifetime of the key in these cases, is given in
Appendix C.

An implementation shall not support values for t that are different from the seven choices in the
preceding paragraph. An implementation may restrict its support to as few as one of these
values. A single, fixed value for t from among the supported choices shall be associated with
each key.

Test Plan

  • Added Test Suite tests that pass on ios, android, and web.
  • Added NCL screen.

To-dos and discussions

Module format (resolved)

We don't have any unified concept of sub-modules.
The APIs introduced here are considerably large, larger than the whole current expo-crypto. There are a few classes/enums/interaces that are AES-specific, so it makes sense for them to be encapsulated. Therefore, a few decisions need to be made:

  • Decide where the API should reside and how it should be imported

    • Currently, it's exported as namespace: import { AES } from 'expo-crypto' but this is not perfect if one wants to import methods/class names directly
    • Alternatively, it could be import * as AES from 'expo-crypto/aes';
    • Ultimately, it can be flattened with current expo-crypto APIs.
  • If we go with the API being flattened with existing crypto APIs, decide if native modules should be merged with existing CryptoModule or be a separate native module.

    • For now, I went with a separate module, to minimize performance impact during initialization. Users who use expo-crypto for simple random number generation shouldn't be forced to load all AES APIs.

Docs

There are a few concerns about docs

Docs structure (resolved)

How to show the AES API in docs. Our docs system doesn't handle nested namespaces well. When exported as a namespace, only module methods are displayed, without namespace-specific classes, enums, interfaces etc.
- We can improve the system to render all the stuff from a namespace, although the outputs might be messy.
- Or we can use two <APISection /> components in crypto.mdx - one for general crypto, the other for AES. The downside is that it makes the right sidebar a little messy
- Like Expo UI, the crypto page can be split into two sub-pages. For now, I went with this approach, but I don't like how left sidebar looks with this change.

Handle overloads (resolved):

There is a discussion in inline comments below: #41249 (comment)

Other docs follow-ups (can be done later):

  • Document NIST safety recommendations for the APIs - some inline comments have been added. Still, a general section should be added too, depending on what docs structure we decide to go with.

API design

User-facing API concerns:

  • Iterate once again on API design:
    • Unify naming (e.g. size vs length),
    • whether to use bit vs byte sizes for key/nonce/tag.
      • For IV, usually byte length is used. For tag however, bit length is used in native APIs and documents.
      • Now I went with byte length for both, for consistency.
    • Consider making SealedData methods sync. Now they do memory copying, but with zero-copy ArrayBuffer support (I'm working on it), they will only be returning appropriate pointers.

Internal API concerns:

  • Decide on binary data handling in native APIs - because of folly dynamic / ReadableMap limitations, we cannot pass Uint8Array as a Record property. Currently, I worked around this by converting to base64 on JS side, but perhaps the binary parameters should be moved to top-level arguments.

Follow-ups

Can be done in later PRs

  • Add encryptStringAsync() and decryptStringAsync() for string payloads. Currently, TextEncoder/TextDecoder can be used, or base64 with btoa() / atob() to convert UTF strings into encryptable data.
  • Add explicit validation for allowed values (e.g. empty nonce). Now they're only type-checked and validated by native APIs.
  • Unify error handling - currently, only iOS has custom error types. This is not a big issue now since Web and Android have nice native error messages.
  • Later, when native support for ArrayBuffers is added, some functions can be modified to return a zero-copy buffer. Now, there's copy overhead when creating Uint8Array on return.
  • Add extractable option to EncryptionKey constructors. It's a web-specific property of crypto keys that blocks revealing key data to JS code. In this PR, it's hardcoded to true but it can be easily implemented and extended to native APIs as well.

Checklist

@expo-bot expo-bot added the bot: suggestions ExpoBot has some suggestions label Nov 26, 2025
@barthap barthap force-pushed the @barthap/crypto-aes branch from 91627b6 to a8a6382 Compare December 2, 2025 09:25
@expo-bot expo-bot added bot: passed checks ExpoBot has nothing to complain about and removed bot: suggestions ExpoBot has some suggestions labels Dec 2, 2025
@expo-bot
Copy link
Copy Markdown
Collaborator

expo-bot commented Dec 2, 2025

The Pull Request introduced fingerprint changes against the base commit: 57e0b9e

Fingerprint diff
[
  {
    "op": "changed",
    "beforeSource": {
      "type": "dir",
      "filePath": "../../packages/expo-crypto/android",
      "reasons": [
        "expoAutolinkingAndroid"
      ],
      "hash": "466c6126d7953a364fcc15644cdac38012c30f37"
    },
    "afterSource": {
      "type": "dir",
      "filePath": "../../packages/expo-crypto/android",
      "reasons": [
        "expoAutolinkingAndroid"
      ],
      "hash": "df6ff691a39ba349372b56ebea96cf0f32dc7e7a"
    }
  },
  {
    "op": "changed",
    "beforeSource": {
      "type": "dir",
      "filePath": "../../packages/expo-crypto/ios",
      "reasons": [
        "expoAutolinkingIos"
      ],
      "hash": "1be7631b64e026f36a806c778f18bc2262f804fc"
    },
    "afterSource": {
      "type": "dir",
      "filePath": "../../packages/expo-crypto/ios",
      "reasons": [
        "expoAutolinkingIos"
      ],
      "hash": "e02ff9f22e10715aa0a041dc490e2df70e6b4a8e"
    }
  },
  {
    "op": "changed",
    "beforeSource": {
      "type": "contents",
      "id": "expoAutolinkingConfig:android",
      "contents": "{\"extraDependencies\":[],\"coreFeatures\":[\"swiftui\",\"compose\"],\"modules\":[{\"packageName\":\"@expo/app-integrity\",\"projects\":[{\"name\":\"expo-app-integrity\",\"sourceDir\":\"../../packages/expo-app-integrity/android\",\"modules\":[{\"classifier\":\"expo.modules.integrity.IntegrityModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.1.7\"},{\"packageName\":\"@expo/dom-webview\",\"projects\":[{\"name\":\"expo-dom-webview\",\"sourceDir\":\"../../packages/@expo/dom-webview/android\",\"modules\":[{\"classifier\":\"expo.modules.webview.DomWebViewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.2.7\"},{\"packageName\":\"@expo/log-box\",\"projects\":[{\"name\":\"expo-log-box\",\"sourceDir\":\"../../packages/@expo/log-box/android\",\"modules\":[],\"services\":[],\"packages\":[\"expo.modules.logbox.ExpoLogBoxPackage\"]}],\"packageVersion\":\"0.0.13-canary-20251023-4c86f95\"},{\"packageName\":\"@expo/ui\",\"projects\":[{\"name\":\"expo-ui\",\"sourceDir\":\"../../packages/expo-ui/android\",\"modules\":[{\"classifier\":\"expo.modules.ui.ExpoUIModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.2.0-beta.10\"},{\"packageName\":\"benchmarking-module\",\"projects\":[{\"name\":\"benchmarking-module\",\"sourceDir\":\"modules/benchmarking/android\",\"modules\":[{\"classifier\":\"expo.modules.benchmark.BenchmarkingExpoModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.0.1\"},{\"packageName\":\"expo\",\"projects\":[{\"name\":\"expo\",\"sourceDir\":\"../../packages/expo/android\",\"modules\":[{\"classifier\":\"expo.modules.fetch.ExpoFetchModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.ExpoModulesPackage\"]}],\"packageVersion\":\"54.0.8\"},{\"packageName\":\"expo-age-range\",\"projects\":[{\"name\":\"expo-age-range\",\"sourceDir\":\"../../packages/expo-age-range/android\",\"modules\":[{\"classifier\":\"expo.modules.agerange.AgeRangeModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.2.0\"},{\"packageName\":\"expo-application\",\"projects\":[{\"name\":\"expo-application\",\"sourceDir\":\"../../packages/expo-application/android\",\"modules\":[{\"classifier\":\"expo.modules.application.ApplicationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"7.0.7\"},{\"packageName\":\"expo-asset\",\"projects\":[{\"name\":\"expo-asset\",\"sourceDir\":\"../../packages/expo-asset/android\",\"modules\":[{\"classifier\":\"expo.modules.asset.AssetModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"12.0.8\"},{\"packageName\":\"expo-audio\",\"projects\":[{\"name\":\"expo-audio\",\"sourceDir\":\"../../packages/expo-audio/android\",\"modules\":[{\"classifier\":\"expo.modules.audio.AudioModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.12\"},{\"packageName\":\"expo-background-fetch\",\"projects\":[{\"name\":\"expo-background-fetch\",\"sourceDir\":\"../../packages/expo-background-fetch/android\",\"modules\":[{\"classifier\":\"expo.modules.backgroundfetch.BackgroundFetchModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-background-task\",\"projects\":[{\"name\":\"expo-background-task\",\"sourceDir\":\"../../packages/expo-background-task/android\",\"modules\":[{\"classifier\":\"expo.modules.backgroundtask.BackgroundTaskModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-battery\",\"projects\":[{\"name\":\"expo-battery\",\"sourceDir\":\"../../packages/expo-battery/android\",\"modules\":[{\"classifier\":\"expo.modules.battery.BatteryModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-blob\",\"projects\":[{\"name\":\"expo-blob\",\"sourceDir\":\"../../packages/expo-blob/android\",\"modules\":[{\"classifier\":\"expo.modules.blob.BlobModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.1.6\"},{\"packageName\":\"expo-blur\",\"projects\":[{\"name\":\"expo-blur\",\"sourceDir\":\"../../packages/expo-blur/android\",\"modules\":[{\"classifier\":\"expo.modules.blur.BlurModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-brightness\",\"projects\":[{\"name\":\"expo-brightness\",\"sourceDir\":\"../../packages/expo-brightness/android\",\"modules\":[{\"classifier\":\"expo.modules.brightness.BrightnessModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-calendar\",\"projects\":[{\"name\":\"expo-calendar\",\"sourceDir\":\"../../packages/expo-calendar/android\",\"modules\":[{\"classifier\":\"expo.modules.calendar.CalendarModule\",\"name\":null},{\"classifier\":\"expo.modules.calendar.next.CalendarNextModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-camera\",\"projects\":[{\"name\":\"expo-camera\",\"sourceDir\":\"../../packages/expo-camera/android\",\"modules\":[{\"classifier\":\"expo.modules.camera.CameraViewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-cellular\",\"projects\":[{\"name\":\"expo-cellular\",\"sourceDir\":\"../../packages/expo-cellular/android\",\"modules\":[{\"classifier\":\"expo.modules.cellular.CellularModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-clipboard\",\"projects\":[{\"name\":\"expo-clipboard\",\"sourceDir\":\"../../packages/expo-clipboard/android\",\"modules\":[{\"classifier\":\"expo.modules.clipboard.ClipboardModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-constants\",\"projects\":[{\"name\":\"expo-constants\",\"sourceDir\":\"../../packages/expo-constants/android\",\"modules\":[{\"classifier\":\"expo.modules.constants.ConstantsModule\",\"name\":null}],\"services\":[\"expo.modules.constants.ConstantsService\"],\"packages\":[]}],\"packageVersion\":\"18.0.9\"},{\"packageName\":\"expo-contacts\",\"projects\":[{\"name\":\"expo-contacts\",\"sourceDir\":\"../../packages/expo-contacts/android\",\"modules\":[{\"classifier\":\"expo.modules.contacts.ContactsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.8\"},{\"packageName\":\"expo-crypto\",\"projects\":[{\"name\":\"expo-crypto\",\"sourceDir\":\"../../packages/expo-crypto/android\",\"modules\":[{\"classifier\":\"expo.modules.crypto.CryptoModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-dev-client\",\"projects\":[{\"name\":\"expo-dev-client\",\"sourceDir\":\"../../packages/expo-dev-client/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.12\"},{\"packageName\":\"expo-dev-launcher\",\"projects\":[{\"name\":\"expo-dev-launcher\",\"sourceDir\":\"../../packages/expo-dev-launcher/android\",\"modules\":[],\"services\":[],\"packages\":[\"expo.modules.devlauncher.DevLauncherPackage\"]}],\"plugins\":[{\"id\":\"expo-dev-launcher-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-dev-launcher/expo-dev-launcher-gradle-plugin\",\"applyToRootProject\":true}],\"packageVersion\":\"6.0.11\"},{\"packageName\":\"expo-dev-menu\",\"projects\":[{\"name\":\"expo-dev-menu\",\"sourceDir\":\"../../packages/expo-dev-menu/android\",\"modules\":[{\"classifier\":\"expo.modules.devmenu.modules.DevMenuModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.devmenu.DevMenuPackage\"]}],\"packageVersion\":\"7.0.11\"},{\"packageName\":\"expo-dev-menu-interface\",\"projects\":[{\"name\":\"expo-dev-menu-interface\",\"sourceDir\":\"../../packages/expo-dev-menu-interface/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-device\",\"projects\":[{\"name\":\"expo-device\",\"sourceDir\":\"../../packages/expo-device/android\",\"modules\":[{\"classifier\":\"expo.modules.device.DeviceModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-document-picker\",\"projects\":[{\"name\":\"expo-document-picker\",\"sourceDir\":\"../../packages/expo-document-picker/android\",\"modules\":[{\"classifier\":\"expo.modules.documentpicker.DocumentPickerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-eas-client\",\"projects\":[{\"name\":\"expo-eas-client\",\"sourceDir\":\"../../packages/expo-eas-client/android\",\"modules\":[{\"classifier\":\"expo.modules.easclient.EASClientModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-file-system\",\"projects\":[{\"name\":\"expo-file-system\",\"sourceDir\":\"../../packages/expo-file-system/android\",\"modules\":[{\"classifier\":\"expo.modules.filesystem.FileSystemModule\",\"name\":null},{\"classifier\":\"expo.modules.filesystem.legacy.FileSystemLegacyModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"19.0.14\"},{\"packageName\":\"expo-font\",\"projects\":[{\"name\":\"expo-font\",\"sourceDir\":\"../../packages/expo-font/android\",\"modules\":[{\"classifier\":\"expo.modules.font.FontLoaderModule\",\"name\":null},{\"classifier\":\"expo.modules.font.FontUtilsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.8\"},{\"packageName\":\"expo-gl\",\"projects\":[{\"name\":\"expo-gl\",\"sourceDir\":\"../../packages/expo-gl/android\",\"modules\":[{\"classifier\":\"expo.modules.gl.GLModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"16.0.7\"},{\"packageName\":\"expo-haptics\",\"projects\":[{\"name\":\"expo-haptics\",\"sourceDir\":\"../../packages/expo-haptics/android\",\"modules\":[{\"classifier\":\"expo.modules.haptics.HapticsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-image\",\"projects\":[{\"name\":\"expo-image\",\"sourceDir\":\"../../packages/expo-image/android\",\"modules\":[{\"classifier\":\"expo.modules.image.ExpoImageModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"3.0.8\"},{\"packageName\":\"expo-image-loader\",\"projects\":[{\"name\":\"expo-image-loader\",\"sourceDir\":\"../../packages/expo-image-loader/android\",\"modules\":[],\"services\":[\"expo.modules.imageloader.ImageLoaderService\"],\"packages\":[]}],\"packageVersion\":\"6.0.0\"},{\"packageName\":\"expo-image-manipulator\",\"projects\":[{\"name\":\"expo-image-manipulator\",\"sourceDir\":\"../../packages/expo-image-manipulator/android\",\"modules\":[{\"classifier\":\"expo.modules.imagemanipulator.ImageManipulatorModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-image-picker\",\"projects\":[{\"name\":\"expo-image-picker\",\"sourceDir\":\"../../packages/expo-image-picker/android\",\"modules\":[{\"classifier\":\"expo.modules.imagepicker.ImagePickerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-insights\",\"projects\":[{\"name\":\"expo-insights\",\"sourceDir\":\"../../packages/expo-insights/android\",\"modules\":[{\"classifier\":\"expo.modules.insights.ExpoInsightsModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.insights.ExpoInsightsPackage\"]}],\"packageVersion\":\"0.10.7\"},{\"packageName\":\"expo-intent-launcher\",\"projects\":[{\"name\":\"expo-intent-launcher\",\"sourceDir\":\"../../packages/expo-intent-launcher/android\",\"modules\":[{\"classifier\":\"expo.modules.intentlauncher.IntentLauncherModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"13.0.7\"},{\"packageName\":\"expo-json-utils\",\"projects\":[{\"name\":\"expo-json-utils\",\"sourceDir\":\"../../packages/expo-json-utils/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.15.0\"},{\"packageName\":\"expo-keep-awake\",\"projects\":[{\"name\":\"expo-keep-awake\",\"sourceDir\":\"../../packages/expo-keep-awake/android\",\"modules\":[{\"classifier\":\"expo.modules.keepawake.KeepAwakeModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linear-gradient\",\"projects\":[{\"name\":\"expo-linear-gradient\",\"sourceDir\":\"../../packages/expo-linear-gradient/android\",\"modules\":[{\"classifier\":\"expo.modules.lineargradient.LinearGradientModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linking\",\"projects\":[{\"name\":\"expo-linking\",\"sourceDir\":\"../../packages/expo-linking/android\",\"modules\":[{\"classifier\":\"expo.modules.linking.ExpoLinkingModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.linking.ExpoLinkingPackage\"]}],\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-local-authentication\",\"projects\":[{\"name\":\"expo-local-authentication\",\"sourceDir\":\"../../packages/expo-local-authentication/android\",\"modules\":[{\"classifier\":\"expo.modules.localauthentication.LocalAuthenticationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-localization\",\"projects\":[{\"name\":\"expo-localization\",\"sourceDir\":\"../../packages/expo-localization/android\",\"modules\":[{\"classifier\":\"expo.modules.localization.LocalizationModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.localization.LocalizationPackage\"]}],\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-location\",\"projects\":[{\"name\":\"expo-location\",\"sourceDir\":\"../../packages/expo-location/android\",\"modules\":[{\"classifier\":\"expo.modules.location.LocationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"19.0.7\"},{\"packageName\":\"expo-mail-composer\",\"projects\":[{\"name\":\"expo-mail-composer\",\"sourceDir\":\"../../packages/expo-mail-composer/android\",\"modules\":[{\"classifier\":\"expo.modules.mailcomposer.MailComposerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-manifests\",\"projects\":[{\"name\":\"expo-manifests\",\"sourceDir\":\"../../packages/expo-manifests/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.8\"},{\"packageName\":\"expo-maps\",\"projects\":[{\"name\":\"expo-maps\",\"sourceDir\":\"../../packages/expo-maps/android\",\"modules\":[{\"classifier\":\"expo.modules.maps.MapsModule\",\"name\":null},{\"classifier\":\"expo.modules.maps.GoogleMapsModule\",\"name\":null},{\"classifier\":\"expo.modules.maps.StreetViewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.12.7\"},{\"packageName\":\"expo-media-library\",\"projects\":[{\"name\":\"expo-media-library\",\"sourceDir\":\"../../packages/expo-media-library/android\",\"modules\":[{\"classifier\":\"expo.modules.medialibrary.MediaLibraryModule\",\"name\":null},{\"classifier\":\"expo.modules.medialibrary.next.MediaLibraryNextModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"18.2.0\"},{\"packageName\":\"expo-mesh-gradient\",\"projects\":[{\"name\":\"expo-mesh-gradient\",\"sourceDir\":\"../../packages/expo-mesh-gradient/android\",\"modules\":[{\"classifier\":\"expo.modules.meshgradient.MeshGradientModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.4.7\"},{\"packageName\":\"expo-modules-core\",\"projects\":[{\"name\":\"expo-modules-core\",\"sourceDir\":\"../../packages/expo-modules-core/android\",\"modules\":[],\"services\":[],\"packages\":[\"expo.modules.adapters.react.ReactAdapterPackage\",\"expo.modules.core.BasePackage\",\"expo.modules.kotlin.edgeToEdge.EdgeToEdgePackage\"]}],\"plugins\":[{\"id\":\"expo-module-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-modules-core/expo-module-gradle-plugin\",\"applyToRootProject\":false}],\"packageVersion\":\"3.0.16\"},{\"packageName\":\"expo-navigation-bar\",\"projects\":[{\"name\":\"expo-navigation-bar\",\"sourceDir\":\"../../packages/expo-navigation-bar/android\",\"modules\":[{\"classifier\":\"expo.modules.navigationbar.NavigationBarModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.navigationbar.NavigationBarPackage\"]}],\"packageVersion\":\"5.0.8\"},{\"packageName\":\"expo-network\",\"projects\":[{\"name\":\"expo-network\",\"sourceDir\":\"../../packages/expo-network/android\",\"modules\":[{\"classifier\":\"expo.modules.network.NetworkModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-network-addons\",\"projects\":[{\"name\":\"expo-network-addons\",\"sourceDir\":\"../../packages/expo-network-addons/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"plugins\":[{\"id\":\"expo-network-addons-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-network-addons/expo-network-addons-gradle-plugin\",\"applyToRootProject\":true}],\"packageVersion\":\"0.10.7\"},{\"packageName\":\"expo-notifications\",\"projects\":[{\"name\":\"expo-notifications\",\"sourceDir\":\"../../packages/expo-notifications/android\",\"modules\":[{\"classifier\":\"expo.modules.notifications.badge.BadgeModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.background.ExpoBackgroundNotificationTasksModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.categories.ExpoNotificationCategoriesModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.channels.NotificationChannelGroupManagerModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.channels.NotificationChannelManagerModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.emitting.NotificationsEmitter\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.handling.NotificationsHandler\",\"name\":null},{\"classifier\":\"expo.modules.notifications.permissions.NotificationPermissionsModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.presentation.ExpoNotificationPresentationModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.scheduling.NotificationScheduler\",\"name\":null},{\"classifier\":\"expo.modules.notifications.serverregistration.ServerRegistrationModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.tokens.PushTokenModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.topics.TopicSubscriptionModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.channels.AndroidXNotificationsChannelsProvider\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.notifications.NotificationsPackage\"]}],\"packageVersion\":\"0.32.11\"},{\"packageName\":\"expo-print\",\"projects\":[{\"name\":\"expo-print\",\"sourceDir\":\"../../packages/expo-print/android\",\"modules\":[{\"classifier\":\"expo.modules.print.PrintModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-router\",\"projects\":[{\"name\":\"expo-router\",\"sourceDir\":\"../../packages/expo-router/android\",\"modules\":[{\"classifier\":\"expo.modules.router.ExpoRouterModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.6\"},{\"packageName\":\"expo-screen-capture\",\"projects\":[{\"name\":\"expo-screen-capture\",\"sourceDir\":\"../../packages/expo-screen-capture/android\",\"modules\":[{\"classifier\":\"expo.modules.screencapture.ScreenCaptureModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-screen-orientation\",\"projects\":[{\"name\":\"expo-screen-orientation\",\"sourceDir\":\"../../packages/expo-screen-orientation/android\",\"modules\":[{\"classifier\":\"expo.modules.screenorientation.ScreenOrientationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-secure-store\",\"projects\":[{\"name\":\"expo-secure-store\",\"sourceDir\":\"../../packages/expo-secure-store/android\",\"modules\":[{\"classifier\":\"expo.modules.securestore.SecureStoreModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sensors\",\"projects\":[{\"name\":\"expo-sensors\",\"sourceDir\":\"../../packages/expo-sensors/android\",\"modules\":[{\"classifier\":\"expo.modules.sensors.modules.AccelerometerModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.BarometerModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.GyroscopeModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.LightSensorModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.DeviceMotionModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.MagnetometerModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.MagnetometerUncalibratedModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.PedometerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sharing\",\"projects\":[{\"name\":\"expo-sharing\",\"sourceDir\":\"../../packages/expo-sharing/android\",\"modules\":[{\"classifier\":\"expo.modules.sharing.SharingModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-sms\",\"projects\":[{\"name\":\"expo-sms\",\"sourceDir\":\"../../packages/expo-sms/android\",\"modules\":[{\"classifier\":\"expo.modules.sms.SMSModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-speech\",\"projects\":[{\"name\":\"expo-speech\",\"sourceDir\":\"../../packages/expo-speech/android\",\"modules\":[{\"classifier\":\"expo.modules.speech.SpeechModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-splash-screen\",\"projects\":[{\"name\":\"expo-splash-screen\",\"sourceDir\":\"../../packages/expo-splash-screen/android\",\"modules\":[{\"classifier\":\"expo.modules.splashscreen.SplashScreenModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"31.0.10\"},{\"packageName\":\"expo-sqlite\",\"projects\":[{\"name\":\"expo-sqlite\",\"sourceDir\":\"../../packages/expo-sqlite/android\",\"modules\":[{\"classifier\":\"expo.modules.sqlite.SQLiteModule\",\"name\":null}],\"services\":[],\"packages\":[],\"shouldUsePublicationScriptPath\":\"../../packages/expo-sqlite/android/shouldUsePublication.groovy\"}],\"packageVersion\":\"16.0.8\"},{\"packageName\":\"expo-store-review\",\"projects\":[{\"name\":\"expo-store-review\",\"sourceDir\":\"../../packages/expo-store-review/android\",\"modules\":[{\"classifier\":\"expo.modules.storereview.StoreReviewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-structured-headers\",\"projects\":[{\"name\":\"expo-structured-headers\",\"sourceDir\":\"../../packages/expo-structured-headers/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"5.0.0\"},{\"packageName\":\"expo-system-ui\",\"projects\":[{\"name\":\"expo-system-ui\",\"sourceDir\":\"../../packages/expo-system-ui/android\",\"modules\":[{\"classifier\":\"expo.modules.systemui.SystemUIModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.systemui.SystemUIPackage\"]}],\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-task-manager\",\"projects\":[{\"name\":\"expo-task-manager\",\"sourceDir\":\"../../packages/expo-task-manager/android\",\"modules\":[{\"classifier\":\"expo.modules.taskManager.TaskManagerModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.taskManager.TaskManagerPackage\"]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-tracking-transparency\",\"projects\":[{\"name\":\"expo-tracking-transparency\",\"sourceDir\":\"../../packages/expo-tracking-transparency/android\",\"modules\":[{\"classifier\":\"expo.modules.trackingtransparency.TrackingTransparencyModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-updates\",\"projects\":[{\"name\":\"expo-updates\",\"sourceDir\":\"../../packages/expo-updates/android\",\"modules\":[{\"classifier\":\"expo.modules.updates.UpdatesModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.updates.UpdatesPackage\"]}],\"plugins\":[{\"id\":\"expo-updates-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-updates/expo-updates-gradle-plugin\",\"applyToRootProject\":true}],\"packageVersion\":\"29.0.10\"},{\"packageName\":\"expo-updates-interface\",\"projects\":[{\"name\":\"expo-updates-interface\",\"sourceDir\":\"../../packages/expo-updates-interface/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-video\",\"projects\":[{\"name\":\"expo-video\",\"sourceDir\":\"../../packages/expo-video/android\",\"modules\":[{\"classifier\":\"expo.modules.video.VideoModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"3.0.11\"},{\"packageName\":\"expo-video-thumbnails\",\"projects\":[{\"name\":\"expo-video-thumbnails\",\"sourceDir\":\"../../packages/expo-video-thumbnails/android\",\"modules\":[{\"classifier\":\"expo.modules.videothumbnails.VideoThumbnailsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-web-browser\",\"projects\":[{\"name\":\"expo-web-browser\",\"sourceDir\":\"../../packages/expo-web-browser/android\",\"modules\":[{\"classifier\":\"expo.modules.webbrowser.WebBrowserModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.webbrowser.WebBrowserPackage\"]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"unimodules-app-loader\",\"projects\":[{\"name\":\"unimodules-app-loader\",\"sourceDir\":\"../../packages/unimodules-app-loader/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.7\"},{\"packageName\":\"worklets-tester\",\"projects\":[{\"name\":\"worklets-tester\",\"sourceDir\":\"modules/worklets-tester/android\",\"modules\":[{\"classifier\":\"expo.modules.worklets.tester.WorkletsTesterModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"\"}],\"configuration\":{\"buildFromSource\":[\".*\"]}}",
      "reasons": [
        "expoAutolinkingAndroid"
      ],
      "hash": "e064f92ae436d7c86f4b8bdb587443e56adabd4b"
    },
    "afterSource": {
      "type": "contents",
      "id": "expoAutolinkingConfig:android",
      "contents": "{\"extraDependencies\":[],\"coreFeatures\":[\"swiftui\",\"compose\"],\"modules\":[{\"packageName\":\"@expo/app-integrity\",\"projects\":[{\"name\":\"expo-app-integrity\",\"sourceDir\":\"../../packages/expo-app-integrity/android\",\"modules\":[{\"classifier\":\"expo.modules.integrity.IntegrityModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.1.7\"},{\"packageName\":\"@expo/dom-webview\",\"projects\":[{\"name\":\"expo-dom-webview\",\"sourceDir\":\"../../packages/@expo/dom-webview/android\",\"modules\":[{\"classifier\":\"expo.modules.webview.DomWebViewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.2.7\"},{\"packageName\":\"@expo/log-box\",\"projects\":[{\"name\":\"expo-log-box\",\"sourceDir\":\"../../packages/@expo/log-box/android\",\"modules\":[],\"services\":[],\"packages\":[\"expo.modules.logbox.ExpoLogBoxPackage\"]}],\"packageVersion\":\"0.0.13-canary-20251023-4c86f95\"},{\"packageName\":\"@expo/ui\",\"projects\":[{\"name\":\"expo-ui\",\"sourceDir\":\"../../packages/expo-ui/android\",\"modules\":[{\"classifier\":\"expo.modules.ui.ExpoUIModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.2.0-beta.10\"},{\"packageName\":\"benchmarking-module\",\"projects\":[{\"name\":\"benchmarking-module\",\"sourceDir\":\"modules/benchmarking/android\",\"modules\":[{\"classifier\":\"expo.modules.benchmark.BenchmarkingExpoModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.0.1\"},{\"packageName\":\"expo\",\"projects\":[{\"name\":\"expo\",\"sourceDir\":\"../../packages/expo/android\",\"modules\":[{\"classifier\":\"expo.modules.fetch.ExpoFetchModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.ExpoModulesPackage\"]}],\"packageVersion\":\"54.0.8\"},{\"packageName\":\"expo-age-range\",\"projects\":[{\"name\":\"expo-age-range\",\"sourceDir\":\"../../packages/expo-age-range/android\",\"modules\":[{\"classifier\":\"expo.modules.agerange.AgeRangeModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.2.0\"},{\"packageName\":\"expo-application\",\"projects\":[{\"name\":\"expo-application\",\"sourceDir\":\"../../packages/expo-application/android\",\"modules\":[{\"classifier\":\"expo.modules.application.ApplicationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"7.0.7\"},{\"packageName\":\"expo-asset\",\"projects\":[{\"name\":\"expo-asset\",\"sourceDir\":\"../../packages/expo-asset/android\",\"modules\":[{\"classifier\":\"expo.modules.asset.AssetModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"12.0.8\"},{\"packageName\":\"expo-audio\",\"projects\":[{\"name\":\"expo-audio\",\"sourceDir\":\"../../packages/expo-audio/android\",\"modules\":[{\"classifier\":\"expo.modules.audio.AudioModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.12\"},{\"packageName\":\"expo-background-fetch\",\"projects\":[{\"name\":\"expo-background-fetch\",\"sourceDir\":\"../../packages/expo-background-fetch/android\",\"modules\":[{\"classifier\":\"expo.modules.backgroundfetch.BackgroundFetchModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-background-task\",\"projects\":[{\"name\":\"expo-background-task\",\"sourceDir\":\"../../packages/expo-background-task/android\",\"modules\":[{\"classifier\":\"expo.modules.backgroundtask.BackgroundTaskModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-battery\",\"projects\":[{\"name\":\"expo-battery\",\"sourceDir\":\"../../packages/expo-battery/android\",\"modules\":[{\"classifier\":\"expo.modules.battery.BatteryModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-blob\",\"projects\":[{\"name\":\"expo-blob\",\"sourceDir\":\"../../packages/expo-blob/android\",\"modules\":[{\"classifier\":\"expo.modules.blob.BlobModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.1.6\"},{\"packageName\":\"expo-blur\",\"projects\":[{\"name\":\"expo-blur\",\"sourceDir\":\"../../packages/expo-blur/android\",\"modules\":[{\"classifier\":\"expo.modules.blur.BlurModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-brightness\",\"projects\":[{\"name\":\"expo-brightness\",\"sourceDir\":\"../../packages/expo-brightness/android\",\"modules\":[{\"classifier\":\"expo.modules.brightness.BrightnessModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-calendar\",\"projects\":[{\"name\":\"expo-calendar\",\"sourceDir\":\"../../packages/expo-calendar/android\",\"modules\":[{\"classifier\":\"expo.modules.calendar.CalendarModule\",\"name\":null},{\"classifier\":\"expo.modules.calendar.next.CalendarNextModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-camera\",\"projects\":[{\"name\":\"expo-camera\",\"sourceDir\":\"../../packages/expo-camera/android\",\"modules\":[{\"classifier\":\"expo.modules.camera.CameraViewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-cellular\",\"projects\":[{\"name\":\"expo-cellular\",\"sourceDir\":\"../../packages/expo-cellular/android\",\"modules\":[{\"classifier\":\"expo.modules.cellular.CellularModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-clipboard\",\"projects\":[{\"name\":\"expo-clipboard\",\"sourceDir\":\"../../packages/expo-clipboard/android\",\"modules\":[{\"classifier\":\"expo.modules.clipboard.ClipboardModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-constants\",\"projects\":[{\"name\":\"expo-constants\",\"sourceDir\":\"../../packages/expo-constants/android\",\"modules\":[{\"classifier\":\"expo.modules.constants.ConstantsModule\",\"name\":null}],\"services\":[\"expo.modules.constants.ConstantsService\"],\"packages\":[]}],\"packageVersion\":\"18.0.9\"},{\"packageName\":\"expo-contacts\",\"projects\":[{\"name\":\"expo-contacts\",\"sourceDir\":\"../../packages/expo-contacts/android\",\"modules\":[{\"classifier\":\"expo.modules.contacts.ContactsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.8\"},{\"packageName\":\"expo-crypto\",\"projects\":[{\"name\":\"expo-crypto\",\"sourceDir\":\"../../packages/expo-crypto/android\",\"modules\":[{\"classifier\":\"expo.modules.crypto.CryptoModule\",\"name\":null},{\"classifier\":\"expo.modules.crypto.aes.AesCryptoModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-dev-client\",\"projects\":[{\"name\":\"expo-dev-client\",\"sourceDir\":\"../../packages/expo-dev-client/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.12\"},{\"packageName\":\"expo-dev-launcher\",\"projects\":[{\"name\":\"expo-dev-launcher\",\"sourceDir\":\"../../packages/expo-dev-launcher/android\",\"modules\":[],\"services\":[],\"packages\":[\"expo.modules.devlauncher.DevLauncherPackage\"]}],\"plugins\":[{\"id\":\"expo-dev-launcher-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-dev-launcher/expo-dev-launcher-gradle-plugin\",\"applyToRootProject\":true}],\"packageVersion\":\"6.0.11\"},{\"packageName\":\"expo-dev-menu\",\"projects\":[{\"name\":\"expo-dev-menu\",\"sourceDir\":\"../../packages/expo-dev-menu/android\",\"modules\":[{\"classifier\":\"expo.modules.devmenu.modules.DevMenuModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.devmenu.DevMenuPackage\"]}],\"packageVersion\":\"7.0.11\"},{\"packageName\":\"expo-dev-menu-interface\",\"projects\":[{\"name\":\"expo-dev-menu-interface\",\"sourceDir\":\"../../packages/expo-dev-menu-interface/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-device\",\"projects\":[{\"name\":\"expo-device\",\"sourceDir\":\"../../packages/expo-device/android\",\"modules\":[{\"classifier\":\"expo.modules.device.DeviceModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-document-picker\",\"projects\":[{\"name\":\"expo-document-picker\",\"sourceDir\":\"../../packages/expo-document-picker/android\",\"modules\":[{\"classifier\":\"expo.modules.documentpicker.DocumentPickerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-eas-client\",\"projects\":[{\"name\":\"expo-eas-client\",\"sourceDir\":\"../../packages/expo-eas-client/android\",\"modules\":[{\"classifier\":\"expo.modules.easclient.EASClientModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-file-system\",\"projects\":[{\"name\":\"expo-file-system\",\"sourceDir\":\"../../packages/expo-file-system/android\",\"modules\":[{\"classifier\":\"expo.modules.filesystem.FileSystemModule\",\"name\":null},{\"classifier\":\"expo.modules.filesystem.legacy.FileSystemLegacyModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"19.0.14\"},{\"packageName\":\"expo-font\",\"projects\":[{\"name\":\"expo-font\",\"sourceDir\":\"../../packages/expo-font/android\",\"modules\":[{\"classifier\":\"expo.modules.font.FontLoaderModule\",\"name\":null},{\"classifier\":\"expo.modules.font.FontUtilsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.8\"},{\"packageName\":\"expo-gl\",\"projects\":[{\"name\":\"expo-gl\",\"sourceDir\":\"../../packages/expo-gl/android\",\"modules\":[{\"classifier\":\"expo.modules.gl.GLModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"16.0.7\"},{\"packageName\":\"expo-haptics\",\"projects\":[{\"name\":\"expo-haptics\",\"sourceDir\":\"../../packages/expo-haptics/android\",\"modules\":[{\"classifier\":\"expo.modules.haptics.HapticsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-image\",\"projects\":[{\"name\":\"expo-image\",\"sourceDir\":\"../../packages/expo-image/android\",\"modules\":[{\"classifier\":\"expo.modules.image.ExpoImageModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"3.0.8\"},{\"packageName\":\"expo-image-loader\",\"projects\":[{\"name\":\"expo-image-loader\",\"sourceDir\":\"../../packages/expo-image-loader/android\",\"modules\":[],\"services\":[\"expo.modules.imageloader.ImageLoaderService\"],\"packages\":[]}],\"packageVersion\":\"6.0.0\"},{\"packageName\":\"expo-image-manipulator\",\"projects\":[{\"name\":\"expo-image-manipulator\",\"sourceDir\":\"../../packages/expo-image-manipulator/android\",\"modules\":[{\"classifier\":\"expo.modules.imagemanipulator.ImageManipulatorModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-image-picker\",\"projects\":[{\"name\":\"expo-image-picker\",\"sourceDir\":\"../../packages/expo-image-picker/android\",\"modules\":[{\"classifier\":\"expo.modules.imagepicker.ImagePickerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-insights\",\"projects\":[{\"name\":\"expo-insights\",\"sourceDir\":\"../../packages/expo-insights/android\",\"modules\":[{\"classifier\":\"expo.modules.insights.ExpoInsightsModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.insights.ExpoInsightsPackage\"]}],\"packageVersion\":\"0.10.7\"},{\"packageName\":\"expo-intent-launcher\",\"projects\":[{\"name\":\"expo-intent-launcher\",\"sourceDir\":\"../../packages/expo-intent-launcher/android\",\"modules\":[{\"classifier\":\"expo.modules.intentlauncher.IntentLauncherModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"13.0.7\"},{\"packageName\":\"expo-json-utils\",\"projects\":[{\"name\":\"expo-json-utils\",\"sourceDir\":\"../../packages/expo-json-utils/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"0.15.0\"},{\"packageName\":\"expo-keep-awake\",\"projects\":[{\"name\":\"expo-keep-awake\",\"sourceDir\":\"../../packages/expo-keep-awake/android\",\"modules\":[{\"classifier\":\"expo.modules.keepawake.KeepAwakeModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linear-gradient\",\"projects\":[{\"name\":\"expo-linear-gradient\",\"sourceDir\":\"../../packages/expo-linear-gradient/android\",\"modules\":[{\"classifier\":\"expo.modules.lineargradient.LinearGradientModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linking\",\"projects\":[{\"name\":\"expo-linking\",\"sourceDir\":\"../../packages/expo-linking/android\",\"modules\":[{\"classifier\":\"expo.modules.linking.ExpoLinkingModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.linking.ExpoLinkingPackage\"]}],\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-local-authentication\",\"projects\":[{\"name\":\"expo-local-authentication\",\"sourceDir\":\"../../packages/expo-local-authentication/android\",\"modules\":[{\"classifier\":\"expo.modules.localauthentication.LocalAuthenticationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-localization\",\"projects\":[{\"name\":\"expo-localization\",\"sourceDir\":\"../../packages/expo-localization/android\",\"modules\":[{\"classifier\":\"expo.modules.localization.LocalizationModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.localization.LocalizationPackage\"]}],\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-location\",\"projects\":[{\"name\":\"expo-location\",\"sourceDir\":\"../../packages/expo-location/android\",\"modules\":[{\"classifier\":\"expo.modules.location.LocationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"19.0.7\"},{\"packageName\":\"expo-mail-composer\",\"projects\":[{\"name\":\"expo-mail-composer\",\"sourceDir\":\"../../packages/expo-mail-composer/android\",\"modules\":[{\"classifier\":\"expo.modules.mailcomposer.MailComposerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-manifests\",\"projects\":[{\"name\":\"expo-manifests\",\"sourceDir\":\"../../packages/expo-manifests/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"1.0.8\"},{\"packageName\":\"expo-maps\",\"projects\":[{\"name\":\"expo-maps\",\"sourceDir\":\"../../packages/expo-maps/android\",\"modules\":[{\"classifier\":\"expo.modules.maps.MapsModule\",\"name\":null},{\"classifier\":\"expo.modules.maps.GoogleMapsModule\",\"name\":null},{\"classifier\":\"expo.modules.maps.StreetViewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.12.7\"},{\"packageName\":\"expo-media-library\",\"projects\":[{\"name\":\"expo-media-library\",\"sourceDir\":\"../../packages/expo-media-library/android\",\"modules\":[{\"classifier\":\"expo.modules.medialibrary.MediaLibraryModule\",\"name\":null},{\"classifier\":\"expo.modules.medialibrary.next.MediaLibraryNextModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"18.2.0\"},{\"packageName\":\"expo-mesh-gradient\",\"projects\":[{\"name\":\"expo-mesh-gradient\",\"sourceDir\":\"../../packages/expo-mesh-gradient/android\",\"modules\":[{\"classifier\":\"expo.modules.meshgradient.MeshGradientModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.4.7\"},{\"packageName\":\"expo-modules-core\",\"projects\":[{\"name\":\"expo-modules-core\",\"sourceDir\":\"../../packages/expo-modules-core/android\",\"modules\":[],\"services\":[],\"packages\":[\"expo.modules.adapters.react.ReactAdapterPackage\",\"expo.modules.core.BasePackage\",\"expo.modules.kotlin.edgeToEdge.EdgeToEdgePackage\"]}],\"plugins\":[{\"id\":\"expo-module-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-modules-core/expo-module-gradle-plugin\",\"applyToRootProject\":false}],\"packageVersion\":\"3.0.16\"},{\"packageName\":\"expo-navigation-bar\",\"projects\":[{\"name\":\"expo-navigation-bar\",\"sourceDir\":\"../../packages/expo-navigation-bar/android\",\"modules\":[{\"classifier\":\"expo.modules.navigationbar.NavigationBarModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.navigationbar.NavigationBarPackage\"]}],\"packageVersion\":\"5.0.8\"},{\"packageName\":\"expo-network\",\"projects\":[{\"name\":\"expo-network\",\"sourceDir\":\"../../packages/expo-network/android\",\"modules\":[{\"classifier\":\"expo.modules.network.NetworkModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-network-addons\",\"projects\":[{\"name\":\"expo-network-addons\",\"sourceDir\":\"../../packages/expo-network-addons/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"plugins\":[{\"id\":\"expo-network-addons-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-network-addons/expo-network-addons-gradle-plugin\",\"applyToRootProject\":true}],\"packageVersion\":\"0.10.7\"},{\"packageName\":\"expo-notifications\",\"projects\":[{\"name\":\"expo-notifications\",\"sourceDir\":\"../../packages/expo-notifications/android\",\"modules\":[{\"classifier\":\"expo.modules.notifications.badge.BadgeModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.background.ExpoBackgroundNotificationTasksModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.categories.ExpoNotificationCategoriesModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.channels.NotificationChannelGroupManagerModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.channels.NotificationChannelManagerModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.emitting.NotificationsEmitter\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.handling.NotificationsHandler\",\"name\":null},{\"classifier\":\"expo.modules.notifications.permissions.NotificationPermissionsModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.presentation.ExpoNotificationPresentationModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.scheduling.NotificationScheduler\",\"name\":null},{\"classifier\":\"expo.modules.notifications.serverregistration.ServerRegistrationModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.tokens.PushTokenModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.topics.TopicSubscriptionModule\",\"name\":null},{\"classifier\":\"expo.modules.notifications.notifications.channels.AndroidXNotificationsChannelsProvider\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.notifications.NotificationsPackage\"]}],\"packageVersion\":\"0.32.11\"},{\"packageName\":\"expo-print\",\"projects\":[{\"name\":\"expo-print\",\"sourceDir\":\"../../packages/expo-print/android\",\"modules\":[{\"classifier\":\"expo.modules.print.PrintModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-router\",\"projects\":[{\"name\":\"expo-router\",\"sourceDir\":\"../../packages/expo-router/android\",\"modules\":[{\"classifier\":\"expo.modules.router.ExpoRouterModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.6\"},{\"packageName\":\"expo-screen-capture\",\"projects\":[{\"name\":\"expo-screen-capture\",\"sourceDir\":\"../../packages/expo-screen-capture/android\",\"modules\":[{\"classifier\":\"expo.modules.screencapture.ScreenCaptureModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-screen-orientation\",\"projects\":[{\"name\":\"expo-screen-orientation\",\"sourceDir\":\"../../packages/expo-screen-orientation/android\",\"modules\":[{\"classifier\":\"expo.modules.screenorientation.ScreenOrientationModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-secure-store\",\"projects\":[{\"name\":\"expo-secure-store\",\"sourceDir\":\"../../packages/expo-secure-store/android\",\"modules\":[{\"classifier\":\"expo.modules.securestore.SecureStoreModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sensors\",\"projects\":[{\"name\":\"expo-sensors\",\"sourceDir\":\"../../packages/expo-sensors/android\",\"modules\":[{\"classifier\":\"expo.modules.sensors.modules.AccelerometerModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.BarometerModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.GyroscopeModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.LightSensorModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.DeviceMotionModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.MagnetometerModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.MagnetometerUncalibratedModule\",\"name\":null},{\"classifier\":\"expo.modules.sensors.modules.PedometerModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sharing\",\"projects\":[{\"name\":\"expo-sharing\",\"sourceDir\":\"../../packages/expo-sharing/android\",\"modules\":[{\"classifier\":\"expo.modules.sharing.SharingModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-sms\",\"projects\":[{\"name\":\"expo-sms\",\"sourceDir\":\"../../packages/expo-sms/android\",\"modules\":[{\"classifier\":\"expo.modules.sms.SMSModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-speech\",\"projects\":[{\"name\":\"expo-speech\",\"sourceDir\":\"../../packages/expo-speech/android\",\"modules\":[{\"classifier\":\"expo.modules.speech.SpeechModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-splash-screen\",\"projects\":[{\"name\":\"expo-splash-screen\",\"sourceDir\":\"../../packages/expo-splash-screen/android\",\"modules\":[{\"classifier\":\"expo.modules.splashscreen.SplashScreenModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"31.0.10\"},{\"packageName\":\"expo-sqlite\",\"projects\":[{\"name\":\"expo-sqlite\",\"sourceDir\":\"../../packages/expo-sqlite/android\",\"modules\":[{\"classifier\":\"expo.modules.sqlite.SQLiteModule\",\"name\":null}],\"services\":[],\"packages\":[],\"shouldUsePublicationScriptPath\":\"../../packages/expo-sqlite/android/shouldUsePublication.groovy\"}],\"packageVersion\":\"16.0.8\"},{\"packageName\":\"expo-store-review\",\"projects\":[{\"name\":\"expo-store-review\",\"sourceDir\":\"../../packages/expo-store-review/android\",\"modules\":[{\"classifier\":\"expo.modules.storereview.StoreReviewModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-structured-headers\",\"projects\":[{\"name\":\"expo-structured-headers\",\"sourceDir\":\"../../packages/expo-structured-headers/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"5.0.0\"},{\"packageName\":\"expo-system-ui\",\"projects\":[{\"name\":\"expo-system-ui\",\"sourceDir\":\"../../packages/expo-system-ui/android\",\"modules\":[{\"classifier\":\"expo.modules.systemui.SystemUIModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.systemui.SystemUIPackage\"]}],\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-task-manager\",\"projects\":[{\"name\":\"expo-task-manager\",\"sourceDir\":\"../../packages/expo-task-manager/android\",\"modules\":[{\"classifier\":\"expo.modules.taskManager.TaskManagerModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.taskManager.TaskManagerPackage\"]}],\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-tracking-transparency\",\"projects\":[{\"name\":\"expo-tracking-transparency\",\"sourceDir\":\"../../packages/expo-tracking-transparency/android\",\"modules\":[{\"classifier\":\"expo.modules.trackingtransparency.TrackingTransparencyModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-updates\",\"projects\":[{\"name\":\"expo-updates\",\"sourceDir\":\"../../packages/expo-updates/android\",\"modules\":[{\"classifier\":\"expo.modules.updates.UpdatesModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.updates.UpdatesPackage\"]}],\"plugins\":[{\"id\":\"expo-updates-gradle-plugin\",\"group\":\"expo.modules\",\"sourceDir\":\"../../packages/expo-updates/expo-updates-gradle-plugin\",\"applyToRootProject\":true}],\"packageVersion\":\"29.0.10\"},{\"packageName\":\"expo-updates-interface\",\"projects\":[{\"name\":\"expo-updates-interface\",\"sourceDir\":\"../../packages/expo-updates-interface/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-video\",\"projects\":[{\"name\":\"expo-video\",\"sourceDir\":\"../../packages/expo-video/android\",\"modules\":[{\"classifier\":\"expo.modules.video.VideoModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"3.0.11\"},{\"packageName\":\"expo-video-thumbnails\",\"projects\":[{\"name\":\"expo-video-thumbnails\",\"sourceDir\":\"../../packages/expo-video-thumbnails/android\",\"modules\":[{\"classifier\":\"expo.modules.videothumbnails.VideoThumbnailsModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-web-browser\",\"projects\":[{\"name\":\"expo-web-browser\",\"sourceDir\":\"../../packages/expo-web-browser/android\",\"modules\":[{\"classifier\":\"expo.modules.webbrowser.WebBrowserModule\",\"name\":null}],\"services\":[],\"packages\":[\"expo.modules.webbrowser.WebBrowserPackage\"]}],\"packageVersion\":\"15.0.7\"},{\"packageName\":\"unimodules-app-loader\",\"projects\":[{\"name\":\"unimodules-app-loader\",\"sourceDir\":\"../../packages/unimodules-app-loader/android\",\"modules\":[],\"services\":[],\"packages\":[]}],\"packageVersion\":\"6.0.7\"},{\"packageName\":\"worklets-tester\",\"projects\":[{\"name\":\"worklets-tester\",\"sourceDir\":\"modules/worklets-tester/android\",\"modules\":[{\"classifier\":\"expo.modules.worklets.tester.WorkletsTesterModule\",\"name\":null}],\"services\":[],\"packages\":[]}],\"packageVersion\":\"\"}],\"configuration\":{\"buildFromSource\":[\".*\"]}}",
      "reasons": [
        "expoAutolinkingAndroid"
      ],
      "hash": "2632ad2496c2ff432e8c12ac29685c33ac2281f3"
    }
  },
  {
    "op": "changed",
    "beforeSource": {
      "type": "contents",
      "id": "expoAutolinkingConfig:ios",
      "contents": "{\"extraDependencies\":[],\"coreFeatures\":[\"swiftui\",\"compose\"],\"modules\":[{\"packageName\":\"@expo/app-integrity\",\"pods\":[{\"podName\":\"ExpoAppIntegrity\",\"podspecDir\":\"../../packages/expo-app-integrity/ios\"}],\"swiftModuleNames\":[\"ExpoAppIntegrity\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"IntegrityModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.1.7\"},{\"packageName\":\"@expo/dom-webview\",\"pods\":[{\"podName\":\"ExpoDomWebView\",\"podspecDir\":\"../../packages/@expo/dom-webview/ios\"}],\"swiftModuleNames\":[\"ExpoDomWebView\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DomWebViewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.2.7\"},{\"packageName\":\"@expo/log-box\",\"pods\":[{\"podName\":\"ExpoLogBox\",\"podspecDir\":\"../../packages/@expo/log-box\"}],\"swiftModuleNames\":[\"ExpoLogBox\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.0.13-canary-20251023-4c86f95\"},{\"packageName\":\"@expo/ui\",\"pods\":[{\"podName\":\"ExpoUI\",\"podspecDir\":\"../../packages/expo-ui/ios\"}],\"swiftModuleNames\":[\"ExpoUI\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoUIModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.2.0-beta.10\"},{\"packageName\":\"benchmarking-module\",\"pods\":[{\"podName\":\"BenchmarkingModule\",\"podspecDir\":\"modules/benchmarking/ios\"}],\"swiftModuleNames\":[\"BenchmarkingModule\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BenchmarkingExpoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.0.1\"},{\"packageName\":\"expo\",\"pods\":[{\"podName\":\"Expo\",\"podspecDir\":\"../../packages/expo\"}],\"swiftModuleNames\":[\"Expo\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoFetchModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"54.0.8\"},{\"packageName\":\"expo-age-range\",\"pods\":[{\"podName\":\"ExpoAgeRange\",\"podspecDir\":\"../../packages/expo-age-range/ios\"}],\"swiftModuleNames\":[\"ExpoAgeRange\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AgeRangeModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.2.0\"},{\"packageName\":\"expo-apple-authentication\",\"pods\":[{\"podName\":\"ExpoAppleAuthentication\",\"podspecDir\":\"../../packages/expo-apple-authentication/ios\"}],\"swiftModuleNames\":[\"ExpoAppleAuthentication\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AppleAuthenticationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-application\",\"pods\":[{\"podName\":\"EXApplication\",\"podspecDir\":\"../../packages/expo-application/ios\"}],\"swiftModuleNames\":[\"EXApplication\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ApplicationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"7.0.7\"},{\"packageName\":\"expo-asset\",\"pods\":[{\"podName\":\"ExpoAsset\",\"podspecDir\":\"../../packages/expo-asset/ios\"}],\"swiftModuleNames\":[\"ExpoAsset\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AssetModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"12.0.8\"},{\"packageName\":\"expo-audio\",\"pods\":[{\"podName\":\"ExpoAudio\",\"podspecDir\":\"../../packages/expo-audio/ios\"}],\"swiftModuleNames\":[\"ExpoAudio\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AudioModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.12\"},{\"packageName\":\"expo-background-fetch\",\"pods\":[{\"podName\":\"ExpoBackgroundFetch\",\"podspecDir\":\"../../packages/expo-background-fetch/ios\"}],\"swiftModuleNames\":[\"ExpoBackgroundFetch\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BackgroundFetchModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-background-task\",\"pods\":[{\"podName\":\"ExpoBackgroundTask\",\"podspecDir\":\"../../packages/expo-background-task/ios\"}],\"swiftModuleNames\":[\"ExpoBackgroundTask\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BackgroundTaskModule\"}],\"appDelegateSubscribers\":[\"BackgroundTaskAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-battery\",\"pods\":[{\"podName\":\"ExpoBattery\",\"podspecDir\":\"../../packages/expo-battery/ios\"}],\"swiftModuleNames\":[\"ExpoBattery\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BatteryModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-blob\",\"pods\":[{\"podName\":\"ExpoBlob\",\"podspecDir\":\"../../packages/expo-blob/ios\"}],\"swiftModuleNames\":[\"ExpoBlob\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoBlob\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.1.6\"},{\"packageName\":\"expo-blur\",\"pods\":[{\"podName\":\"ExpoBlur\",\"podspecDir\":\"../../packages/expo-blur/ios\"}],\"swiftModuleNames\":[\"ExpoBlur\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BlurViewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-brightness\",\"pods\":[{\"podName\":\"ExpoBrightness\",\"podspecDir\":\"../../packages/expo-brightness/ios\"}],\"swiftModuleNames\":[\"ExpoBrightness\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BrightnessModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-calendar\",\"pods\":[{\"podName\":\"ExpoCalendar\",\"podspecDir\":\"../../packages/expo-calendar/ios\"}],\"swiftModuleNames\":[\"ExpoCalendar\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CalendarModule\"},{\"name\":null,\"class\":\"CalendarNextModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-camera\",\"pods\":[{\"podName\":\"ExpoCamera\",\"podspecDir\":\"../../packages/expo-camera/ios\"}],\"swiftModuleNames\":[\"ExpoCamera\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CameraViewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-cellular\",\"pods\":[{\"podName\":\"ExpoCellular\",\"podspecDir\":\"../../packages/expo-cellular/ios\"}],\"swiftModuleNames\":[\"ExpoCellular\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CellularModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-clipboard\",\"pods\":[{\"podName\":\"ExpoClipboard\",\"podspecDir\":\"../../packages/expo-clipboard/ios\"}],\"swiftModuleNames\":[\"ExpoClipboard\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ClipboardModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-constants\",\"pods\":[{\"podName\":\"EXConstants\",\"podspecDir\":\"../../packages/expo-constants/ios\"}],\"swiftModuleNames\":[\"EXConstants\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ConstantsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"18.0.9\"},{\"packageName\":\"expo-contacts\",\"pods\":[{\"podName\":\"ExpoContacts\",\"podspecDir\":\"../../packages/expo-contacts/ios\"}],\"swiftModuleNames\":[\"ExpoContacts\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ContactsModule\"},{\"name\":null,\"class\":\"ContactAccessButtonModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.8\"},{\"packageName\":\"expo-crypto\",\"pods\":[{\"podName\":\"ExpoCrypto\",\"podspecDir\":\"../../packages/expo-crypto/ios\"}],\"swiftModuleNames\":[\"ExpoCrypto\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CryptoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-dev-client\",\"pods\":[{\"podName\":\"expo-dev-client\",\"podspecDir\":\"../../packages/expo-dev-client/ios\"}],\"swiftModuleNames\":[\"expo_dev_client\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.12\"},{\"packageName\":\"expo-dev-launcher\",\"pods\":[{\"podName\":\"expo-dev-launcher\",\"podspecDir\":\"../../packages/expo-dev-launcher\"}],\"swiftModuleNames\":[\"EXDevLauncher\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[\"ExpoDevLauncherAppDelegateSubscriber\"],\"reactDelegateHandlers\":[\"ExpoDevLauncherReactDelegateHandler\"],\"debugOnly\":true,\"packageVersion\":\"6.0.11\"},{\"packageName\":\"expo-dev-menu\",\"pods\":[{\"podName\":\"expo-dev-menu\",\"podspecDir\":\"../../packages/expo-dev-menu\"}],\"swiftModuleNames\":[\"EXDevMenu\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DevMenuModule\"},{\"name\":null,\"class\":\"DevMenuInternalModule\"},{\"name\":null,\"class\":\"DevMenuPreferences\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[\"ExpoDevMenuReactDelegateHandler\"],\"debugOnly\":true,\"packageVersion\":\"7.0.11\"},{\"packageName\":\"expo-dev-menu-interface\",\"pods\":[{\"podName\":\"expo-dev-menu-interface\",\"podspecDir\":\"../../packages/expo-dev-menu-interface/ios\"}],\"swiftModuleNames\":[\"expo_dev_menu_interface\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-device\",\"pods\":[{\"podName\":\"ExpoDevice\",\"podspecDir\":\"../../packages/expo-device/ios\"}],\"swiftModuleNames\":[\"ExpoDevice\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DeviceModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-document-picker\",\"pods\":[{\"podName\":\"ExpoDocumentPicker\",\"podspecDir\":\"../../packages/expo-document-picker/ios\"}],\"swiftModuleNames\":[\"ExpoDocumentPicker\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DocumentPickerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-eas-client\",\"pods\":[{\"podName\":\"EASClient\",\"podspecDir\":\"../../packages/expo-eas-client/ios\"}],\"swiftModuleNames\":[\"EASClient\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"EASClientModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-file-system\",\"pods\":[{\"podName\":\"ExpoFileSystem\",\"podspecDir\":\"../../packages/expo-file-system/ios\"}],\"swiftModuleNames\":[\"ExpoFileSystem\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"FileSystemModule\"},{\"name\":null,\"class\":\"FileSystemLegacyModule\"}],\"appDelegateSubscribers\":[\"FileSystemBackgroundSessionHandler\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"19.0.14\"},{\"packageName\":\"expo-font\",\"pods\":[{\"podName\":\"ExpoFont\",\"podspecDir\":\"../../packages/expo-font/ios\"}],\"swiftModuleNames\":[\"ExpoFont\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"FontLoaderModule\"},{\"name\":null,\"class\":\"FontUtilsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.8\"},{\"packageName\":\"expo-gl\",\"pods\":[{\"podName\":\"ExpoGL\",\"podspecDir\":\"../../packages/expo-gl\"}],\"swiftModuleNames\":[\"ExpoGL\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoGLModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"16.0.7\"},{\"packageName\":\"expo-glass-effect\",\"pods\":[{\"podName\":\"ExpoGlassEffect\",\"podspecDir\":\"../../packages/expo-glass-effect/ios\"}],\"swiftModuleNames\":[\"ExpoGlassEffect\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"GlassEffectModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.1.3\"},{\"packageName\":\"expo-haptics\",\"pods\":[{\"podName\":\"ExpoHaptics\",\"podspecDir\":\"../../packages/expo-haptics/ios\"}],\"swiftModuleNames\":[\"ExpoHaptics\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"HapticsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-image\",\"pods\":[{\"podName\":\"ExpoImage\",\"podspecDir\":\"../../packages/expo-image/ios\"}],\"swiftModuleNames\":[\"ExpoImage\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ImageModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"3.0.8\"},{\"packageName\":\"expo-image-manipulator\",\"pods\":[{\"podName\":\"ExpoImageManipulator\",\"podspecDir\":\"../../packages/expo-image-manipulator/ios\"}],\"swiftModuleNames\":[\"ExpoImageManipulator\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ImageManipulatorModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-image-picker\",\"pods\":[{\"podName\":\"ExpoImagePicker\",\"podspecDir\":\"../../packages/expo-image-picker/ios\"}],\"swiftModuleNames\":[\"ExpoImagePicker\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ImagePickerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-insights\",\"pods\":[{\"podName\":\"ExpoInsights\",\"podspecDir\":\"../../packages/expo-insights/ios\"}],\"swiftModuleNames\":[\"ExpoInsights\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"InsightsModule\"}],\"appDelegateSubscribers\":[\"InsightsAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.10.7\"},{\"packageName\":\"expo-json-utils\",\"pods\":[{\"podName\":\"EXJSONUtils\",\"podspecDir\":\"../../packages/expo-json-utils/ios\"}],\"swiftModuleNames\":[\"EXJSONUtils\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.15.0\"},{\"packageName\":\"expo-keep-awake\",\"pods\":[{\"podName\":\"ExpoKeepAwake\",\"podspecDir\":\"../../packages/expo-keep-awake/ios\"}],\"swiftModuleNames\":[\"ExpoKeepAwake\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"KeepAwakeModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linear-gradient\",\"pods\":[{\"podName\":\"ExpoLinearGradient\",\"podspecDir\":\"../../packages/expo-linear-gradient/ios\"}],\"swiftModuleNames\":[\"ExpoLinearGradient\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LinearGradientModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linking\",\"pods\":[{\"podName\":\"ExpoLinking\",\"podspecDir\":\"../../packages/expo-linking/ios\"}],\"swiftModuleNames\":[\"ExpoLinking\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoLinkingModule\"}],\"appDelegateSubscribers\":[\"LinkingAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-live-photo\",\"pods\":[{\"podName\":\"ExpoLivePhoto\",\"podspecDir\":\"../../packages/expo-live-photo/ios\"}],\"swiftModuleNames\":[\"ExpoLivePhoto\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LivePhotoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-local-authentication\",\"pods\":[{\"podName\":\"ExpoLocalAuthentication\",\"podspecDir\":\"../../packages/expo-local-authentication/ios\"}],\"swiftModuleNames\":[\"ExpoLocalAuthentication\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LocalAuthenticationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-localization\",\"pods\":[{\"podName\":\"ExpoLocalization\",\"podspecDir\":\"../../packages/expo-localization/ios\"}],\"swiftModuleNames\":[\"ExpoLocalization\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LocalizationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-location\",\"pods\":[{\"podName\":\"ExpoLocation\",\"podspecDir\":\"../../packages/expo-location/ios\"}],\"swiftModuleNames\":[\"ExpoLocation\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LocationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"19.0.7\"},{\"packageName\":\"expo-mail-composer\",\"pods\":[{\"podName\":\"ExpoMailComposer\",\"podspecDir\":\"../../packages/expo-mail-composer/ios\"}],\"swiftModuleNames\":[\"ExpoMailComposer\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MailComposerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-manifests\",\"pods\":[{\"podName\":\"EXManifests\",\"podspecDir\":\"../../packages/expo-manifests/ios\"}],\"swiftModuleNames\":[\"EXManifests\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.8\"},{\"packageName\":\"expo-maps\",\"pods\":[{\"podName\":\"ExpoMaps\",\"podspecDir\":\"../../packages/expo-maps/ios\"}],\"swiftModuleNames\":[\"ExpoMaps\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MapsModule\"},{\"name\":null,\"class\":\"AppleMapsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.12.7\"},{\"packageName\":\"expo-media-library\",\"pods\":[{\"podName\":\"ExpoMediaLibrary\",\"podspecDir\":\"../../packages/expo-media-library/ios\"}],\"swiftModuleNames\":[\"ExpoMediaLibrary\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MediaLibraryModule\"},{\"name\":null,\"class\":\"MediaLibraryNextModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"18.2.0\"},{\"packageName\":\"expo-mesh-gradient\",\"pods\":[{\"podName\":\"ExpoMeshGradient\",\"podspecDir\":\"../../packages/expo-mesh-gradient/ios\"}],\"swiftModuleNames\":[\"ExpoMeshGradient\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MeshGradientModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.4.7\"},{\"packageName\":\"expo-modules-core\",\"pods\":[{\"podName\":\"ExpoModulesCore\",\"podspecDir\":\"../../packages/expo-modules-core\"},{\"podName\":\"ExpoModulesJSI\",\"podspecDir\":\"../../packages/expo-modules-core\"}],\"swiftModuleNames\":[\"ExpoModulesCore\",\"ExpoModulesJSI\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"3.0.16\"},{\"packageName\":\"expo-network\",\"pods\":[{\"podName\":\"ExpoNetwork\",\"podspecDir\":\"../../packages/expo-network/ios\"}],\"swiftModuleNames\":[\"ExpoNetwork\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"NetworkModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-notifications\",\"pods\":[{\"podName\":\"EXNotifications\",\"podspecDir\":\"../../packages/expo-notifications/ios\"}],\"swiftModuleNames\":[\"EXNotifications\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BackgroundModule\"},{\"name\":null,\"class\":\"BadgeModule\"},{\"name\":null,\"class\":\"CategoriesModule\"},{\"name\":null,\"class\":\"EmitterModule\"},{\"name\":null,\"class\":\"HandlerModule\"},{\"name\":null,\"class\":\"PermissionsModule\"},{\"name\":null,\"class\":\"PresentationModule\"},{\"name\":null,\"class\":\"PushTokenModule\"},{\"name\":null,\"class\":\"SchedulerModule\"},{\"name\":null,\"class\":\"ServerRegistrationModule\"}],\"appDelegateSubscribers\":[\"NotificationsAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.32.11\"},{\"packageName\":\"expo-print\",\"pods\":[{\"podName\":\"ExpoPrint\",\"podspecDir\":\"../../packages/expo-print/ios\"}],\"swiftModuleNames\":[\"ExpoPrint\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoPrintModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-router\",\"pods\":[{\"podName\":\"ExpoRouter\",\"podspecDir\":\"../../packages/expo-router/ios\"}],\"swiftModuleNames\":[\"ExpoRouter\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoHeadModule\"},{\"name\":null,\"class\":\"LinkPreviewNativeModule\"},{\"name\":null,\"class\":\"RouterToolbarModule\"}],\"appDelegateSubscribers\":[\"ExpoHeadAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.6\"},{\"packageName\":\"expo-screen-capture\",\"pods\":[{\"podName\":\"ExpoScreenCapture\",\"podspecDir\":\"../../packages/expo-screen-capture/ios\"}],\"swiftModuleNames\":[\"ExpoScreenCapture\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ScreenCaptureModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-screen-orientation\",\"pods\":[{\"podName\":\"ExpoScreenOrientation\",\"podspecDir\":\"../../packages/expo-screen-orientation/ios\"}],\"swiftModuleNames\":[\"ExpoScreenOrientation\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ScreenOrientationModule\"}],\"appDelegateSubscribers\":[\"ScreenOrientationAppDelegate\"],\"reactDelegateHandlers\":[\"ScreenOrientationReactDelegateHandler\"],\"debugOnly\":false,\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-secure-store\",\"pods\":[{\"podName\":\"ExpoSecureStore\",\"podspecDir\":\"../../packages/expo-secure-store/ios\"}],\"swiftModuleNames\":[\"ExpoSecureStore\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SecureStoreModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sensors\",\"pods\":[{\"podName\":\"ExpoSensors\",\"podspecDir\":\"../../packages/expo-sensors/ios\"}],\"swiftModuleNames\":[\"ExpoSensors\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AccelerometerModule\"},{\"name\":null,\"class\":\"BarometerModule\"},{\"name\":null,\"class\":\"DeviceMotionModule\"},{\"name\":null,\"class\":\"GyroscopeModule\"},{\"name\":null,\"class\":\"MagnetometerModule\"},{\"name\":null,\"class\":\"MagnetometerUncalibratedModule\"},{\"name\":null,\"class\":\"PedometerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sharing\",\"pods\":[{\"podName\":\"ExpoSharing\",\"podspecDir\":\"../../packages/expo-sharing/ios\"}],\"swiftModuleNames\":[\"ExpoSharing\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SharingModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-sms\",\"pods\":[{\"podName\":\"ExpoSMS\",\"podspecDir\":\"../../packages/expo-sms/ios\"}],\"swiftModuleNames\":[\"ExpoSMS\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoSMSModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-speech\",\"pods\":[{\"podName\":\"ExpoSpeech\",\"podspecDir\":\"../../packages/expo-speech/ios\"}],\"swiftModuleNames\":[\"ExpoSpeech\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SpeechModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-splash-screen\",\"pods\":[{\"podName\":\"ExpoSplashScreen\",\"podspecDir\":\"../../packages/expo-splash-screen/ios\"}],\"swiftModuleNames\":[\"ExpoSplashScreen\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SplashScreenModule\"}],\"appDelegateSubscribers\":[\"SplashScreenAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"31.0.10\"},{\"packageName\":\"expo-sqlite\",\"pods\":[{\"podName\":\"ExpoSQLite\",\"podspecDir\":\"../../packages/expo-sqlite/ios\"}],\"swiftModuleNames\":[\"ExpoSQLite\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SQLiteModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"16.0.8\"},{\"packageName\":\"expo-store-review\",\"pods\":[{\"podName\":\"ExpoStoreReview\",\"podspecDir\":\"../../packages/expo-store-review/ios\"}],\"swiftModuleNames\":[\"ExpoStoreReview\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"StoreReviewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-structured-headers\",\"pods\":[{\"podName\":\"EXStructuredHeaders\",\"podspecDir\":\"../../packages/expo-structured-headers/ios\"}],\"swiftModuleNames\":[\"EXStructuredHeaders\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"5.0.0\"},{\"packageName\":\"expo-symbols\",\"pods\":[{\"podName\":\"ExpoSymbols\",\"podspecDir\":\"../../packages/expo-symbols/ios\"}],\"swiftModuleNames\":[\"ExpoSymbols\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SymbolModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-system-ui\",\"pods\":[{\"podName\":\"ExpoSystemUI\",\"podspecDir\":\"../../packages/expo-system-ui/ios\"}],\"swiftModuleNames\":[\"ExpoSystemUI\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoSystemUIModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-task-manager\",\"pods\":[{\"podName\":\"ExpoTaskManager\",\"podspecDir\":\"../../packages/expo-task-manager/ios\"}],\"swiftModuleNames\":[\"ExpoTaskManager\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"TaskManagerModule\"}],\"appDelegateSubscribers\":[\"TaskManagerAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-tracking-transparency\",\"pods\":[{\"podName\":\"ExpoTrackingTransparency\",\"podspecDir\":\"../../packages/expo-tracking-transparency/ios\"}],\"swiftModuleNames\":[\"ExpoTrackingTransparency\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"TrackingTransparencyModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-updates\",\"pods\":[{\"podName\":\"EXUpdates\",\"podspecDir\":\"../../packages/expo-updates/ios\"}],\"swiftModuleNames\":[\"EXUpdates\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"UpdatesModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[\"ExpoUpdatesReactDelegateHandler\"],\"debugOnly\":false,\"packageVersion\":\"29.0.10\"},{\"packageName\":\"expo-updates-interface\",\"pods\":[{\"podName\":\"EXUpdatesInterface\",\"podspecDir\":\"../../packages/expo-updates-interface/ios\"}],\"swiftModuleNames\":[\"EXUpdatesInterface\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-video\",\"pods\":[{\"podName\":\"ExpoVideo\",\"podspecDir\":\"../../packages/expo-video/ios\"}],\"swiftModuleNames\":[\"ExpoVideo\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"VideoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"3.0.11\"},{\"packageName\":\"expo-video-thumbnails\",\"pods\":[{\"podName\":\"ExpoVideoThumbnails\",\"podspecDir\":\"../../packages/expo-video-thumbnails/ios\"}],\"swiftModuleNames\":[\"ExpoVideoThumbnails\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"VideoThumbnailsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-web-browser\",\"pods\":[{\"podName\":\"ExpoWebBrowser\",\"podspecDir\":\"../../packages/expo-web-browser/ios\"}],\"swiftModuleNames\":[\"ExpoWebBrowser\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"WebBrowserModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"unimodules-app-loader\",\"pods\":[{\"podName\":\"UMAppLoader\",\"podspecDir\":\"../../packages/unimodules-app-loader/ios\"}],\"swiftModuleNames\":[\"UMAppLoader\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.7\"}]}",
      "reasons": [
        "expoAutolinkingIos"
      ],
      "hash": "d8e176d02dc6da68f9dfed4937c96fb3cf352a5a"
    },
    "afterSource": {
      "type": "contents",
      "id": "expoAutolinkingConfig:ios",
      "contents": "{\"extraDependencies\":[],\"coreFeatures\":[\"swiftui\",\"compose\"],\"modules\":[{\"packageName\":\"@expo/app-integrity\",\"pods\":[{\"podName\":\"ExpoAppIntegrity\",\"podspecDir\":\"../../packages/expo-app-integrity/ios\"}],\"swiftModuleNames\":[\"ExpoAppIntegrity\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"IntegrityModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.1.7\"},{\"packageName\":\"@expo/dom-webview\",\"pods\":[{\"podName\":\"ExpoDomWebView\",\"podspecDir\":\"../../packages/@expo/dom-webview/ios\"}],\"swiftModuleNames\":[\"ExpoDomWebView\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DomWebViewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.2.7\"},{\"packageName\":\"@expo/log-box\",\"pods\":[{\"podName\":\"ExpoLogBox\",\"podspecDir\":\"../../packages/@expo/log-box\"}],\"swiftModuleNames\":[\"ExpoLogBox\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.0.13-canary-20251023-4c86f95\"},{\"packageName\":\"@expo/ui\",\"pods\":[{\"podName\":\"ExpoUI\",\"podspecDir\":\"../../packages/expo-ui/ios\"}],\"swiftModuleNames\":[\"ExpoUI\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoUIModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.2.0-beta.10\"},{\"packageName\":\"benchmarking-module\",\"pods\":[{\"podName\":\"BenchmarkingModule\",\"podspecDir\":\"modules/benchmarking/ios\"}],\"swiftModuleNames\":[\"BenchmarkingModule\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BenchmarkingExpoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.0.1\"},{\"packageName\":\"expo\",\"pods\":[{\"podName\":\"Expo\",\"podspecDir\":\"../../packages/expo\"}],\"swiftModuleNames\":[\"Expo\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoFetchModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"54.0.8\"},{\"packageName\":\"expo-age-range\",\"pods\":[{\"podName\":\"ExpoAgeRange\",\"podspecDir\":\"../../packages/expo-age-range/ios\"}],\"swiftModuleNames\":[\"ExpoAgeRange\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AgeRangeModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.2.0\"},{\"packageName\":\"expo-apple-authentication\",\"pods\":[{\"podName\":\"ExpoAppleAuthentication\",\"podspecDir\":\"../../packages/expo-apple-authentication/ios\"}],\"swiftModuleNames\":[\"ExpoAppleAuthentication\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AppleAuthenticationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-application\",\"pods\":[{\"podName\":\"EXApplication\",\"podspecDir\":\"../../packages/expo-application/ios\"}],\"swiftModuleNames\":[\"EXApplication\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ApplicationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"7.0.7\"},{\"packageName\":\"expo-asset\",\"pods\":[{\"podName\":\"ExpoAsset\",\"podspecDir\":\"../../packages/expo-asset/ios\"}],\"swiftModuleNames\":[\"ExpoAsset\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AssetModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"12.0.8\"},{\"packageName\":\"expo-audio\",\"pods\":[{\"podName\":\"ExpoAudio\",\"podspecDir\":\"../../packages/expo-audio/ios\"}],\"swiftModuleNames\":[\"ExpoAudio\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AudioModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.12\"},{\"packageName\":\"expo-background-fetch\",\"pods\":[{\"podName\":\"ExpoBackgroundFetch\",\"podspecDir\":\"../../packages/expo-background-fetch/ios\"}],\"swiftModuleNames\":[\"ExpoBackgroundFetch\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BackgroundFetchModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-background-task\",\"pods\":[{\"podName\":\"ExpoBackgroundTask\",\"podspecDir\":\"../../packages/expo-background-task/ios\"}],\"swiftModuleNames\":[\"ExpoBackgroundTask\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BackgroundTaskModule\"}],\"appDelegateSubscribers\":[\"BackgroundTaskAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-battery\",\"pods\":[{\"podName\":\"ExpoBattery\",\"podspecDir\":\"../../packages/expo-battery/ios\"}],\"swiftModuleNames\":[\"ExpoBattery\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BatteryModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-blob\",\"pods\":[{\"podName\":\"ExpoBlob\",\"podspecDir\":\"../../packages/expo-blob/ios\"}],\"swiftModuleNames\":[\"ExpoBlob\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoBlob\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.1.6\"},{\"packageName\":\"expo-blur\",\"pods\":[{\"podName\":\"ExpoBlur\",\"podspecDir\":\"../../packages/expo-blur/ios\"}],\"swiftModuleNames\":[\"ExpoBlur\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BlurViewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-brightness\",\"pods\":[{\"podName\":\"ExpoBrightness\",\"podspecDir\":\"../../packages/expo-brightness/ios\"}],\"swiftModuleNames\":[\"ExpoBrightness\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BrightnessModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-calendar\",\"pods\":[{\"podName\":\"ExpoCalendar\",\"podspecDir\":\"../../packages/expo-calendar/ios\"}],\"swiftModuleNames\":[\"ExpoCalendar\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CalendarModule\"},{\"name\":null,\"class\":\"CalendarNextModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-camera\",\"pods\":[{\"podName\":\"ExpoCamera\",\"podspecDir\":\"../../packages/expo-camera/ios\"}],\"swiftModuleNames\":[\"ExpoCamera\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CameraViewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-cellular\",\"pods\":[{\"podName\":\"ExpoCellular\",\"podspecDir\":\"../../packages/expo-cellular/ios\"}],\"swiftModuleNames\":[\"ExpoCellular\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CellularModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-clipboard\",\"pods\":[{\"podName\":\"ExpoClipboard\",\"podspecDir\":\"../../packages/expo-clipboard/ios\"}],\"swiftModuleNames\":[\"ExpoClipboard\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ClipboardModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-constants\",\"pods\":[{\"podName\":\"EXConstants\",\"podspecDir\":\"../../packages/expo-constants/ios\"}],\"swiftModuleNames\":[\"EXConstants\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ConstantsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"18.0.9\"},{\"packageName\":\"expo-contacts\",\"pods\":[{\"podName\":\"ExpoContacts\",\"podspecDir\":\"../../packages/expo-contacts/ios\"}],\"swiftModuleNames\":[\"ExpoContacts\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ContactsModule\"},{\"name\":null,\"class\":\"ContactAccessButtonModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.8\"},{\"packageName\":\"expo-crypto\",\"pods\":[{\"podName\":\"ExpoCrypto\",\"podspecDir\":\"../../packages/expo-crypto/ios\"}],\"swiftModuleNames\":[\"ExpoCrypto\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"CryptoModule\"},{\"name\":null,\"class\":\"AesCryptoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-dev-client\",\"pods\":[{\"podName\":\"expo-dev-client\",\"podspecDir\":\"../../packages/expo-dev-client/ios\"}],\"swiftModuleNames\":[\"expo_dev_client\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.12\"},{\"packageName\":\"expo-dev-launcher\",\"pods\":[{\"podName\":\"expo-dev-launcher\",\"podspecDir\":\"../../packages/expo-dev-launcher\"}],\"swiftModuleNames\":[\"EXDevLauncher\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[\"ExpoDevLauncherAppDelegateSubscriber\"],\"reactDelegateHandlers\":[\"ExpoDevLauncherReactDelegateHandler\"],\"debugOnly\":true,\"packageVersion\":\"6.0.11\"},{\"packageName\":\"expo-dev-menu\",\"pods\":[{\"podName\":\"expo-dev-menu\",\"podspecDir\":\"../../packages/expo-dev-menu\"}],\"swiftModuleNames\":[\"EXDevMenu\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DevMenuModule\"},{\"name\":null,\"class\":\"DevMenuInternalModule\"},{\"name\":null,\"class\":\"DevMenuPreferences\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[\"ExpoDevMenuReactDelegateHandler\"],\"debugOnly\":true,\"packageVersion\":\"7.0.11\"},{\"packageName\":\"expo-dev-menu-interface\",\"pods\":[{\"podName\":\"expo-dev-menu-interface\",\"podspecDir\":\"../../packages/expo-dev-menu-interface/ios\"}],\"swiftModuleNames\":[\"expo_dev_menu_interface\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-device\",\"pods\":[{\"podName\":\"ExpoDevice\",\"podspecDir\":\"../../packages/expo-device/ios\"}],\"swiftModuleNames\":[\"ExpoDevice\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DeviceModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-document-picker\",\"pods\":[{\"podName\":\"ExpoDocumentPicker\",\"podspecDir\":\"../../packages/expo-document-picker/ios\"}],\"swiftModuleNames\":[\"ExpoDocumentPicker\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"DocumentPickerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-eas-client\",\"pods\":[{\"podName\":\"EASClient\",\"podspecDir\":\"../../packages/expo-eas-client/ios\"}],\"swiftModuleNames\":[\"EASClient\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"EASClientModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-file-system\",\"pods\":[{\"podName\":\"ExpoFileSystem\",\"podspecDir\":\"../../packages/expo-file-system/ios\"}],\"swiftModuleNames\":[\"ExpoFileSystem\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"FileSystemModule\"},{\"name\":null,\"class\":\"FileSystemLegacyModule\"}],\"appDelegateSubscribers\":[\"FileSystemBackgroundSessionHandler\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"19.0.14\"},{\"packageName\":\"expo-font\",\"pods\":[{\"podName\":\"ExpoFont\",\"podspecDir\":\"../../packages/expo-font/ios\"}],\"swiftModuleNames\":[\"ExpoFont\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"FontLoaderModule\"},{\"name\":null,\"class\":\"FontUtilsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.8\"},{\"packageName\":\"expo-gl\",\"pods\":[{\"podName\":\"ExpoGL\",\"podspecDir\":\"../../packages/expo-gl\"}],\"swiftModuleNames\":[\"ExpoGL\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoGLModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"16.0.7\"},{\"packageName\":\"expo-glass-effect\",\"pods\":[{\"podName\":\"ExpoGlassEffect\",\"podspecDir\":\"../../packages/expo-glass-effect/ios\"}],\"swiftModuleNames\":[\"ExpoGlassEffect\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"GlassEffectModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.1.3\"},{\"packageName\":\"expo-haptics\",\"pods\":[{\"podName\":\"ExpoHaptics\",\"podspecDir\":\"../../packages/expo-haptics/ios\"}],\"swiftModuleNames\":[\"ExpoHaptics\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"HapticsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-image\",\"pods\":[{\"podName\":\"ExpoImage\",\"podspecDir\":\"../../packages/expo-image/ios\"}],\"swiftModuleNames\":[\"ExpoImage\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ImageModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"3.0.8\"},{\"packageName\":\"expo-image-manipulator\",\"pods\":[{\"podName\":\"ExpoImageManipulator\",\"podspecDir\":\"../../packages/expo-image-manipulator/ios\"}],\"swiftModuleNames\":[\"ExpoImageManipulator\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ImageManipulatorModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-image-picker\",\"pods\":[{\"podName\":\"ExpoImagePicker\",\"podspecDir\":\"../../packages/expo-image-picker/ios\"}],\"swiftModuleNames\":[\"ExpoImagePicker\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ImagePickerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.8\"},{\"packageName\":\"expo-insights\",\"pods\":[{\"podName\":\"ExpoInsights\",\"podspecDir\":\"../../packages/expo-insights/ios\"}],\"swiftModuleNames\":[\"ExpoInsights\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"InsightsModule\"}],\"appDelegateSubscribers\":[\"InsightsAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.10.7\"},{\"packageName\":\"expo-json-utils\",\"pods\":[{\"podName\":\"EXJSONUtils\",\"podspecDir\":\"../../packages/expo-json-utils/ios\"}],\"swiftModuleNames\":[\"EXJSONUtils\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.15.0\"},{\"packageName\":\"expo-keep-awake\",\"pods\":[{\"podName\":\"ExpoKeepAwake\",\"podspecDir\":\"../../packages/expo-keep-awake/ios\"}],\"swiftModuleNames\":[\"ExpoKeepAwake\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"KeepAwakeModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linear-gradient\",\"pods\":[{\"podName\":\"ExpoLinearGradient\",\"podspecDir\":\"../../packages/expo-linear-gradient/ios\"}],\"swiftModuleNames\":[\"ExpoLinearGradient\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LinearGradientModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-linking\",\"pods\":[{\"podName\":\"ExpoLinking\",\"podspecDir\":\"../../packages/expo-linking/ios\"}],\"swiftModuleNames\":[\"ExpoLinking\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoLinkingModule\"}],\"appDelegateSubscribers\":[\"LinkingAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-live-photo\",\"pods\":[{\"podName\":\"ExpoLivePhoto\",\"podspecDir\":\"../../packages/expo-live-photo/ios\"}],\"swiftModuleNames\":[\"ExpoLivePhoto\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LivePhotoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-local-authentication\",\"pods\":[{\"podName\":\"ExpoLocalAuthentication\",\"podspecDir\":\"../../packages/expo-local-authentication/ios\"}],\"swiftModuleNames\":[\"ExpoLocalAuthentication\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LocalAuthenticationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-localization\",\"pods\":[{\"podName\":\"ExpoLocalization\",\"podspecDir\":\"../../packages/expo-localization/ios\"}],\"swiftModuleNames\":[\"ExpoLocalization\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LocalizationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"17.0.7\"},{\"packageName\":\"expo-location\",\"pods\":[{\"podName\":\"ExpoLocation\",\"podspecDir\":\"../../packages/expo-location/ios\"}],\"swiftModuleNames\":[\"ExpoLocation\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"LocationModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"19.0.7\"},{\"packageName\":\"expo-mail-composer\",\"pods\":[{\"podName\":\"ExpoMailComposer\",\"podspecDir\":\"../../packages/expo-mail-composer/ios\"}],\"swiftModuleNames\":[\"ExpoMailComposer\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MailComposerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-manifests\",\"pods\":[{\"podName\":\"EXManifests\",\"podspecDir\":\"../../packages/expo-manifests/ios\"}],\"swiftModuleNames\":[\"EXManifests\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.8\"},{\"packageName\":\"expo-maps\",\"pods\":[{\"podName\":\"ExpoMaps\",\"podspecDir\":\"../../packages/expo-maps/ios\"}],\"swiftModuleNames\":[\"ExpoMaps\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MapsModule\"},{\"name\":null,\"class\":\"AppleMapsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.12.7\"},{\"packageName\":\"expo-media-library\",\"pods\":[{\"podName\":\"ExpoMediaLibrary\",\"podspecDir\":\"../../packages/expo-media-library/ios\"}],\"swiftModuleNames\":[\"ExpoMediaLibrary\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MediaLibraryModule\"},{\"name\":null,\"class\":\"MediaLibraryNextModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"18.2.0\"},{\"packageName\":\"expo-mesh-gradient\",\"pods\":[{\"podName\":\"ExpoMeshGradient\",\"podspecDir\":\"../../packages/expo-mesh-gradient/ios\"}],\"swiftModuleNames\":[\"ExpoMeshGradient\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"MeshGradientModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"coreFeatures\":[\"swiftui\",\"compose\"],\"packageVersion\":\"0.4.7\"},{\"packageName\":\"expo-modules-core\",\"pods\":[{\"podName\":\"ExpoModulesCore\",\"podspecDir\":\"../../packages/expo-modules-core\"},{\"podName\":\"ExpoModulesJSI\",\"podspecDir\":\"../../packages/expo-modules-core\"}],\"swiftModuleNames\":[\"ExpoModulesCore\",\"ExpoModulesJSI\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"3.0.16\"},{\"packageName\":\"expo-network\",\"pods\":[{\"podName\":\"ExpoNetwork\",\"podspecDir\":\"../../packages/expo-network/ios\"}],\"swiftModuleNames\":[\"ExpoNetwork\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"NetworkModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.7\"},{\"packageName\":\"expo-notifications\",\"pods\":[{\"podName\":\"EXNotifications\",\"podspecDir\":\"../../packages/expo-notifications/ios\"}],\"swiftModuleNames\":[\"EXNotifications\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"BackgroundModule\"},{\"name\":null,\"class\":\"BadgeModule\"},{\"name\":null,\"class\":\"CategoriesModule\"},{\"name\":null,\"class\":\"EmitterModule\"},{\"name\":null,\"class\":\"HandlerModule\"},{\"name\":null,\"class\":\"PermissionsModule\"},{\"name\":null,\"class\":\"PresentationModule\"},{\"name\":null,\"class\":\"PushTokenModule\"},{\"name\":null,\"class\":\"SchedulerModule\"},{\"name\":null,\"class\":\"ServerRegistrationModule\"}],\"appDelegateSubscribers\":[\"NotificationsAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"0.32.11\"},{\"packageName\":\"expo-print\",\"pods\":[{\"podName\":\"ExpoPrint\",\"podspecDir\":\"../../packages/expo-print/ios\"}],\"swiftModuleNames\":[\"ExpoPrint\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoPrintModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-router\",\"pods\":[{\"podName\":\"ExpoRouter\",\"podspecDir\":\"../../packages/expo-router/ios\"}],\"swiftModuleNames\":[\"ExpoRouter\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoHeadModule\"},{\"name\":null,\"class\":\"LinkPreviewNativeModule\"},{\"name\":null,\"class\":\"RouterToolbarModule\"}],\"appDelegateSubscribers\":[\"ExpoHeadAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.6\"},{\"packageName\":\"expo-screen-capture\",\"pods\":[{\"podName\":\"ExpoScreenCapture\",\"podspecDir\":\"../../packages/expo-screen-capture/ios\"}],\"swiftModuleNames\":[\"ExpoScreenCapture\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ScreenCaptureModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"8.0.8\"},{\"packageName\":\"expo-screen-orientation\",\"pods\":[{\"podName\":\"ExpoScreenOrientation\",\"podspecDir\":\"../../packages/expo-screen-orientation/ios\"}],\"swiftModuleNames\":[\"ExpoScreenOrientation\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ScreenOrientationModule\"}],\"appDelegateSubscribers\":[\"ScreenOrientationAppDelegate\"],\"reactDelegateHandlers\":[\"ScreenOrientationReactDelegateHandler\"],\"debugOnly\":false,\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-secure-store\",\"pods\":[{\"podName\":\"ExpoSecureStore\",\"podspecDir\":\"../../packages/expo-secure-store/ios\"}],\"swiftModuleNames\":[\"ExpoSecureStore\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SecureStoreModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sensors\",\"pods\":[{\"podName\":\"ExpoSensors\",\"podspecDir\":\"../../packages/expo-sensors/ios\"}],\"swiftModuleNames\":[\"ExpoSensors\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"AccelerometerModule\"},{\"name\":null,\"class\":\"BarometerModule\"},{\"name\":null,\"class\":\"DeviceMotionModule\"},{\"name\":null,\"class\":\"GyroscopeModule\"},{\"name\":null,\"class\":\"MagnetometerModule\"},{\"name\":null,\"class\":\"MagnetometerUncalibratedModule\"},{\"name\":null,\"class\":\"PedometerModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"expo-sharing\",\"pods\":[{\"podName\":\"ExpoSharing\",\"podspecDir\":\"../../packages/expo-sharing/ios\"}],\"swiftModuleNames\":[\"ExpoSharing\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SharingModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-sms\",\"pods\":[{\"podName\":\"ExpoSMS\",\"podspecDir\":\"../../packages/expo-sms/ios\"}],\"swiftModuleNames\":[\"ExpoSMS\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoSMSModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-speech\",\"pods\":[{\"podName\":\"ExpoSpeech\",\"podspecDir\":\"../../packages/expo-speech/ios\"}],\"swiftModuleNames\":[\"ExpoSpeech\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SpeechModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-splash-screen\",\"pods\":[{\"podName\":\"ExpoSplashScreen\",\"podspecDir\":\"../../packages/expo-splash-screen/ios\"}],\"swiftModuleNames\":[\"ExpoSplashScreen\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SplashScreenModule\"}],\"appDelegateSubscribers\":[\"SplashScreenAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"31.0.10\"},{\"packageName\":\"expo-sqlite\",\"pods\":[{\"podName\":\"ExpoSQLite\",\"podspecDir\":\"../../packages/expo-sqlite/ios\"}],\"swiftModuleNames\":[\"ExpoSQLite\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SQLiteModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"16.0.8\"},{\"packageName\":\"expo-store-review\",\"pods\":[{\"podName\":\"ExpoStoreReview\",\"podspecDir\":\"../../packages/expo-store-review/ios\"}],\"swiftModuleNames\":[\"ExpoStoreReview\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"StoreReviewModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"9.0.7\"},{\"packageName\":\"expo-structured-headers\",\"pods\":[{\"podName\":\"EXStructuredHeaders\",\"podspecDir\":\"../../packages/expo-structured-headers/ios\"}],\"swiftModuleNames\":[\"EXStructuredHeaders\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"5.0.0\"},{\"packageName\":\"expo-symbols\",\"pods\":[{\"podName\":\"ExpoSymbols\",\"podspecDir\":\"../../packages/expo-symbols/ios\"}],\"swiftModuleNames\":[\"ExpoSymbols\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"SymbolModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"1.0.7\"},{\"packageName\":\"expo-system-ui\",\"pods\":[{\"podName\":\"ExpoSystemUI\",\"podspecDir\":\"../../packages/expo-system-ui/ios\"}],\"swiftModuleNames\":[\"ExpoSystemUI\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"ExpoSystemUIModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-task-manager\",\"pods\":[{\"podName\":\"ExpoTaskManager\",\"podspecDir\":\"../../packages/expo-task-manager/ios\"}],\"swiftModuleNames\":[\"ExpoTaskManager\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"TaskManagerModule\"}],\"appDelegateSubscribers\":[\"TaskManagerAppDelegateSubscriber\"],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"14.0.7\"},{\"packageName\":\"expo-tracking-transparency\",\"pods\":[{\"podName\":\"ExpoTrackingTransparency\",\"podspecDir\":\"../../packages/expo-tracking-transparency/ios\"}],\"swiftModuleNames\":[\"ExpoTrackingTransparency\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"TrackingTransparencyModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.7\"},{\"packageName\":\"expo-updates\",\"pods\":[{\"podName\":\"EXUpdates\",\"podspecDir\":\"../../packages/expo-updates/ios\"}],\"swiftModuleNames\":[\"EXUpdates\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"UpdatesModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[\"ExpoUpdatesReactDelegateHandler\"],\"debugOnly\":false,\"packageVersion\":\"29.0.10\"},{\"packageName\":\"expo-updates-interface\",\"pods\":[{\"podName\":\"EXUpdatesInterface\",\"podspecDir\":\"../../packages/expo-updates-interface/ios\"}],\"swiftModuleNames\":[\"EXUpdatesInterface\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"2.0.0\"},{\"packageName\":\"expo-video\",\"pods\":[{\"podName\":\"ExpoVideo\",\"podspecDir\":\"../../packages/expo-video/ios\"}],\"swiftModuleNames\":[\"ExpoVideo\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"VideoModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"3.0.11\"},{\"packageName\":\"expo-video-thumbnails\",\"pods\":[{\"podName\":\"ExpoVideoThumbnails\",\"podspecDir\":\"../../packages/expo-video-thumbnails/ios\"}],\"swiftModuleNames\":[\"ExpoVideoThumbnails\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"VideoThumbnailsModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"10.0.7\"},{\"packageName\":\"expo-web-browser\",\"pods\":[{\"podName\":\"ExpoWebBrowser\",\"podspecDir\":\"../../packages/expo-web-browser/ios\"}],\"swiftModuleNames\":[\"ExpoWebBrowser\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[{\"name\":null,\"class\":\"WebBrowserModule\"}],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"15.0.7\"},{\"packageName\":\"unimodules-app-loader\",\"pods\":[{\"podName\":\"UMAppLoader\",\"podspecDir\":\"../../packages/unimodules-app-loader/ios\"}],\"swiftModuleNames\":[\"UMAppLoader\"],\"flags\":{\"inhibit_warnings\":false},\"modules\":[],\"appDelegateSubscribers\":[],\"reactDelegateHandlers\":[],\"debugOnly\":false,\"packageVersion\":\"6.0.7\"}]}",
      "reasons": [
        "expoAutolinkingIos"
      ],
      "hash": "054da62c1c8e1479b23ec9de9d985ca0de4d7d64"
    }
  }
]

Generated by PR labeler 🤖

@barthap barthap marked this pull request as ready for review December 4, 2025 14:23
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Dec 4, 2025

Subscribed to pull request

File Patterns Mentions
docs/** @amandeepmittal
packages/expo-crypto/** @EvanBacon, @aleqsio

Generated by CodeMention

Copy link
Copy Markdown
Contributor

@tsapeta tsapeta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't reviewed the code yet (sorry, it's quite big 😅), but I think we don't have to separate it from the rest of expo-crypto. JS part is relatively small, so it's not a big problem. I think it's a good idea to have a separate native module though. Module instance on the native side is not lazy (definition is evaluated eagerly), but its JS functions, properties and classes are lazy. If you don't reference any of them in the top-level scope, it won't affect the bundle load time.
Same for the docs, I think it's more clear if they are grouped by package rather than package namespace. I'm generally in favor of listing them by package name in the sidebar, so expo-crypto instead of Crypto.

@barthap
Copy link
Copy Markdown
Contributor Author

barthap commented Dec 12, 2025

I haven't reviewed the code yet (sorry, it's quite big 😅), but I think we don't have to separate it from the rest of expo-crypto. JS part is relatively small, so it's not a big problem.

Okay, I'll merge the JS part, but I guess for some functions and types it would make sense to prefix them with AES then.

I think it's a good idea to have a separate native module though. Module instance on the native side is not lazy (definition is evaluated eagerly), but its JS functions, properties and classes are lazy. If you don't reference any of them in the top-level scope, it won't affect the bundle load time.

Yeah, that was exactly my thinking when deciding to separate native module for this 😉

Same for the docs, I think it's more clear if they are grouped by package rather than package namespace.

If JS is merged, then merging docs makes sense too.

@barthap barthap merged commit 1068211 into main Jan 9, 2026
20 of 21 checks passed
@barthap barthap deleted the @barthap/crypto-aes branch January 9, 2026 07:25
@skrapi
Copy link
Copy Markdown

skrapi commented Jan 27, 2026

@barthap @amandeepmittal @lukmccall Is there an ETA for this change to be released?

@barthap
Copy link
Copy Markdown
Contributor Author

barthap commented Jan 27, 2026

It's in SDK 55 beta, will be stable in ~2 weeks

@skrapi
Copy link
Copy Markdown

skrapi commented Jan 27, 2026

@barthap Amazing news, thank you for the quick response, and the work for getting this in.

@expo expo deleted a comment from expo-bot Jan 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants