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.

Erstellen von IOS-Plugins

Auf dieser Seite wird erklärt, was iOS-Plugins für Sie tun können, wie Sie ein vorhandenes Plugin verwenden und wie Sie ein neues programmieren können.

iOS Plugins erlauben die Nutzung von Drittanbieterbibliotheken, sowie iOS spezifische Features wie In-App Einkäufe, GameCenter-Integration, ARKit Unterstützung und mehr.

Laden und Verwenden eines vorhandenen Plugins

Ein iOS-Plugin benötigt eine .gdip-Konfigurationsdatei, eine Binärdatei, die entweder eine statische .a-Bibliothek oder eine .xcframework mit statischen .a-Bibliotheken sein kann, und möglicherweise weitere Abhängigkeiten. Um sie zu benutzen, müssen Sie:

  1. Die Dateien des Plugins in das Verzeichnis res://ios/plugins Ihres Godot-Projekts kopieren. Sie können die Dateien auch in einem Unterverzeichnis gruppieren, z. B. res://ios/plugins/my_plugin.

  2. Der Godot-Editor erkennt und importiert automatisch die .gdip-Dateien in res://ios/plugins und seinen Unterverzeichnissen.

  3. Sie können erkannte Plugins finden und aktivieren, indem Sie zu Projekt -> Exportieren... -> iOS gehen und auf dem Optionen-Tab zum Abschnitt Plugins scrollen.

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

Wenn ein Plugin aktiv ist, können Sie mit Engine.get_singleton() darauf zugreifen:

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

Bemerkung

Die Dateien des Plugins müssen sich im Verzeichnis res://ios/plugins/ oder einem Unterverzeichnis befinden, da der Godot-Editor sie sonst nicht automatisch erkennt.

Erstellen eines iOS-Plugins

Im Kern ist ein Godot-iOS-Plugin eine iOS-Bibliothek (.a-Archivdatei oder .xcframework mit statischen Bibliotheken) mit den folgenden Anforderungen:

  • Die Bibliothek muss eine Abhängigkeit von den Headern der Godot-Engine haben.

  • Die Bibliothek muss eine .gdip-Konfigurationsdatei enthalten.

Ein iOS-Plugin kann die gleiche Funktionalität wie ein Godot-Modul haben, bietet aber mehr Flexibilität und erfordert keinen Rebuild der Engine.

Hier sind die Schritte, um mit der Entwicklung eines Plugins zu beginnen. Wir empfehlen die Verwendung der Entwicklungsumgebung Xcode.

Siehe auch

Die Godot iOS Plugins.

Die Godot iOS Plugin-Vorlage bietet Ihnen alle notwendigen Grundlagen, um Ihr iOS-Plugin zu starten.

Um ein iOS-Plugin zu erstellen:

  1. Erstellen Sie eine statische Objective-C-Bibliothek für Ihr Plugin in Xcode.

  2. Fügen Sie die Godot-Engine-Header-Dateien als Abhängigkeit für Ihre Plugin-Bibliothek in HEADER_SEARCH_PATHS hinzu. Sie finden diese Einstellung auf der Registerkarte Build Settings:

    • Laden Sie den Quellcode der Godot-Engine von der Godot GitHub-Seite herunter.

    • Starten Sie SCons, um Header zu erzeugen. Sie können den Prozess lernen, indem Sie Kompilieren für iOS lesen. Sie müssen nicht warten, bis die Kompilierung abgeschlossen ist, um weiterzumachen, da die Header generiert werden, bevor die Engine mit der Kompilierung beginnt.

    • Sie sollten die gleichen Header-Dateien für iOS-Plugins und für die iOS-Exportvorlage verwenden.

  3. Geben Sie auf dem Build Settings-Tab unter OTHER_CFLAGS die Kompilierungsflags für Ihre statische Bibliothek an. Die wichtigsten sind -fcxx-modules, -fmodules, und -DDEBUG, wenn Sie Debug-Unterstützung benötigen. Andere Flags sollten die gleichen sein, die Sie zum Kompilieren von Godot verwenden. Zum Beispiel:

