Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

Creando plugins de IOS

Esta página explica lo que los complementos de iOS pueden hacer por ti, cómo usar un complemento existente y los pasos para crear uno nuevo.

Los plugins de iOS te permiten utilizar bibliotecas de terceros y admitir características específicas de iOS como compras dentro de la aplicación (In-App Purchases), integración con GameCenter, soporte de ARKit y más.

Cargando y usando un plugin existente

Un plugin de iOS requiere un archivo de configuración .gdip, un archivo binario que puede ser una biblioteca estática .a o un .xcframework que contenga bibliotecas estáticas .a, y posiblemente otras dependencias. Para usarlo, debes hacer lo siguiente:

  1. Copia los archivos del plugin al directorio res://ios/plugins de tu proyecto de Godot. También puedes agrupar los archivos en un subdirectorio, como res://ios/plugins/my_plugin.

  2. El editor de Godot detecta y importa automáticamente los archivos .gdip que se encuentren dentro de res://ios/plugins y sus subdirectorios.

  3. Puedes encontrar y activar los plugins detectados yendo a Proyecto -> Exportar... -> iOS y en la pestaña Opciones, desplázate hasta la sección de Plugins.

../../../_images/ios_export_preset_plugins_section.png

Cuando un plugin está activo, puedes acceder a él en tu código utilizando Engine.get_singleton():

if Engine.has_singleton("MyPlugin"):
    var singleton = Engine.get_singleton("MyPlugin")
    print(singleton.foo())

Nota

The plugin's files have to be in the res://ios/plugins/ directory or a subdirectory, otherwise the Godot editor will not automatically detect them.

Creando un plugin de IOS

En su núcleo, un plugin de iOS para Godot es una biblioteca de iOS (archivo de archivo .a o .xcframework que contiene bibliotecas estáticas) con los siguientes requisitos:

  • La biblioteca debe tener una dependencia en los encabezados del motor de Godot.

  • La biblioteca debe venir con un archivo de configuración .gdip.

Un plugin de iOS puede tener la misma funcionalidad que un módulo de Godot, pero proporciona más flexibilidad y no requiere reconstruir el motor.

Aquí están los pasos para comenzar el desarrollo de un plugin. Recomendamos usar Xcode como tu entorno de desarrollo.

Ver también

The Godot iOS Plugins.

La plantilla Godot iOS plugin template te proporciona todo el código de inicio que necesitas para comenzar con tu plugin de iOS.

Para compilar un plugin para iOS:

  1. Crea una biblioteca estática Objective-C para tu complemento dentro de Xcode.

  2. Agrega los archivos de encabezado del motor de Godot como una dependencia para la biblioteca de tu plugin en HEADER_SEARCH_PATHS. Puedes encontrar esta configuración dentro de la pestaña Build Settings:

    • Descarga el código fuente de Godot desde la página de GitHub de Godot.

    • Ejecuta SCons para generar los encabezados. Puedes aprender el proceso leyendo Compilando para IOS. No es necesario esperar a que termine la compilación para continuar, ya que los encabezados se generan antes de que el motor comience a compilar.

    • Deberías utilizar los mismos archivos de encabezado para los plugins de iOS y para la plantilla de exportación de iOS.

  3. En la pestaña Build Settings, especifica las banderas de compilación para tu biblioteca estática en OTHER_CFLAGS. Las más importantes son -fcxx-modules, -fmodules, y -DDEBUG si necesitas soporte de depuración. Otras banderas deben ser las mismas que usas para compilar Godot. Por ejemplo:

-DPTRCALL_ENABLED -DDEBUG_ENABLED -DDEBUG_MEMORY_ALLOC -DDISABLE_FORCED_INLINE -DTYPED_METHOD_BIND
  1. Agrega la lógica requerida para tu complemento y compila tu biblioteca para generar un archivo .a. Es posible que necesites compilar tanto los archivos .a de destino debug como release. Dependiendo de tus necesidades, elige uno o ambos. Si necesitas tanto los archivos .a de depuración como los de lanzamiento, su nombre debe seguir el siguiente patrón: [NombreDelPlugin].[TipoDeObjetivo].a. También puedes compilar la biblioteca estática con tu configuración de SCons.

  2. El sistema de plugins de iOS también admite archivos .xcframework. Para generar uno, puedes usar un comando como el siguiente:

xcodebuild -create-xcframework -library [DeviceLibrary].a -library [SimulatorLibrary].a -output [PluginName].xcframework
  1. Crea un archivo de configuración de plugin de iOS para Godot para ayudar al sistema a detectar y cargar tu plugin:

    • La extensión del archivo de configuración debe ser gdip (por ejemplo: MyPlugin.gdip).

    • El formato del archivo de configuración es el siguiente:

      [config]
      name="MyPlugin"
      binary="MyPlugin.a"
      
      initialization="init_my_plugin"
      deinitialization="deinit_my_plugin"
      
      [dependencies]
      linked=[]
      embedded=[]
      system=["Foundation.framework"]
      
      capabilities=["arkit", "metal"]
      
      files=["data.json"]
      
      linker_flags=["-ObjC"]
      
      [plist]
      PlistKeyWithDefaultType="Some Info.plist key you might need"
      StringPlistKey:string="String value"
      IntegerPlistKey:integer=42
      BooleanPlistKey:boolean=true
      RawPlistKey:raw="
      <array>
          <string>UIInterfaceOrientationPortrait</string>
      </array>
      "
      StringPlistKeyToInput:string_input="Type something"
      

      La sección config y los campos son obligatorios y se definen de la siguiente manera:

      • name: nombre del plugin

      • binary: esta debe ser la ruta del archivo de la biblioteca del plugin (archivo a o xcframework).

        • La ruta del archivo puede ser relativa (por ejemplo: MyPlugin.a, MyPlugin.xcframework), en cuyo caso será relativa al directorio donde se encuentra el archivo gdip.

        • La ruta del archivo también puede ser absoluta: res://some_path/MyPlugin.a o res://some_path/MyPlugin.xcframework.

        • En caso de que necesites usar la biblioteca para múltiples objetivos, el nombre del archivo debe ser MyPlugin.a, y los archivos .a deben tener los nombres MyPlugin.release.a y MyPlugin.debug.a para las versiones de lanzamiento y depuración, respectivamente.

        • En caso de que utilices bibliotecas xcframework para múltiples objetivos, el nombre del archivo en la configuración debe ser MyPlugin.xcframework. Los archivos .xcframework deben tener los nombres MyPlugin.release.xcframework y MyPlugin.debug.xcframework para las versiones de lanzamiento y depuración, respectivamente.

      Las secciones dependencies y plist son opcionales y se definen de la siguiente manera:

      • dependencias:

        • linked: contiene una lista de frameworks de iOS con los que la aplicación de iOS debe enlazarse.

        • embedded: contiene una lista de frameworks o bibliotecas de iOS que deben estar tanto enlazadas como incrustadas en la aplicación de iOS resultante.

        • system: contiene una lista de frameworks del sistema de iOS que son requeridos para el plugin.

        • capabilities: contiene una lista de capacidades de iOS que son requeridas para el plugin. Puedes encontrar una lista de las capacidades disponibles en la página de documentación de Apple UIRequiredDeviceCapabilities.

        • files: contiene una lista de archivos que se deben copiar durante la exportación. Esto es útil para archivos de datos o imágenes.

        • linker_flags: contiene una lista de banderas del enlazador (linker) para agregar al proyecto de Xcode al exportar el plugin.

      • plist: debe contener claves y valores que deben estar presentes en el archivo Info.plist.

        • Cada línea debe seguir el patrón: NombreClave:TipoClave=ValorClave

        • Los valores admitidos para TipoClave son string, integer, boolean, raw y string_input

        • Si no se utiliza un tipo (por ejemplo: NombreClave="ValorClave"), se utilizará el tipo string por defecto.

        • If raw type is used value for corresponding key will be stored in Info.plist as is.

        • Si se utiliza el tipo string_input, podrás modificar el valor en la ventana de exportación.