diff --git a/README.md b/README.md index 9cf5a7e..c3aafe7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Godot iOS plugins +> [!NOTE] +> +> iOS plugins are not editor plugins. + [`master` branch](https://github.com/godotengine/godot-ios-plugins/tree/master) is the current development branch and can introduce breaking changes to plugin's public interface. [`3.3` branch](https://github.com/godotengine/godot-ios-plugins/tree/3.3)'s aim is to provide same public interface as it was before the switch to new iOS plugin system. @@ -44,12 +48,18 @@ scons platform=iphone target=debug ### For Godot 4.x: -```bash -scons platform=ios target=debug -``` -You don't have to wait for full engine compilation, as header files are generated first. -Once the actual compilation starts, you can stop this command by pressing Ctrl + C. +1. After cloning this repository, go to `godot` submodule and switch to the tag of the engine version you are working with. For example, `git checkout 4.4-stable`. + +2. If the version is lower than 4.4, you will need to cherry-pick the commit from [here](https://github.com/godotengine/godot/pull/97510). Depending on the version, it might cause a conflict in the file `drivers/vulkan/rendering_context_driver_vulkan.h` which you resolve by taking the changes from the cherry-picked commit for the conflicting section only. + +3. Install `scons` if it is not already installed (eg `brew install scons`). + +4. [Build Godot for iOS target](https://docs.godotengine.org/en/stable/contributing/development/compiling/compiling_for_ios.html): `scons platform=ios target=editor` + +5. Run the plugin creation script. This step needs to be repeated for each of the plugins you want to use. Go to the root of this repository then run `./scripts/generate_xcframework.sh 4.0`. The result will be an xcframework in bin directory. + +### Extra info - Run the command below to generate an `.a` static library for chosen target: @@ -59,19 +69,36 @@ scons target= arch= simulator= plugin **Note:** Godot's official `debug` export templates are compiled with the `release_debug` target, *not* the `debug` target. -## Building a `.a` library +#### Building a `.a` library - Run `./scripts/generate_static_library.sh ` to generate `fat` static library with specific configuration. - The result `.a` binary will be stored in the `bin/` folder. -## Building a `.xcframework` library +#### Building a `.xcframework` library - Run `./scripts/generate_xcframework.sh ` to generate `xcframework` with specific configuration. `xcframework` allows plugin to support both `arm64` device and `arm64` simulator. - The result `.xcframework` will be stored in the `bin/` folder as well as intermidiate `.a` binaries. + +## Adding plugins to a Godot project + +More detailed instructions can be found in the [official docs](https://docs.godotengine.org/en/stable/tutorials/platform/ios/ios_plugin.html#loading-and-using-an-existing-plugin). + +1. Build both release and debug xcframeworks of the desired plugin. + +2. In your Godot project, create `res://ios/plugin` and copy there the `.gdip` (from the plugin source directory in this repository) and both `*.xcframework` files for the plugin (from the `bin/` directory). + +3. Go to **Project > Export** and select the iOS export preset (or create one if it doesn't exist already). In the **Options** tab, scroll to **Plugins** and enable the plugin. + +## C\# + +It is possible to verify that the plugin's singleton is loaded using `Engine.HasSingleton("InAppStore")` and get access to it with `Engine.GetSingleton("InAppStore")`. + +The return type is always `GodotObject`. The methods which the plugin expose can be called indirectly with `Variant Call(StringName method, params Variant[] @args)` metod of `GodotObject`. + ## Documentation Each plugin provides a `README.md` file which contains documentation and examples.