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"