utopia-rise / fmod-gdextension

FMOD Studio GDExtension bindings for the Godot game engine
MIT License
372 stars 42 forks source link

Missing Info.plist for MacOS frameworks #194

Closed outfrost closed 2 months ago

outfrost commented 4 months ago

When exporting a project that includes fmod-gdextension 4.1.0-4.2.0 in Godot 4.2.1-stable, the macOS export fails at the codesigning step:

Output ``` savepack: end export framework: /home/outfrost/Code/Jams/asdfghtest/godot-wild-jam-66/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework -> /home/outfrost/.cache/godot/GWJ66/GWJ66.app/Contents/Frameworks/libGodotFmod.macos.template_release.framework using built-in codesign... ERROR: CodeSign: Unknown bundle type. at: codesign (platform/macos/export/codesign.cpp:1554) WARNING: Code Signing: Built-in CodeSign failed with error "Unknown bundle type.". at: add_message (editor/export/editor_export_platform.h:179) export: step 2: Code signing bundle using built-in codesign... CodeSign: Signing executable: /home/outfrost/.cache/godot/GWJ66/GWJ66.app/Contents/MacOS, bundle: /home/outfrost/.cache/godot/GWJ66/GWJ66.app/Contents with entitlements /home/outfrost/.cache/godot/GWJ66.entitlements CodeSign: Reading bundle info... CodeSign: Executable is fat, extracting... CodeSign: Generating bundle CodeResources... ERROR: CodeSign/CodeResources: Unsigned nested executable file. at: add_nested_file (platform/macos/export/codesign.cpp:249) ERROR: CodeSign: Failed to process nested resources. at: _codesign_file (platform/macos/export/codesign.cpp:1339) WARNING: Code Signing: Built-in CodeSign failed with error "Failed to process nested resources.". at: add_message (editor/export/editor_export_platform.h:179) export: end ERROR: Project export for preset "macOS" failed. at: _fs_changed (editor/editor_node.cpp:994) ```

(The error messages here are rather obscure, and something that needs work on its own. I should probably file an issue for Godot.) With the help of strace -e open,stat I was able to find a clue.

The mac codesigning step requires a manifest in the form of an Info.plist file, but the fmod-gdextension's release does not contain any such files.

When I created addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/Info.plist with the following contents:

Info.plist ```xml CFBundleExecutable libGodotFmod.macos.template_release CFBundleIdentifier com.utopiarise.fmod-gdextension CFBundleInfoDictionaryVersion 6.0 CFBundleName libGodotFmod.macos.template_release CFBundlePackageType FMWK CFBundleShortVersionString 1.0.0 CFBundleSupportedPlatforms MacOSX CFBundleVersion 1.0.0 LSMinimumSystemVersion 10.12 ```

the build succeeded.

As far as I understand now, in order for projects to build for macOS and work properly, each "framework" needs to have a valid Info.plist manifest included. See also: https://codeberg.org/ksk/godot-luau-script (bin/luau-script/libluau-script.macos.template_release.framework/Info.plist, v0.9.1).

On a side note, I've also noticed the framework files also have inconsistent execute permissions.