Saltar al contenido principal

Cómo añadir dependencias en plugins de Capacitor

Aprende a optimizar la gestión de dependencias en plugins de Capacitor para varias plataformas con pasos prácticos y mejores prácticas.

Cómo añadir dependencias en plugins de Capacitor

Añadir dependencias a Capacitor los plugins puede parecer abrumador, pero es más fácil si lo divides en pasos claros. Esto es lo que necesitas saber:

  1. Conoce las herramientas:

    • JavaScript: Usa npm para gestionar dependencias.
    • iOS: Usa CocoaPods o Swift Package Manager (SPM).
    • Android: Usa Gradle para gestionar dependencias.
  2. Configura tu entorno de desarrollo:

  3. Comienza tu proyecto de plugin Capacitor:

    • Usa npm init @capacitor/plugin para crear un nuevo plugin.
  4. Añade dependencias de JavaScript:

    • Usa npm install para dependencias de producción y desarrollo.
    • Actualización package.json para incluir peer dependencies como @capacitor/core.
  5. Gestionar dependencias específicas de la plataforma:

    • iOS: Configura CocoaPods o SPM con librerías como Alamofire o SwiftyJSON.
    • Android: Usa Gradle para añadir dependencias como Gson o AppCompat.
  6. Optimiza el rendimiento:

    • Fija versiones, audita dependencias y resuelve conflictos para asegurar la estabilidad.
  7. Usa herramientas como Capgo para Live Update:

    • Push updates instantly without app store reviews.

Comparativa rápida de herramientas:

Plataforma Herramienta Ejemplo de dependencia
JavaScript npm npm install lodash --save
iOS CocoaPods/SPM pod 'Alamofire', '~> 5.6.4'
Android Gradle implementation 'com.google.code.gson:gson:2.10.1'

Por qué es importante: Gestionar las dependencias correctamente garantiza que tu plugin funcione sin problemas en todas las plataformas, ahorra tiempo y evita errores. Veamos los pasos a detalle.

Cómo crear un Capacitor plugin para iOS/Android

Sitio de documentación del framework Capacitor

Configuración del entorno de desarrollo

Prepara tu entorno con las herramientas necesarias para gestionar plugin Capacitor las dependencias de forma eficaz.

Herramientas de desarrollo necesarias

Aquí tienes la lista de herramientas necesarias:

Herramienta Versión Propósito
Node.js 16.0.0+ Entorno de ejecución de JavaScript
npm 8.0.0+ Gestión de paquetes
Xcode 14.0+ Desarrollo iOS (solo Mac)
Android Studio Electric Eel+ Desarrollo en Android
CocoaPods 1.11.0+ Gestión de dependencias en iOS
JDK 11+ Herramientas de build de Android

Crear un nuevo plugin

Usa el Capacitor CLI para iniciar tu proyecto de plugin. Esto incluye configurar las plataformas y nombrar tu plugin usando el formato de dominio inverso (ej.: com.mycompany.plugin):

  1. Ejecuta el siguiente comando:
    npm init @capacitor/plugin
  2. Elige tus plataformas objetivo (iOS/Android).
  3. Asigna un nombre a tu plugin en formato de dominio inverso.

Pasos para configurar el proyecto

  1. Actualización package.json

    Modifica tu package.json para incluir lo siguiente:

    {
      "capacitor": {
        "ios": {
          "src": "ios"
        },
        "android": {
          "src": "android"
        }
      },
      "peerDependencies": {
        "@capacitor/core": "^5.0.0"
      }
    }
  2. Configuración por plataforma

    • Para iOS, asegúrate de que tu Podfile incluya:

      platform :ios, '13.0'
      use_frameworks!
    • Para Android, verifica que tu build.gradle contenga:

      android {
          compileSdkVersion 33
          defaultConfig {
              minSdkVersion 22
          }
      }
  3. Configurar variables de entorno

    Configura las siguientes variables de entorno para tus herramientas de desarrollo:

    Variable Propósito Valor de ejemplo
    ANDROID_HOME Ubicación de SDK de Android /Users/username/Library/Android/sdk
    JAVA_HOME Ruta de instalación de JDK /Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home
    XCODE_SELECT herramientas de línea de comandos de Xcode /Applications/Xcode.app/Contents/Developer

