Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Створення плагінів iOS

На цій сторінці пояснюється, що плагіни iOS можуть зробити для вас, як використовувати наявний плагін і кроки для кодування нового.

Плагіни iOS дозволяють використовувати бібліотеки сторонніх розробників і підтримують такі функції iOS, як покупки через програму, інтеграція з GameCenter, підтримка ARKit тощо.

Завантаження та використання наявного плагіна

Для плагіна iOS потрібен файл конфігурації .gdip, двійковий файл, який може бути або .a статичною бібліотекою, .xcframework, що містить .a статичні бібліотеки, і, можливо, інші залежності. Щоб ним скористатися, потрібно:

  1. Скопіюйте файли плагіна в каталог res://ios/plugins вашого проекту Godot. Ви також можете групувати файли в підкаталозі, наприклад res://ios/plugins/my_plugin.

  2. Редактор Godot автоматично виявляє та імпортує файли .gdip у res://ios/plugins та його підкаталоги.

  3. Ви можете знайти та активувати виявлені плагіни, перейшовши в «Проект» -> «Експорт...» -> «iOS» і перейшовши на вкладку «Параметри» до розділу «Плагіни».

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

Коли плагін активний, ви можете отримати до нього доступ у своєму коді за допомогою Engine.get_singleton():

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

Примітка

Файли плагіна мають бути в каталозі res://ios/plugins/ або підкаталозі, інакше редактор Godot не виявить їх автоматично.

Створення плагіна iOS

За своєю суттю плагін Godot для iOS — це бібліотека iOS (.a архівний файл або .xcframework, що містить статичні бібліотеки) з такими вимогами:

  • Бібліотека повинна мати залежність від заголовків механізму Godot.

  • Бібліотека має поставлятися з файлом конфігурації .gdip.

Плагін iOS може мати таку саму функціональність, як і модуль Godot, але забезпечує більшу гнучкість і не потребує переналаштування механізму.

Ось кроки для початку розробки плагіна. Ми рекомендуємо використовувати Xcode як середовище розробки.

Дивись також

Плагіни для iOS від Godot.

Шаблон плагіна Godot для iOS дає вам усі шаблони, необхідні для запуску плагіна для iOS.

Створити плагін для iOS:

  1. Створіть статичну бібліотеку Objective-C для свого плагіна в Xcode.

  2. Додайте файли заголовків механізму Godot як залежність для вашої бібліотеки плагінів у HEADER_SEARCH_PATHS. Ви можете знайти налаштування на вкладці Налаштування збірки:

    • Завантажте вихідний код механізму Godot зі сторінки Godot GitHub.

    • Запустіть SCons, щоб створити заголовки. Ви можете дізнатися про процес, прочитавши Компіляція для iOS. Вам не потрібно чекати завершення компіляції, щоб рухатися вперед, оскільки заголовки генеруються до того, як двигун почне компілювати.

    • Ви повинні використовувати однакові файли заголовків для плагінів iOS і для шаблону експорту iOS.

  3. На вкладці Налаштування збірки вкажіть позначки компіляції для вашої статичної бібліотеки в OTHER_CFLAGS. Найважливішими є -fcxx-modules, -fmodules і -DDEBUG, якщо вам потрібна підтримка налагодження. Інші прапорці мають бути такими ж, які ви використовуєте для компіляції Godot. наприклад:

-DPTRCALL_ENABLED -DDEBUG_ENABLED -DDEBUG_MEMORY_ALLOC -DDISABLE_FORCED_INLINE -DTYPED_METHOD_BIND
  1. Додайте необхідну логіку для свого плагіна та створіть бібліотеку для створення файлу .a. Ймовірно, вам знадобиться створити цільові файли debug і release .a. Залежно від ваших потреб виберіть одне або обидва. Якщо вам потрібні як файли налагодження, так і файли випуску .a, їх ім’я має відповідати наступному шаблону: [PluginName].[TargetType].a. Ви також можете створити статичну бібліотеку за допомогою конфігурації SCons.

  2. Система плагінів iOS також підтримує файли .xcframework. Щоб створити його, ви можете використати таку команду:

xcodebuild -create-xcframework -library [DeviceLibrary].a -library [SimulatorLibrary].a -output [PluginName].xcframework
  1. Створіть файл конфігурації плагіна Godot iOS, щоб допомогти системі виявити та завантажити ваш плагін:

    • Розширення файлу конфігурації має бути gdip (наприклад: MyPlugin.gdip).

    • Формат файлу конфігурації такий:

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

The config section and fields are required and defined as follow:

  • name: name of the plugin

  • binary: this should be the filepath of the plugin library (a or xcframework) file.

    • The filepath can be relative (e.g.: MyPlugin.a, MyPlugin.xcframework) in which case it's relative to the directory where the gdip file is located.

    • The filepath can be absolute: res://some_path/MyPlugin.a or res://some_path/MyPlugin.xcframework.

    • In case you need multitarget library usage, the filename should be MyPlugin.a and .a files should be named as MyPlugin.release.a and MyPlugin.debug.a.

    • In case you use multitarget xcframework libraries, their filename in the configuration should be MyPlugin.xcframework. The .xcframework files should be named as MyPlugin.release.xcframework and MyPlugin.debug.xcframework.

The dependencies and plist sections are optional and defined as follow:

  • dependencies:

    • linked: contains a list of iOS frameworks that the iOS application should be linked with.

    • embedded: contains a list of iOS frameworks or libraries that should be both linked and embedded into the resulting iOS application.

    • system: contains a list of iOS system frameworks that are required for plugin.

    • capabilities: contains a list of iOS capabilities that is required for plugin. A list of available capabilities can be found at Apple UIRequiredDeviceCapabilities documentation page.

    • files: contains a list of files that should be copied on export. This is useful for data files or images.

    • linker_flags: contains a list of linker flags to add to the Xcode project when exporting the plugin.

  • plist: should have keys and values that should be present in Info.plist file.

    • Each line should follow pattern: KeyName:KeyType=KeyValue

    • Supported values for KeyType are string, integer, boolean, raw, string_input

    • If no type is used (e.g.: KeyName="KeyValue") string type will be used.

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

    • If string_input type is used you will be able to modify value in Export window.