diff --git a/.github/workflows/ci-godot-iap.yml b/.github/workflows/ci-godot-iap.yml index 77873dc20..805825457 100644 --- a/.github/workflows/ci-godot-iap.yml +++ b/.github/workflows/ci-godot-iap.yml @@ -69,6 +69,24 @@ 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 + 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" + 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/.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/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"'; \ 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. +