Una vez configurado el proyecto, ya puedes empezar a gestionar las dependencias de JavaScript.

Dependencias de JavaScript

Gestionar eficazmente las dependencias de JavaScript es clave para mantener la estabilidad de los plugins.

npm Instalación de paquetes

npm

Para instalar las dependencias, usa los siguientes comandos:

# Add a production dependency
npm install lodash --save

# Add a development dependency
npm install @types/lodash --save-dev

Asegúrate de incluir manualmente las peer dependencies en tu package.json archivo. Prueba todas las dependencias para confirmar la compatibilidad tanto en web como en plataformas nativas.

Gestión de package.json

Aquí tienes un ejemplo package.json configuración:

{
  "name": "my-capacitor-plugin",
  "version": "1.0.0",
  "dependencies": {
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "@types/lodash": "^4.14.195",
    "@capacitor/core": "^5.0.0"
  },
  "peerDependencies": {
    "@capacitor/core": "^5.0.0"
  }
}

Para mantener la consistencia, bloquea las versiones de las dependencias:

Tipo de limitación Ejemplo Caso de uso
Exacta “5.0.0” Para dependencias críticas que requieren una versión específica
Caret “^5.0.0” Permite actualizaciones menores y parches
Tilde “~5.0.0” Limita las actualizaciones solo a parches

Uso de librerías de JavaScript

Al importar librerías, enfócate en reducir el bundle size:

// Import only the required function
import { isEqual } from 'lodash';

export class MyPlugin {
  async compare(options: { value1: any, value2: any }): Promise<boolean> {
    return isEqual(options.value1, options.value2);
  }
}

Además, asegúrate de implementar un buen manejo de errores y type checking:

import { Plugin } from '@capacitor/core';
import { validate } from 'your-validation-library';

@Plugin({
  name: 'MyPlugin',
  platforms: ['web', 'ios', 'android']
})
export class MyPlugin {
  async validateData(data: unknown): Promise<void> {
    try {
      if (!validate(data)) {
        throw new Error('Invalid data format');
      }
      // Continue processing if valid
    } catch (error) {
      throw new Error(`Validation failed: ${error.message}`);
    }
  }
}

A continuación, descubre cómo gestionar dependencias específicas de iOS.

Dependencias de iOS

Esta sección explica cómo gestionar las dependencias nativas de iOS en Plugins de Capacitor. Una vez configuradas tus dependencias de JavaScript, el siguiente paso es gestionar las dependencias nativas de iOS.

CocoaPods Configuración

CocoaPods

Empieza inicializando CocoaPods en tu directorio de iOS:

cd ios
pod init

Luego, actualiza tu Plugin.podspec archivo con las siguientes configuraciones:

Pod::Spec.new do |s|
  s.name = 'MyCapacitorPlugin'
  s.version = '1.0.0'
  s.summary = 'Your plugin description'
  s.platform = :ios, '13.0'
  s.dependency 'Capacitor'
  # Include your iOS dependencies here
  s.dependency 'Alamofire', '~> 5.6.4'
end

Configuración del Podfile

Tras inicializar CocoaPods, configura el Podfile para incluir Capacitor y cualquier otra librería de terceros:

platform :ios, '13.0'
use_frameworks!

def capacitor_pods
  pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
  pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
end

target 'Plugin' do
  capacitor_pods
  # Add third-party dependencies
  pod 'KeychainAccess', '~> 4.2.2'
  pod 'SwiftyJSON', '~> 5.0.1'
end

target 'PluginTests' do
  capacitor_pods
end

Aquí tienes algunos patrones comunes de configuración de dependencias:

Tipo de limitación Ejemplo Caso de uso
Versión exacta pod 'KeychainAccess', '4.2.2' Cuando se requiere un control preciso, como en componentes de seguridad
Versión minor pod 'Alamofire', '~> 5.6' Para APIs estables que puedan recibir actualizaciones de parches
Versión major pod 'SwiftyJSON', '> 5.0' Cuando la flexibilidad entre actualizaciones es aceptable

Dependencias de Swift Package

Si prefieres no usar CocoaPods, Swift Package Manager (SPM) es una buena alternativa. Añade las dependencias de SPM directamente en Xcode con la siguiente configuración en tu Package.swift archivo:

