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 Capgo ilustración del blog

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

  1. Comprender las herramientas:

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

  3. Inicia tu proyecto de plugin de 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.
    • Actualizar 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 garantizar la estabilidad.
  7. Usa herramientas como Capgo para actualizaciones en vivo:

    • Publica actualizaciones al instante sin revisiones de la tienda de apps.

Comparación rápida de herramientas:

Plataforma Herramienta Dependencia de ejemplo
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 importanteGestionar bien las dependencias garantiza que tu plugin funcione sin problemas en todas las plataformas, ahorra tiempo y evita errores. Veamos los pasos en detalle.

Cómo crear un Capacitor plugin para iOS/Android

Sitio web de documentación de Capacitor Framework

Configuración del entorno de desarrollo

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

Herramientas de desarrollo necesarias

Esta es la lista de herramientas que necesitarás:

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 con el formato de dominio inverso (p. 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 de configuración del proyecto

  1. Actualizar 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 específica por plataforma

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

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

      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 que tu proyecto esté configurado, estarás listo para pasar a la gestión de dependencias de JavaScript.

Dependencias de JavaScript

Gestionar bien las dependencias de JavaScript es clave para mantener un rendimiento estable de los plugins.

npm Instalación de paquetes

npm

Para instalar 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 en ambas plataformas, web y nativa.

Gestión de package.json

Aquí tienes un ejemplo package.json de 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 de forma adecuada:

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 a parches

Uso de librerías JavaScript

Al importar librerías, centra tu atención en reducir el tamaño del bundle:

// 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);
  }
}

Additionally, ensure proper error handling and 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, explora cómo gestionar dependencias específicas de la plataforma para iOS.

Dependencias de iOS

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

CocoaPods Configuración

CocoaPods

Comienza 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

Después de inicializar CocoaPods, configura el Podfile para incluir Capacitor y cualquier otra biblioteca 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 necesita un control preciso, como en componentes de seguridad
Versión minor pod 'Alamofire', '~> 5.6' Para APIs estables que puedan recibir actualizaciones de parche
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 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 proyecto, build.gradle, 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 surja.

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 caché y la ejecución paralela 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.

Sobre Capgo

Capgo es una plataforma de live update diseñada para plugins y apps de Capacitor. 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 necesidad de revisión de la app store. Las actualizaciones están protegidas con cifrado de extremo a extremo y cumplen con los estándares de cumplimiento de Apple y Android.

Funciones de actualización de Capgo

Capgo simplifica la gestión de dependencias de plugins con estas características:

Característica What It Does Métrica clave
Live Updates Publica actualizaciones en minutos 95% de usuarios actualizan en 24 horas
Actualizaciones parciales Descarga solo archivos modificados tiempo de respuesta promedio de API de 434ms
Control de versiones Gestiona múltiples versiones tasa de éxito global del 82%
Sistema de canales Segmentar grupos de usuarios específicos Soporta varios 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 tus 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 fundamental para hacer entregas continuas a nuestros usuarios.” - Rodrigo Mantica

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

Conclusión

Revisión del proceso

Gestionar las dependencias de los plugins de Capacitor requiere alinear los componentes nativos (iOS y Android) con sus equivalentes 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.

Buenas prácticas

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

Práctica Beneficio Cómo implementarlo
Fijar versiones Evita problemas inesperados Usa versiones fijas en package.json
Aislamiento de plataforma Minimiza conflictos Separa las 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 a la vez que ofrece un gran rendimiento. Alcanza un impresionante 95% de tasa de actualización de usuarios en 24 horas y mantiene un tiempo de respuesta global de API de 434ms [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 434ms
Tasa de éxito de actualizaciones 82%
Tasa de actualización de usuarios (24 horas) 95%

Continúa desde Cómo agregar dependencias en plugins de Capacitor

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

Live updates para apps Capacitor

Cuando un bug de la capa web está en producción, publica el fix a través de 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 flujo de revisión habitual.

Lo último de nuestro blog

Capgo te da la información clave que necesitas para crear una app móvil realmente profesional.