Cómo agregar una dependencia de CocoaPods en tu plugin de CapacitorJS para iOS

Como siempre ocurre con el desarrollo de plugins nativos de frameworks para crear aplicaciones híbridas, la documentación siempre asume que sabemos cómo funcionan las herramientas que se utilizan en el lado nativo de la aplicación. Una de estas cosas es la forma en que agregamos complementos nativos a nuestro código Swift del plugin de CapacitorJS para iOS. Para iOS, el complemento es básicamente un Pod para CocoaPods, el administrador de dependencias de Swift. Las dependencias se pueden agregar en el archivo de especificación del Pod.

Una especificación describe una versión de la biblioteca Pod. Incluye detalles sobre dónde se debe obtener la fuente, qué archivos usar, la configuración de compilación que se aplicará y otros metadatos generales, como su nombre, versión y descripción. En tu plugin de capacitor, encontrarás este archivo en el directorio raíz con un nombre similar a NombrePlugin.podspec y se parece a esto:

require 'json'

package = JSON.parse(File.read(File.join(__dir__, 'package.json')))

Pod::Spec.new do |s|
  s.name = 'CapacitorNativeFilepicker'
  s.version = package['version']
  s.summary = package['description']
  s.license = package['license']
  s.homepage = package['repository']['url']
  s.author = package['author']
  s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
  s.source_files = 'ios/Plugin/**/*.{swift,h,m,c,cc,mm,cpp}'
  s.ios.deployment_target  = '12.0'
  s.dependency 'Capacitor'
  s.swift_version = '5.1'
end

Todo lo que necesita hacer es agregar una nueva propiedad spec.dependency para cada dependencia que necesites en tu plugin. Como puedes ver, el capacitor en sí es un pod obligatorio, por lo que si quiero agregar el SDK de inicio de sesión de Facebook nativo en mi complemento, simplemente agregaría las dependencias como estas:

require 'json'

package = JSON.parse(File.read(File.join(__dir__, 'package.json')))

Pod::Spec.new do |s|
  # Resto del archivo
  
  s.dependency 'FacebookShare'
  s.dependency 'FacebookLogin'
  s.dependency 'FacebookCore'

  # Si necesitas especificar una versión, solo necesitas separarla con una coma
  s.dependency 'GoogleAnalytics', '~> 1.0.0'

  # Resto del archivo
end

Entonces, cuando el desarrollador que instala el complemento sincroniza el proyecto con el siguiente comando:

npx cap sync

Básicamente actualizará las dependencias nativas de iOS con pod install:

✔ Copying web assets from dist to android/app/src/main/assets/public in 736.17ms
✔ Creating capacitor.config.json in android/app/src/main/assets in 1.56ms
✔ copy android in 748.20ms
✔ Updating Android plugins in 1.47ms
[info] Found 4 Capacitor plugins for android:
       @capacitor/app@1.0.2
       @capacitor/clipboard@1.0.2
       @capacitor/filesystem@1.0.2
[warn] @capacitor/core@3.2.0 version doesn't match @capacitor/android@3.1.2 version.
       Consider updating to a matching version, e.g. w/ npm install @capacitor/core@3.1.2
✔ update android in 28.47ms
✔ Copying web assets from dist to ios/App/App/public in 525.16ms
✔ Creating capacitor.config.json in ios/App/App in 223.17μp
✔ copy ios in 528.59ms
✔ Updating iOS plugins in 1.41ms
[info] Found 4 Capacitor plugins for ios:
       @capacitor/app@1.0.2
       @capacitor/clipboard@1.0.2
       @capacitor/filesystem@1.0.2
       capacitor-native-filepicker@0.0.1
✔ Updating iOS native dependencies with pod install in 8.06s
✔ update ios in 8.07s
✔ copy web in 205.46μp
✔ update web in 160.33μp
[info] Sync finished in 9.376s

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable