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:
Copia los archivos del plugin al directorio
res://ios/plugins
de tu proyecto de Godot. También puedes agrupar los archivos en un subdirectorio, comores://ios/plugins/my_plugin
.El editor de Godot detecta y importa automáticamente los archivos
.gdip
que se encuentren dentro deres://ios/plugins
y sus subdirectorios.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.
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())
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
Plugin de Godot Google Play Billing.
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:
Crea una biblioteca estática Objective-C para tu complemento dentro de Xcode.
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ñaBuild 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.
En la pestaña
Build Settings
, especifica las banderas de compilación para tu biblioteca estática enOTHER_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
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 destinodebug
comorelease
. 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.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
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
oxcframework
).La ruta del archivo puede ser relativa (por ejemplo:
MyPlugin.a
,MyPlugin.xcframework
), en cuyo caso será relativa al directorio donde se encuentra el archivogdip
.La ruta del archivo también puede ser absoluta:
res://some_path/MyPlugin.a
ores://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 nombresMyPlugin.release.a
yMyPlugin.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 serMyPlugin.xcframework
. Los archivos.xcframework
deben tener los nombresMyPlugin.release.xcframework
yMyPlugin.debug.xcframework
para las versiones de lanzamiento y depuración, respectivamente.
Las secciones
dependencies
yplist
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
sonstring
,integer
,boolean
,raw
ystring_input
Si no se utiliza un tipo (por ejemplo:
NombreClave="ValorClave"
), se utilizará el tipostring
por defecto.Si se utiliza el tipo
raw
, el valor correspondiente se almacenará enInfo.plist
tal como está, sin ninguna modificación.Si se utiliza el tipo
string_input
, podrás modificar el valor en la ventana de exportación.