Skip to content

PRD-478 Quickstart update - #676

Merged
adrian-situm merged 6 commits into
developfrom
feature/PRD-478
Oct 8, 2026
Merged

adrian-situm merged 6 commits into
developfrom
feature/PRD-478

Conversation

@adrian-situm

Copy link
Copy Markdown
Contributor

No description provided.

- Restore compatibility with recent React Native and Android Gradle Plugin versions
- Prevent the initial blank MapView request from causing an error on iOS
Comment thread plugin/app.plugin.js
@@ -0,0 +1,34 @@
// Expo config plugin that adds the Situm Maven repository to Android projects.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Esto es un config plugin de Expo
https://docs.expo.dev/config-plugins/introduction/

Para añadir un repositorio al build.gradle mediante un plugin de Expo, la documentación ofrece una vía oficial mediante una propiedad llamada extraMavenRepos https://docs.expo.dev/versions/latest/sdk/build-properties/
Para utilizar esta vía oficial, el integrador debe instalar el paquete expo-build-properties (este es oficial y está documentado en el enlace) y el contenido de este archivo debería ser algo como:

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "extraMavenRepos": [
              "https://repo.situm.com/artifactory/libs-release-local"
            ]
          }
        }
      ]
    ]
  }
}

No nos interesa que el integrador tenga que instalar una dependencia a mayores, así que este config plugin llama directamente a la api interna de Expo para añadir el repositorio de Situm. Debería funcionar exactamente igual que si lo añades de la manera oficial, pero sin necesitar instalar expo-build-properties.

Comment thread plugin/package.json
"expo": {
"optional": true
}
},

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Hace que si expo está instalado en el proyecto, el plugin utilice esa instalación. Ayuda a que se mantengan las mismas estructuras de datos si cambian entre versiones y a que el plugin de Expo reconozca el paquete correctamente.

No fuerza la instalación de Expo ni lanza ninguna advertencia si el integrador no lo tiene instalado.

const _onShouldStartLoadWithRequest = (request: any) => {
if (request?.url === "about:blank") {
return true;
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

En iOS lanzaba errores al iniciar el mapview porque intentaba abrir la página "about:blank" con el Linking.openURL. En la app de ejemplo esto no ocurría porque tiene definido un onExternalLinkClicked y se llama a esa función en su lugar.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

En el plugin de Cordova no se interceptan los enlaces abiertos, así que es Capacitor el que lo gestiona y evita el error que ocurre en React Native.

En Flutter no se lanzan errores porque la lógica de interceptar las urls solo se aplica una vez el mapview ha terminado de cargar, y los about:blank vienen antes. Además se llamaría a esta función para abrir enlaces en la parte nativa de iOS. En ella se comprueba si se puede abrir el enlace antes de intentarlo, por lo que tampoco lanzaría error aunque se intentase.
Image

Al final hemos decidido Cristian y yo no complicarlo más y dejarlo con este comportamiento que es el mismo que en el sdk de iOS: si es un about:blank no abrirlo ni en el viewer ni en el navegador.
Los about:blank los genera el Sentry Replay y este tiene un fallback para cuando no puede abrirlos, así que debería seguir funcionando bien.


release {
minifyEnabled false
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Era una configuración que venía por defecto en React Native antiguo. Lo he quitado porque los proyectos nuevos de React Native vienen con AGP 9 y este ya no soporta la configuración de proguard-android.txt.

Este fue el error:

A problem occurred evaluating project ':situm_react-native'.
> `getDefaultProguardFile('proguard-android.txt')` is no longer supported since it includes `-dontoptimize`, which prevents R8 from performing many optimizations. Instead use `getDefaultProguardFile('proguard-android-optimize.txt)`, and if needed, temporarily use `-dontoptimize` in a custom keep rule file while fixing breakages

La configuración por defecto de React Native ya trae el minifyEnabled en false, lo cual desactiva el proguard. Además de que al ser un plugin, esta setting nunca se aplica, la que se aplica es la de la app integradora. Debería ser seguro quitarlo.

Comment thread plugin/app.plugin.js Outdated

const SITUM_MAVEN_REPOSITORY =
"https://repo.situm.com/artifactory/libs-release-local";
const { createBuildGradlePropsConfigPlugin } = AndroidConfig.BuildProperties;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Comentas que é unha API interna. Que ocorre neste código si cambian o nome de createBuildGradlePropsConfigPlugin? O código sería o suficientemente defensivo como para tolerar o problema, ou cascaría?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Se podría liar bastante, si llama a una función que no existe Expo se detiene y no genera las carpetas de Android e iOS.

Comment thread plugin/app.plugin.js Outdated
@@ -0,0 +1,16 @@
// Expo config plugin that adds the Situm Maven repository to Android projects.
const { AndroidConfig } = require("expo/config-plugins");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Analizaches withGradleProperties?
Quizais poida ser unha alternativa máis documentada?
O que xa falamos, por min podemos darlle para adiante a este apaño automático, pero acaba de saltarme esto e igual merece a pena botarlle un ollo.
Tamén me preocupa que sexa resistente a erros :)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Me parece correcto, si bien el código resulta más complejo, es una API pública que es menos probable que incurra en errores críticos.

Comment thread plugin/app.plugin.js
return config;
});

module.exports = withSitumMavenRepository;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

He añadido comentarios explicando qué hace cada parte del código para que, si hay que revisar el plugin en un tiempo, no se nos olvide la lógica que se aplicaba. Me pareció lo correcto al ser una parte más aislada del resto del plugin y ser el único sitio que utiliza interfaces de Expo.

@R-lagoman R-lagoman left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Por min queda aprobada. Algún detalle que comentas escápaseme, tería que invertir

@adrian-situm
adrian-situm merged commit c287edf into develop Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants