Realm permite agrupar archivos de realm. Al agrupar un archivo de realm, se incluye una base de datos y todos sus datos en la descarga de la aplicación.
This allows users to start applications for the first time with a set of initial data. For synced realms, bundling can avoid a lengthy initial download the first time a user opens your application. Instead, users must only download the synced changes that occurred since you generated the bundled file.
Importante
Only Applies to Local Realms
The content on this page only applies to local realms.
Advertencia
No se aplica a aplicaciones Expo
Este procedimiento no funciona para aplicaciones React Native creadas con Expo.
Procedimiento
Follow these steps to create and bundle a realm file for your React Native application.
Crea un archivo Realm para empaquetar
The easiest way to create a bundled realm for your React Native app is to write a separate Node.js script to create the bundle.
Deberías utilizar el realm paquete para crear su paquete en lugar de @realm/react.
Build a temporary realm app that shares the data model of your application.
Open a realm and add the data you wish to bundle. If using a synchronized realm, allow time for the realm to fully sync.
crear-reino-agrupado.jsimport Realm from "realm"; import { Dog } from "./schemas"; // open realm const config = { schema: [Dog], path: "bundle.realm", }; const realm = await Realm.open(config); // add data to realm realm.write(() => { realm.create("Dog", { name: "Jasper", age: 10, type: "Golden Retriever" }); realm.create("Dog", { name: "Maggie", age: 12, type: "Collie" }); realm.create("Dog", { name: "Sophie", age: 6, type: "German Shepard" }); }); realm.close(); Note the filepath of the bundled realm file. You'll need this file to use the bundled realm in your production application, as described in the next section.
temp_realm_app. ├── bundle.realm ... rest of files in _temp_ application
Agrupe el archivo Realm con su aplicación
Ahora que tiene una copia del dominio que contiene los datos iniciales, agregue el archivo del dominio empaquetado a su aplicación de producción. La ubicación del dominio empaquetado varía según las compilaciones de iOS y Android.
Open up the
androidfolder generated by React Native in Android Studio.En el Project En el árbol, navegue hasta
app > src > main. Haga clic derecho en el directoriomain. Cree un nuevo subdirectorio llamadoassets.Arrastre el archivo realm empaquetado al directorio
assets.
En Xcode, abra el archivo
your_project_name.xcworkspacedentro del directorioiosgenerado por React Native.Seleccione su aplicación en el navegador del proyecto y seleccione la pestaña Build Phases en la descripción general del proyecto.
Expandir el elemento Copy Bundle Resources.
Haz clic en el icono +.
Haga clic en el botón Add Other....
Encuentra tu archivo Realm incluido y añádelo. No cambies la configuración por defecto, luego selecciona el botón Finish.
Open the Bundled Realm in your App
El dominio ya está empaquetado y se incluirá cuando un usuario descargue la aplicación. Para agregar el archivo del dominio empaquetado al directorio de documentos de la aplicación, llame a Realm.copyBundledRealmFiles() antes de abrir el reino.
Realm.copyBundledRealmFiles() agrega todos los archivos *.realm del paquete de la aplicación al directorio de documentos de la aplicación. Este método no sobrescribe ningún archivo existente con el mismo nombre, por lo que se puede llamar de manera segura cada vez que la aplicación se inicia.
Open the bundled realm with the same name and configuration that you specified when you initially created the bundled realm.
Ahora que tienes una copia del realm incluida con tu aplicación de producción, debes agregar código para usarla.
import React from 'react'; import {createRealmContext, Realm} from '@realm/react'; import {Dog} from './schema'; Realm.copyBundledRealmFiles(); const realmContext = createRealmContext({schema: [Dog], path: 'bundle.realm'}); const {RealmProvider} = realmContext; export default function OpenBundledRealm() { return ( <RealmProvider> {/* Rest of app has access to objects pre-populated in the bundled realm. */} <RestOfApp /> </RealmProvider> ); }