// Package.swift
dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.6.4")),
    .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.1")
]

Para usar dependencias de SPM en tu plugin code, impórtalas e intégralas según sea necesario. Por ejemplo:

import Capacitor
import Alamofire

@objc(MyPlugin)
public class MyPlugin: CAPPlugin {
    @objc func makeRequest(_ call: CAPPluginCall) {
        AF.request("https://api.example.com/data").response { response in
            // Process the response
            call.resolve([
                "data": response.data
            ])
        }
    }
}

Este enfoque te permite elegir entre CocoaPods y Swift Package Manager según los requisitos de tu proyecto.

Dependencias de Android

Configura las dependencias de Android para asegurar una integración nativa fluida. Así es como gestionas las dependencias para tu plugin Capacitor.

Gradle Dependencias

Interfaz de Gradle Build Tool

Añade las siguientes configuraciones a tu build.gradle archivo:

android {
    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 33
    }
}

dependencies {
    implementation "androidx.appcompat:appcompat:1.6.1"
    implementation "com.google.code.gson:gson:2.10.1"
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.20"
    implementation project(':capacitor-android')
}

Define versiones adicionales en el buildscript bloque:

buildscript {
    ext {
        androidxCoreVersion = '1.10.1'
        kotlinVersion = '1.8.20'
    }
}

Una vez configuradas las dependencias, asegúrate de configurar los repositorios necesarios.

Configuración de repositorios

En el nivel de tu proyecto build.gradlede tu proyecto, incluye los repositorios Maven requeridos:

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
    }
}

Si usas repositorios Maven privados o personalizados, añade las credenciales así:

maven {
    url "https://maven.example.com/releases"
    credentials {
        username = project.findProperty("mavenUsername") ?: System.getenv("MAVEN_USERNAME")
        password = project.findProperty("mavenPassword") ?: System.getenv("MAVEN_PASSWORD")
    }
}

Con los repositorios listos, resuelve cualquier conflicto de dependencias que pueda surgir.

Solución de problemas de compatibilidad

Para gestionar conflictos de dependencias, aplica resoluciones de versión en tu build.gradle:

configurations.all {
    resolutionStrategy {
        force "org.jetbrains.kotlin:kotlin-stdlib:1.8.20"
        force "androidx.core:core-ktx:1.10.1"
    }
}

Aquí tienes estrategias para resolver problemas comunes de dependencias:

Tipo de problema Estrategia Ejemplo
Conflicto de versiones Forzar una versión específica force 'com.google.code.gson:gson:2.10.1'
Múltiples versiones Excluir un módulo exclude group: 'org.json', module: 'json'
Problemas transitivos Usar versiones estrictas strictly 'androidx.core:core-ktx:1.10.1'

Por ejemplo, puedes excluir módulos en conflicto así:

dependencies {
    implementation('library:name:1.0.0') {
        exclude group: 'com.conflicting.dependency'
    }
}

Finalmente, optimiza tu proceso de build habilitando el caching y la ejecución en paralelo en gradle.properties:

org.gradle.caching=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx2048m

Capgo Integración

Interfaz del Dashboard de Capgo Live Update

Usar Capgo junto con la gestión de dependencias nativas y de JavaScript hace que actualizar tu plugin sea más rápido y fácil.

Acerca de Capgo

Capgo es una plataforma live update diseñada para Capacitor plugins y apps. Con más de 23.5 millones de actualizaciones entregadas en 750 apps en producción [1], Capgo permite a los desarrolladores enviar actualizaciones de dependencias y code al instante, sin pasar por la revisión de la app store. Las actualizaciones están protegidas con cifrado de extremo a extremo y cumplen con los estándares de Apple y Android.

Funciones de Capgo Update

Capgo simplifica la gestión de dependencias de plugins con estas funciones:

Característica What It Does Métrica clave
Live Updates Lanza updates en minutos 95% de tasa de actualización en 24h
Actualizaciones parciales Descarga solo archivos cambiados Tiempo de respuesta API de 434ms
Control de versiones Gestiona múltiples versiones 82% de tasa de éxito global
Sistema de Channels Segmenta grupos de usuarios Soporta múltiples canales de despliegue

Fuente: [1]

