From a432d34b2dbd3a7b60eae3de96b23ffe2c100075 Mon Sep 17 00:00:00 2001
From: Hyo
Date: Thu, 20 Aug 2026 09:09:48 +0900
Subject: [PATCH 1/3] fix(godot): declare Apple-only GDExtension with
include_tags
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The addon shipped supported_platforms, which Godot never reads — it is not
a key in the .gdextension format, so the loader always fell through to the
library search and printed 'No GDExtension library found' on Windows and
Linux editors (#366). include_tags is the real key: the loader matches it
before searching libraries and returns ERR_SKIP, which the manager treats
as not-loaded without logging.
That key exists only in Godot master (4.8-dev), so 4.3-4.7 still print the
errors — godotengine/godot#105615 is open with no released fix. Document
the rename workaround for those versions instead of pretending the config
handles it.
Closes #366
Co-Authored-By: Claude Opus 5
---
.github/workflows/release-godot.yml | 8 ++--
.../godot-iap/.claude/guides/03-ios-plugin.md | 2 +-
.../godot-iap/bin/godot_iap.gdextension | 2 +-
packages/docs/src/pages/docs/setup/godot.tsx | 40 +++++++++++++++++++
4 files changed, 46 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/release-godot.yml b/.github/workflows/release-godot.yml
index 5c5d2f9ad..9f8c7a26b 100644
--- a/.github/workflows/release-godot.yml
+++ b/.github/workflows/release-godot.yml
@@ -371,7 +371,7 @@ jobs:
[configuration]
entry_symbol = "godot_iap_entry_point"
compatibility_minimum = "4.3"
- supported_platforms = ["ios", "macos"]
+ include_tags = ["ios", "macos"]
[libraries]
ios.arm64 = "ios/GodotIap.framework/GodotIap"
@@ -388,7 +388,7 @@ jobs:
[configuration]
entry_symbol = "godot_iap_entry_point"
compatibility_minimum = "4.3"
- supported_platforms = ["ios"]
+ include_tags = ["ios"]
[libraries]
ios.arm64 = "ios/GodotIap.framework/GodotIap"
@@ -462,12 +462,12 @@ jobs:
test -d "$VERIFY_DIR/addons/godot-iap/bin/ios/SwiftGodotRuntime.framework"
bash scripts/verify-ios-toolchain.sh "$VERIFY_DIR/addons/godot-iap/bin/ios"
if [ "$NOTARIZE_MACOS" = "true" ]; then
- grep -q '^supported_platforms = \["ios", "macos"\]' "$VERIFY_DIR/addons/godot-iap/bin/godot_iap.gdextension"
+ grep -q '^include_tags = \["ios", "macos"\]' "$VERIFY_DIR/addons/godot-iap/bin/godot_iap.gdextension"
grep -q '^macos\.' "$VERIFY_DIR/addons/godot-iap/bin/godot_iap.gdextension"
codesign --verify --deep --strict --verbose=2 "$VERIFY_DIR/addons/godot-iap/bin/macos/SwiftGodotRuntime.framework"
codesign --verify --deep --strict --verbose=2 "$VERIFY_DIR/addons/godot-iap/bin/macos/GodotIap.framework"
else
- grep -q '^supported_platforms = \["ios"\]' "$VERIFY_DIR/addons/godot-iap/bin/godot_iap.gdextension"
+ grep -q '^include_tags = \["ios"\]' "$VERIFY_DIR/addons/godot-iap/bin/godot_iap.gdextension"
test ! -d "$VERIFY_DIR/addons/godot-iap/bin/macos"
if grep -q '^macos\.' "$VERIFY_DIR/addons/godot-iap/bin/godot_iap.gdextension"; then
echo "Error: default release zip must not declare macOS libraries"
diff --git a/libraries/godot-iap/.claude/guides/03-ios-plugin.md b/libraries/godot-iap/.claude/guides/03-ios-plugin.md
index fe674b297..08452de56 100644
--- a/libraries/godot-iap/.claude/guides/03-ios-plugin.md
+++ b/libraries/godot-iap/.claude/guides/03-ios-plugin.md
@@ -40,7 +40,7 @@ Godot export doesn't embed frameworks automatically. The `scripts/fix_ios_embed.
[configuration]
entry_symbol = "godot_iap_entry_point"
compatibility_minimum = "4.3"
-supported_platforms = ["ios", "macos"]
+include_tags = ["ios", "macos"]
[libraries]
ios.arm64 = "ios/GodotIap.framework/GodotIap"
diff --git a/libraries/godot-iap/addons/godot-iap/bin/godot_iap.gdextension b/libraries/godot-iap/addons/godot-iap/bin/godot_iap.gdextension
index 666afef8d..9b5473ad8 100644
--- a/libraries/godot-iap/addons/godot-iap/bin/godot_iap.gdextension
+++ b/libraries/godot-iap/addons/godot-iap/bin/godot_iap.gdextension
@@ -1,7 +1,7 @@
[configuration]
entry_symbol = "godot_iap_entry_point"
compatibility_minimum = "4.3"
-supported_platforms = ["ios", "macos"]
+include_tags = ["ios", "macos"]
[libraries]
ios.arm64 = "ios/GodotIap.framework/GodotIap"
diff --git a/packages/docs/src/pages/docs/setup/godot.tsx b/packages/docs/src/pages/docs/setup/godot.tsx
index 43b41b888..46d69f863 100644
--- a/packages/docs/src/pages/docs/setup/godot.tsx
+++ b/packages/docs/src/pages/docs/setup/godot.tsx
@@ -659,6 +659,46 @@ func _on_purchase_error(error):
iOS: Xcode Framework Embedding and run{' '}
fix_ios_embed.sh.
+
+
+ GDExtension errors in the Windows or Linux editor
+
+ #
+
+
+
+ The bundled GDExtension ships Apple libraries only, so editors on
+ Windows and Linux log{' '}
+
+ No GDExtension library found for current OS and architecture
+ {' '}
+ each time the project is scanned. Android is unaffected: it loads the
+ AAR plugin from addons/godot-iap/android/, and Android
+ exports keep working.
+
+
+ Godot 4.8 skips the extension silently, because the addon declares{' '}
+ include_tags. Godot 4.3 through 4.7 have no way to
+ suppress the message (
+
+ godotengine/godot#105615
+
+ ). While developing for Android on a non-Apple machine, rename the
+ file:
+
+
+ {`mv addons/godot-iap/bin/godot_iap.gdextension \\
+ addons/godot-iap/bin/godot_iap.gdextension.disabled`}
+
+
+ Restore the name before building for iOS or macOS. Those builds
+ require a Mac, so nothing in bin/ is usable from a
+ Windows or Linux machine in the meantime.
+
From 74a9699c20df3daf0ab4698f5537d1cf944cec40 Mon Sep 17 00:00:00 2001
From: Hyo
Date: Thu, 20 Aug 2026 09:19:41 +0900
Subject: [PATCH 2/3] fix(godot): regenerate the GDExtension config with
include_tags
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The Makefile writes the same [configuration] block the release workflow
does, and it still emitted supported_platforms — the next 'make macos'
would have silently reverted the tracked file, and 'make test-setup'
would have copied the stale key into the TestProject that gets device
tested. Pin all three copies with a CI step so the next drift fails
instead of shipping.
Co-Authored-By: Claude Opus 5
---
.github/workflows/ci-godot-iap.yml | 15 +++++++++++++++
libraries/godot-iap/Makefile | 2 +-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/ci-godot-iap.yml b/.github/workflows/ci-godot-iap.yml
index 77873dc20..38dc8ef39 100644
--- a/.github/workflows/ci-godot-iap.yml
+++ b/.github/workflows/ci-godot-iap.yml
@@ -69,6 +69,21 @@ jobs:
test -f addons/godot-iap/godot_iap.gd
echo "All required plugin files exist"
+ # The same [configuration] block is written in three places: this
+ # tracked file, the Makefile that regenerates it, and the release
+ # workflow that builds the zip. They drifted once (#366), so pin them.
+ - name: Verify GDExtension platform gating
+ run: |
+ EXT=addons/godot-iap/bin/godot_iap.gdextension
+ grep -qx 'include_tags = \["ios", "macos"\]' "$EXT"
+ grep -q "printf '%s\\\\n' 'include_tags = \[\"ios\", \"macos\"\]'" Makefile
+ if git -C "$GITHUB_WORKSPACE" grep -nE 'supported_platforms[[:space:]]*=' \
+ -- . ':!libraries/godot-iap/SwiftGodot'; then
+ echo "supported_platforms is not a Godot .gdextension key; use include_tags"
+ exit 1
+ fi
+ echo "GDExtension platform gating is consistent"
+
- name: Verify Android plugin files exist
run: |
test -f android/build.gradle.kts
diff --git a/libraries/godot-iap/Makefile b/libraries/godot-iap/Makefile
index c0654c6e2..032d09726 100644
--- a/libraries/godot-iap/Makefile
+++ b/libraries/godot-iap/Makefile
@@ -175,7 +175,7 @@ macos-build:
printf '%s\n' '[configuration]'; \
printf '%s\n' 'entry_symbol = "godot_iap_entry_point"'; \
printf '%s\n' 'compatibility_minimum = "4.3"'; \
- printf '%s\n' 'supported_platforms = ["ios", "macos"]'; \
+ printf '%s\n' 'include_tags = ["ios", "macos"]'; \
printf '\n%s\n' '[libraries]'; \
printf '%s\n' 'ios.arm64 = "ios/GodotIap.framework/GodotIap"'; \
printf '%s\n' 'macos.arm64 = "macos/GodotIap.framework/GodotIap"'; \
From 182a6071c254e276550123e1f8c7e2ac4840096b Mon Sep 17 00:00:00 2001
From: Hyo
Date: Thu, 20 Aug 2026 09:34:43 +0900
Subject: [PATCH 3/3] ci: pin the release workflow's GDExtension variants too
The guard's own comment named three producers but checked two. The
release workflow emits both an iOS+macOS and an iOS-only variant, and
its in-workflow greps only compare it against itself, so a matched
drift there would still ship.
Co-Authored-By: Claude Opus 5
---
.github/workflows/ci-godot-iap.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.github/workflows/ci-godot-iap.yml b/.github/workflows/ci-godot-iap.yml
index 38dc8ef39..805825457 100644
--- a/.github/workflows/ci-godot-iap.yml
+++ b/.github/workflows/ci-godot-iap.yml
@@ -75,8 +75,11 @@ jobs:
- name: Verify GDExtension platform gating
run: |
EXT=addons/godot-iap/bin/godot_iap.gdextension
+ RELEASE=$GITHUB_WORKSPACE/.github/workflows/release-godot.yml
grep -qx 'include_tags = \["ios", "macos"\]' "$EXT"
grep -q "printf '%s\\\\n' 'include_tags = \[\"ios\", \"macos\"\]'" Makefile
+ grep -qF 'include_tags = ["ios", "macos"]' "$RELEASE"
+ grep -qF 'include_tags = ["ios"]' "$RELEASE"
if git -C "$GITHUB_WORKSPACE" grep -nE 'supported_platforms[[:space:]]*=' \
-- . ':!libraries/godot-iap/SwiftGodot'; then
echo "supported_platforms is not a Godot .gdextension key; use include_tags"