-DPTRCALL_ENABLED -DDEBUG_ENABLED -DDEBUG_MEMORY_ALLOC -DDISABLE_FORCED_INLINE -DTYPED_METHOD_BIND
  1. Fügen Sie die erforderliche Logik für Ihr Plugin hinzu und erstellen Sie Ihre Bibliothek, um eine .a-Datei zu erzeugen. Wahrscheinlich müssen Sie .a Dateien für das debug und release-Target erstellen. Abhängig von Ihren Bedürfnissen, wählen Sie eine oder beide. Wenn Sie sowohl Debug- als auch Release-.a Dateien benötigen, sollte ihr Name folgendem Muster entsprechen: [PluginName].[TargetType].a. Sie können die statische Bibliothek auch mit Ihrer SCons-Konfiguration erstellen.

  2. Das iOS-Plugin-System unterstützt auch .xcframework-Dateien. Um eine solche zu erzeugen, können Sie einen Befehl wie den folgenden verwenden:

xcodebuild -create-xcframework -library [DeviceLibrary].a -library [SimulatorLibrary].a -output [PluginName].xcframework
  1. Erstellen Sie eine Godot iOS Plugin-Konfigurationsdatei, damit das System Ihr Plugin erkennen und laden kann:

    • Die Erweiterung der Konfigurationsdatei muss gdip lauten (z.B.: MyPlugin.gdip).

    • Das Konfigurationsdateiformat lautet wie folgt:

      [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"
      

      Der Abschnitt config und dessen Felder sind erforderlich und wie folgt definiert:

      • name: Name des Plugins

      • binary: dies sollte der Dateipfad der Plugin-Bibliothek (a oder xcframework) sein.

        • Der Dateipfad kann relativ sein (z.B.: MyPlugin.a, MyPlugin.xcframework). In diesem Fall ist er relativ zu dem Verzeichnis, in dem sich die gdip-Datei befindet.

        • Der Dateipfad kann absolut sein: res://some_path/MyPlugin.a oder res://some_path/MyPlugin.xcframework.

        • Falls Sie eine Multitarget-Bibliothek benötigen, sollte der Dateiname MyPlugin.a lauten und die .a-Dateien sollten als MyPlugin.release.a und MyPlugin.debug.a benannt werden.

        • Falls Sie Multitarget-xcframework-Bibliotheken verwenden, sollte deren Dateiname in der Konfiguration MyPlugin.xcframework lauten. Die .xcframework Dateien sollten als MyPlugin.release.xcframework und MyPlugin.debug.xcframework benannt werden.

      Die Abschnitte dependencies und plist sind optional und wie folgt definiert:

      • Abhängigkeiten:

        • linked: enthält eine Liste von iOS-Frameworks, mit denen die iOS-Anwendung verknüpft werden soll.

        • embedded: enthält eine Liste von iOS-Frameworks oder -Bibliotheken, die sowohl gelinkt als auch in die resultierende iOS-Anwendung eingebettet werden sollen.

        • system: enthält eine Liste der iOS-System-Frameworks, die für das Plugin erforderlich sind.

        • capabilities: enthält eine Liste von iOS-Fähigkeiten, die für das Plugin erforderlich sind. Eine Liste der verfügbaren Fähigkeiten finden Sie auf der Dokumentationsseite Apple UIRequiredDeviceCapabilities.

        • Dateien: enthält eine Liste von Dateien, die beim Export kopiert werden sollen. Dies ist nützlich für Datendateien oder Bilder.

        • linker_flags: enthält eine Liste von Linker-Flags, die beim Exportieren des Plugins zum Xcode-Projekt hinzugefügt werden.

      • plist: sollte Keys und Values haben, die in der Datei Info.plist vorhanden sein sollten.

        • Jede Zeile sollte folgendem Muster folgen: KeyName:KeyType=KeyValue

        • Unterstützte Values für KeyType sind string, integer, boolean, raw, string_input

        • Wenn kein Typ verwendet wird (z.B.: KeyName="KeyValue"), wird der Typ string verwendet.

        • Wenn der raw-Typ verwendet wird, wird der Wert für den entsprechenden Key in der Info.plist gespeichert, wie er ist.

        • Wenn der Typ string_input verwendet wird, können Sie den Wert im Exportfenster ändern.