Capgo funciona a la perfección con herramientas de CI/CD como GitHub Actions, GitLab CI y Jenkins, automatizando las actualizaciones de dependencias y garantizando versiones de plugins consistentes. Estas herramientas facilitan la integración de Capgo en tu workflow.

Configuración de Capgo

Sigue estos pasos para integrar Capgo en tu proyecto:

  1. Instala el CLI de Capgo

    Ejecuta el siguiente comando en tu terminal:

    npx @capgo/cli init
  2. Configura las preferencias de actualización

    Usa el dashboard de Capgo para configurar canales de despliegue y preferencias. Es compatible con configuraciones en la nube o self-hosted.

  3. Añade la lógica de actualización

    Añade este code a tu archivo principal del plugin para habilitar las actualizaciones:

    import { Capgo } from '@capgo/capacitor-updater';
    
    // Initialize Capgo
    const capgo = new Capgo({
      appId: 'YOUR_APP_ID',
      channel: 'production'
    });
    
    // Check for updates
    await capgo.checkForUpdate();

“¡Practicamos desarrollo ágil y @Capgo es crítico para hacer entregas continuas a nuestros usuarios!” - Rodrigo Mantica

Capgo también ofrece un dashboard de analytics con información en tiempo real sobre la tasa de éxito de las actualizaciones y la actividad de los usuarios. Funciones como el rollback con un solo clic y el seguimiento de errores ayudan a resolver cualquier problema rápido, manteniendo tus actualizaciones de plugins funcionando sin problemas.

Conclusión

Revisión del proceso

Gestionar las dependencias de los plugins de Capacitor requiere alinear los componentes nativos (iOS y Android) con sus contrapartes en JavaScript para asegurar una integración fluida. Este proceso incluye configuraciones específicas de cada plataforma y la gestión de paquetes JavaScript para obtener el mejor rendimiento. Seguir estos pasos te ayudará a mantener la funcionalidad de los plugins estable y eficiente.

Mejores prácticas

Para gestionar las dependencias con eficacia, considera estas prácticas:

Práctica Beneficio Cómo implementarlo
Fijación de versiones Evita problemas inesperados Usa versiones fijas en package.json
Aislamiento de plataforma Minimiza conflictos Separar dependencias nativas
Actualizaciones regulares Mejora la seguridad Aplica parches críticos rápido
Auditoría de dependencias Detecta riesgos Ejecuta npm audit frecuentemente

Usar herramientas de live update como Capgo puede simplificar y mejorar estas prácticas al permitir actualizaciones en tiempo real.

Beneficios de Capgo

Capgo simplifica la gestión de dependencias con un alto rendimiento. Logra una impresionante tasa de actualización del 95% de usuarios en 24 horas y mantiene un tiempo de respuesta global de API de 434 ms [1]. Con cifrado de extremo a extremo, garantiza actualizaciones seguras que cumplen con las directrices de Apple y Android. Para equipos que gestionan múltiples versiones de plugins, el sistema de canales de Capgo permite despliegues dirigidos a grupos de usuarios específicos.

Aquí tienes un vistazo rápido al rendimiento de Capgo:

Métrica Valor
Tiempo de respuesta global de API 434 ms
Tasa de éxito de actualizaciones 82%
Tasa de actualización de usuarios (24 horas) 95%

Sigue leyendo: Cómo añadir dependencias en los plugins de Capacitor

Si estás usando Cómo añadir dependencias en plugins de Capacitor para planificar el trabajo del plugin nativo, conéctalo con Directorio de plugins de Capgo para el flujo de trabajo de productos en el Capgo Plugin Directory, Plugins de Capacitor por Capgo para los detalles de implementación en Plugins de Capacitor por Capgo, Añadir o actualizar plugins para los detalles de implementación en Añadir o actualizar plugins, Alternativas a los plugins de Ionic Enterprise para el flujo de trabajo del producto en Alternativas a los plugins de Ionic Enterprise, y Native Builds de Capgo para el flujo de trabajo en Capgo Native Builds.

Live Updates para apps de Capacitor

Si hay un bug en la capa web, publica el fix con Capgo en lugar de esperar días a la aprobación de la app store. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen el proceso de revisión normal.

Lo último de nuestro blog

Capgo te da los mejores insights para crear una app móvil realmente profesional.