[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GV8RT9G5S727FMC7ZRVGVR":3,"skill-same:01M6GV8RT9G5S727FMC7ZRVGVR":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6GV8RT9G5S727FMC7ZRVGVR","platform-export",null,"Cross-platform Godot 4 export — Windows, macOS, Linux, Android, iOS. Prerequisites, export_presets.cfg, CLI commands, and platform gotchas.","dragoscirjan\u002Fopencode-config","dragoscirjan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F950596?v=4","01M6GV509X835Z595VVKDX1HFY","Dragos Cirjan","01M6GV50XSMSSD7W2M2KJXTQN6",1,"MIT","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Fgodot-platform-export\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"export","platform","platform export","macos","cli","android","linux","windows","ios","CFG","cross-platform","commands","godot","2026-11-10 10:12:30",false,"---\nname: platform-export\ndescription: Cross-platform Godot 4 export — Windows, macOS, Linux, Android, iOS. Prerequisites, export_presets.cfg, CLI commands, and platform gotchas.\n---\n\n# Platform Export\n\nExport a Godot 4 project to Windows, macOS, Linux, Android, and iOS.\n\n## Prerequisites (All Platforms)\n\n- **Godot 4** with export templates installed:\n  ```bash\n  # Download matching templates (replace version)\n  godot --headless --export-templates-install \u002Fpath\u002Fto\u002FGodot_v4.x-stable_export_templates.tpz\n  ```\n- **Project validates cleanly:** `timeout 60 godot --headless --quit 2>&1` — no errors\n\n## Platform-Specific Prerequisites\n\n### Windows\n\n- **Host:** Windows, macOS, or Linux\n- **Optional:** `rcedit` for icon\u002Fmetadata embedding (Windows host only)\n- No code signing required for distribution outside Microsoft Store\n\n### macOS\n\n- **Host:** macOS required for signed\u002Fnotarized builds; cross-compile from Linux\u002FWindows produces unsigned `.app`\n- **Optional:** Xcode command line tools, Apple Developer account (for notarization)\n- **Codesigning:** `codesign` + Developer ID certificate for distribution outside App Store\n\n### Linux\n\n- **Host:** Any (Windows, macOS, Linux)\n- No special requirements — simplest export target\n\n### Android\n\n- **Host:** Windows, macOS, or Linux\n- **OpenJDK 17** — `java -version` must report 17.x\n- **Android SDK** — with platform-tools and build-tools\n- **Debug keystore** — generated or provided\n- **Editor settings** configured with Java\u002FSDK\u002Fkeystore paths:\n  ```\n  export\u002Fandroid\u002Fjava_sdk_path\n  export\u002Fandroid\u002Fandroid_sdk_path\n  export\u002Fandroid\u002Fdebug_keystore\n  export\u002Fandroid\u002Fdebug_keystore_user\n  export\u002Fandroid\u002Fdebug_keystore_pass\n  ```\n\n### iOS\n\n- **Host:** macOS only (Xcode required)\n- **Xcode** with iOS SDK\n- **Apple Developer account** with provisioning profiles and signing certificates\n- **Team ID** and **Bundle Identifier** configured\n- Most complex export target — requires physical macOS machine\n\n---\n\n## Export Workflow\n\n### 1. Configure project.godot\n\nAdd platform-specific settings as needed:\n\n```ini\n[rendering]\n\n# Android\u002FiOS — required for mobile GPU compatibility:\ntextures\u002Fvram_compression\u002Fimport_etc2_astc=true\n\n# Desktop — optional quality settings:\nanti_aliasing\u002Fquality\u002Fmsaa_3d=2\n```\n\n**CRITICAL for Android:** Without `textures\u002Fvram_compression\u002Fimport_etc2_astc=true`, export silently fails with a blank configuration error.\n\n### 2. Create export_presets.cfg\n\nPlace in project root. Each platform is a numbered `[preset.N]` section. Include only the platforms you need.\n\n#### Windows Preset\n\n```ini\n[preset.0]\n\nname=\"Windows\"\nplatform=\"Windows Desktop\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.0.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\nbinary_format\u002Fembed_pck=true\ntexture_format\u002Fs3tc_bptc=true\ntexture_format\u002Fetc2_astc=false\ncodesign\u002Fenable=false\napplication\u002Fmodify_resources=false\napplication\u002Ficon=\"\"\napplication\u002Fconsole_wrapper_icon=\"\"\napplication\u002Ficon_interpolation=4\napplication\u002Ffile_version=\"\"\napplication\u002Fproduct_version=\"\"\napplication\u002Fcompany_name=\"\"\napplication\u002Fproduct_name=\"\"\napplication\u002Ffile_description=\"\"\napplication\u002Fcopyright=\"\"\napplication\u002Ftrademarks=\"\"\napplication\u002Fexport_angle=0\nssh_remote_deploy\u002Fenabled=false\n```\n\n#### macOS Preset\n\n```ini\n[preset.1]\n\nname=\"macOS\"\nplatform=\"macOS\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.1.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\nbinary_format\u002Farchitecture=\"universal\"\ncodesign\u002Fenable=false\ncodesign\u002Fidentity=\"\"\ncodesign\u002Fcertificate_file=\"\"\ncodesign\u002Fcertificate_password=\"\"\ncodesign\u002Fprovisioning_profile=\"\"\ncodesign\u002Fentitlements\u002Fcustom_file=\"\"\ncodesign\u002Fentitlements\u002Fallow_jit_code_execution=false\ncodesign\u002Fentitlements\u002Fallow_unsigned_executable_memory=false\ncodesign\u002Fentitlements\u002Fallow_dyld_environment_variables=false\nnotarization\u002Fenable=false\napplication\u002Ficon=\"\"\napplication\u002Fbundle_identifier=\"com.example.PROJECTNAME\"\napplication\u002Fsignature=\"\"\napplication\u002Fapp_category=\"Games\"\napplication\u002Fshort_version=\"1.0\"\napplication\u002Fversion=\"1.0\"\napplication\u002Fcopyright=\"\"\napplication\u002Fmin_macos_version=\"10.13\"\napplication\u002Fexport_angle=0\nssh_remote_deploy\u002Fenabled=false\n```\n\n#### Linux Preset\n\n```ini\n[preset.2]\n\nname=\"Linux\"\nplatform=\"Linux\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.2.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\nbinary_format\u002Fembed_pck=true\nbinary_format\u002Farchitecture=\"x86_64\"\ntexture_format\u002Fs3tc_bptc=true\ntexture_format\u002Fetc2_astc=false\nssh_remote_deploy\u002Fenabled=false\n```\n\n#### Android Preset\n\n```ini\n[preset.3]\n\nname=\"Android\"\nplatform=\"Android\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.3.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\ngradle_build\u002Fuse_gradle_build=false\ngradle_build\u002Fgradle_build_directory=\"\"\ngradle_build\u002Fandroid_source_template=\"\"\ngradle_build\u002Fexport_format=0\narchitectures\u002Farmeabi-v7a=false\narchitectures\u002Farm64-v8a=true\narchitectures\u002Fx86=false\narchitectures\u002Fx86_64=false\nkeystore\u002Fdebug=\"\"\nkeystore\u002Fdebug_user=\"\"\nkeystore\u002Fdebug_password=\"\"\nkeystore\u002Frelease=\"\"\nkeystore\u002Frelease_user=\"\"\nkeystore\u002Frelease_password=\"\"\nversion\u002Fcode=1\nversion\u002Fname=\"1.0\"\npackage\u002Funique_name=\"com.example.PROJECTNAME\"\npackage\u002Fname=\"\"\npackage\u002Fsigned=true\npackage\u002Fapp_category=2\npackage\u002Fretain_data_on_uninstall=false\npackage\u002Fexclude_from_recents=false\npackage\u002Fshow_in_android_tv=false\npackage\u002Fshow_in_app_library=true\npackage\u002Fshow_as_launcher_app=false\nlauncher_icons\u002Fmain_192x192=\"\"\nlauncher_icons\u002Fadaptive_foreground_432x432=\"\"\nlauncher_icons\u002Fadaptive_background_432x432=\"\"\nlauncher_icons\u002Fadaptive_monochrome_432x432=\"\"\ngraphics\u002Fopengl_debug=false\nxr_features\u002Fxr_mode=0\nscreen\u002Fimmersive_mode=true\nscreen\u002Fsupport_small=true\nscreen\u002Fsupport_normal=true\nscreen\u002Fsupport_large=true\nscreen\u002Fsupport_xlarge=true\nuser_data_backup\u002Fallow=false\ncommand_line\u002Fextra_args=\"\"\napk_expansion\u002Fenable=false\napk_expansion\u002FSALT=\"\"\napk_expansion\u002Fpublic_key=\"\"\npermissions\u002Fcustom_permissions=PackedStringArray()\npermissions\u002Finternet=false\n```\n\n#### iOS Preset\n\n```ini\n[preset.4]\n\nname=\"iOS\"\nplatform=\"iOS\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.4.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\napplication\u002Fapp_store_team_id=\"\"\napplication\u002Fprovisioning_profile_uuid_debug=\"\"\napplication\u002Fprovisioning_profile_uuid_release=\"\"\napplication\u002Fbundle_identifier=\"com.example.PROJECTNAME\"\napplication\u002Fsignature=\"\"\napplication\u002Fshort_version=\"1.0\"\napplication\u002Fversion=\"1.0\"\napplication\u002Ficon_1024x1024=\"\"\napplication\u002Flaunch_screens_interpolation=4\napplication\u002Fexport_project_only=false\napplication\u002Fmin_ios_version=\"12.0\"\narchitectures\u002Farm64=true\ncapabilities\u002Faccess_wifi=false\ncapabilities\u002Fpush_notifications=false\nuser_data\u002Faccessible_from_files_app=false\nuser_data\u002Faccessible_from_itunes_share=false\nprivacy\u002Fcamera=false\nprivacy\u002Fmicrophone=false\nprivacy\u002Fphotolibrary=false\nicons\u002Fiphone_120x120=\"\"\nicons\u002Fiphone_180x180=\"\"\nicons\u002Fipad_76x76=\"\"\nicons\u002Fipad_152x152=\"\"\nicons\u002Fipad_167x167=\"\"\nstoryboard\u002Fuse_launch_screen_storyboard=true\nstoryboard\u002Fimage_scale_mode=0\nstoryboard\u002Fcustom_image@2x=\"\"\nstoryboard\u002Fcustom_image@3x=\"\"\nstoryboard\u002Fuse_custom_bg_color=false\nstoryboard\u002Fcustom_bg_color=Color(0, 0, 0, 1)\n```\n\nReplace `PROJECTNAME` in `package\u002Funique_name` and `bundle_identifier` with the actual project name (lowercase, no spaces\u002Fspecial chars).\n\n### 3. Export\n\n```bash\nmkdir -p build\n\n# Windows — produces .exe + .pck\ngodot --headless --export-debug \"Windows\" build\u002Fgame.exe\n\n# macOS — produces .zip containing .app bundle\ngodot --headless --export-debug \"macOS\" build\u002Fgame.zip\n\n# Linux — produces executable binary\ngodot --headless --export-debug \"Linux\" build\u002Fgame.x86_64\n\n# Android — produces .apk\ngodot --headless --export-debug \"Android\" build\u002Fgame.apk\n\n# iOS — produces Xcode project (.xcodeproj)\ngodot --headless --export-debug \"iOS\" build\u002Fgame.ipa\n```\n\nThe preset name in quotes must match the `name=` field in `export_presets.cfg`.\n\nFor release builds, use `--export-release` instead of `--export-debug`.\n\n---\n\n## Platform Gotchas\n\n### Windows\n\n- `binary_format\u002Fembed_pck=true` creates a single `.exe` with data embedded — simpler distribution\n- Without `rcedit`, the `.exe` has no custom icon or version metadata (functional, just generic icon)\n- Windows Defender SmartScreen may block unsigned executables — users need to click \"Run anyway\"\n\n### macOS\n\n- Unsigned apps trigger Gatekeeper — users must right-click → Open on first launch\n- For distribution: `codesign --deep -s \"Developer ID Application: ...\" game.app`\n- Notarization: `xcrun notarytool submit game.zip --apple-id ... --team-id ... --password ...`\n- Universal binary (`architecture=\"universal\"`) supports both Intel and Apple Silicon\n\n### Linux\n\n- Mark executable: `chmod +x game.x86_64`\n- AppImage or Flatpak wrapping for broader distribution (out of scope for basic export)\n- `texture_format\u002Fs3tc_bptc=true` required for desktop GPU compatibility\n\n### Android\n\n- **Blank config error** — missing `textures\u002Fvram_compression\u002Fimport_etc2_astc=true` in project.godot\n- **Keystore error** — all three editor settings (`debug_keystore`, `debug_keystore_user`, `debug_keystore_pass`) must be set together or none (falls back to debug keystore)\n- **`cannot connect to daemon`** — benign, no adb server running\n- **Gradle-only fields** — `min_sdk`, `target_sdk`, `compress_native_libraries` cause errors when `use_gradle_build=false`\n- ARM64 only (`arm64-v8a=true`) covers 98%+ of modern Android devices\n\n### iOS\n\n- Export produces an Xcode project — must open in Xcode on macOS to build `.ipa`\n- Provisioning profiles must match the bundle identifier exactly\n- Debug builds require a development provisioning profile; TestFlight\u002FApp Store requires distribution profile\n- Physical device testing requires the device UDID in the provisioning profile\n- Most common failure: mismatched Team ID, bundle ID, or expired provisioning profile\n\n---\n\n## Touch Input (Mobile)\n\nFor Android\u002FiOS, add touch controls to the project:\n\n```gdscript\n# In project.godot:\n# [input_devices]\n# pointing\u002Femulate_touch_from_mouse=true\n# pointing\u002Femulate_mouse_from_touch=true\n\n# Or add virtual joystick\u002Fbuttons in a CanvasLayer\n# Use InputEventScreenTouch and InputEventScreenDrag for direct touch\n```\n\n## Multi-Platform project.godot\n\nWhen targeting multiple platforms, combine rendering settings:\n\n```ini\n[rendering]\n\n# Desktop quality\nanti_aliasing\u002Fquality\u002Fmsaa_3d=2\nlights_and_shadows\u002Fdirectional_shadow\u002Fsoft_shadow_filter_quality=3\n\n# Mobile compatibility\ntextures\u002Fvram_compression\u002Fimport_etc2_astc=true\n```\n\nDesktop exports ignore ETC2\u002FASTC (they use S3TC\u002FBPTC). Mobile exports ignore MSAA\u002Fshadow quality settings they don't support. Both can coexist.\n","# Platform Export\n\nExport a Godot 4 project to Windows, macOS, Linux, Android, and iOS.\n\n## Prerequisites (All Platforms)\n\n- **Godot 4** with export templates installed:\n  ```bash\n  # Download matching templates (replace version)\n  godot --headless --export-templates-install \u002Fpath\u002Fto\u002FGodot_v4.x-stable_export_templates.tpz\n  ```\n- **Project validates cleanly:** `timeout 60 godot --headless --quit 2>&1` — no errors\n\n## Platform-Specific Prerequisites\n\n### Windows\n\n- **Host:** Windows, macOS, or Linux\n- **Optional:** `rcedit` for icon\u002Fmetadata embedding (Windows host only)\n- No code signing required for distribution outside Microsoft Store\n\n### macOS\n\n- **Host:** macOS required for signed\u002Fnotarized builds; cross-compile from Linux\u002FWindows produces unsigned `.app`\n- **Optional:** Xcode command line tools, Apple Developer account (for notarization)\n- **Codesigning:** `codesign` + Developer ID certificate for distribution outside App Store\n\n### Linux\n\n- **Host:** Any (Windows, macOS, Linux)\n- No special requirements — simplest export target\n\n### Android\n\n- **Host:** Windows, macOS, or Linux\n- **OpenJDK 17** — `java -version` must report 17.x\n- **Android SDK** — with platform-tools and build-tools\n- **Debug keystore** — generated or provided\n- **Editor settings** configured with Java\u002FSDK\u002Fkeystore paths:\n  ```\n  export\u002Fandroid\u002Fjava_sdk_path\n  export\u002Fandroid\u002Fandroid_sdk_path\n  export\u002Fandroid\u002Fdebug_keystore\n  export\u002Fandroid\u002Fdebug_keystore_user\n  export\u002Fandroid\u002Fdebug_keystore_pass\n  ```\n\n### iOS\n\n- **Host:** macOS only (Xcode required)\n- **Xcode** with iOS SDK\n- **Apple Developer account** with provisioning profiles and signing certificates\n- **Team ID** and **Bundle Identifier** configured\n- Most complex export target — requires physical macOS machine\n\n---\n\n## Export Workflow\n\n### 1. Configure project.godot\n\nAdd platform-specific settings as needed:\n\n```ini\n[rendering]\n\n# Android\u002FiOS — required for mobile GPU compatibility:\ntextures\u002Fvram_compression\u002Fimport_etc2_astc=true\n\n# Desktop — optional quality settings:\nanti_aliasing\u002Fquality\u002Fmsaa_3d=2\n```\n\n**CRITICAL for Android:** Without `textures\u002Fvram_compression\u002Fimport_etc2_astc=true`, export silently fails with a blank configuration error.\n\n### 2. Create export_presets.cfg\n\nPlace in project root. Each platform is a numbered `[preset.N]` section. Include only the platforms you need.\n\n#### Windows Preset\n\n```ini\n[preset.0]\n\nname=\"Windows\"\nplatform=\"Windows Desktop\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.0.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\nbinary_format\u002Fembed_pck=true\ntexture_format\u002Fs3tc_bptc=true\ntexture_format\u002Fetc2_astc=false\ncodesign\u002Fenable=false\napplication\u002Fmodify_resources=false\napplication\u002Ficon=\"\"\napplication\u002Fconsole_wrapper_icon=\"\"\napplication\u002Ficon_interpolation=4\napplication\u002Ffile_version=\"\"\napplication\u002Fproduct_version=\"\"\napplication\u002Fcompany_name=\"\"\napplication\u002Fproduct_name=\"\"\napplication\u002Ffile_description=\"\"\napplication\u002Fcopyright=\"\"\napplication\u002Ftrademarks=\"\"\napplication\u002Fexport_angle=0\nssh_remote_deploy\u002Fenabled=false\n```\n\n#### macOS Preset\n\n```ini\n[preset.1]\n\nname=\"macOS\"\nplatform=\"macOS\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.1.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\nbinary_format\u002Farchitecture=\"universal\"\ncodesign\u002Fenable=false\ncodesign\u002Fidentity=\"\"\ncodesign\u002Fcertificate_file=\"\"\ncodesign\u002Fcertificate_password=\"\"\ncodesign\u002Fprovisioning_profile=\"\"\ncodesign\u002Fentitlements\u002Fcustom_file=\"\"\ncodesign\u002Fentitlements\u002Fallow_jit_code_execution=false\ncodesign\u002Fentitlements\u002Fallow_unsigned_executable_memory=false\ncodesign\u002Fentitlements\u002Fallow_dyld_environment_variables=false\nnotarization\u002Fenable=false\napplication\u002Ficon=\"\"\napplication\u002Fbundle_identifier=\"com.example.PROJECTNAME\"\napplication\u002Fsignature=\"\"\napplication\u002Fapp_category=\"Games\"\napplication\u002Fshort_version=\"1.0\"\napplication\u002Fversion=\"1.0\"\napplication\u002Fcopyright=\"\"\napplication\u002Fmin_macos_version=\"10.13\"\napplication\u002Fexport_angle=0\nssh_remote_deploy\u002Fenabled=false\n```\n\n#### Linux Preset\n\n```ini\n[preset.2]\n\nname=\"Linux\"\nplatform=\"Linux\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.2.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\nbinary_format\u002Fembed_pck=true\nbinary_format\u002Farchitecture=\"x86_64\"\ntexture_format\u002Fs3tc_bptc=true\ntexture_format\u002Fetc2_astc=false\nssh_remote_deploy\u002Fenabled=false\n```\n\n#### Android Preset\n\n```ini\n[preset.3]\n\nname=\"Android\"\nplatform=\"Android\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.3.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\ngradle_build\u002Fuse_gradle_build=false\ngradle_build\u002Fgradle_build_directory=\"\"\ngradle_build\u002Fandroid_source_template=\"\"\ngradle_build\u002Fexport_format=0\narchitectures\u002Farmeabi-v7a=false\narchitectures\u002Farm64-v8a=true\narchitectures\u002Fx86=false\narchitectures\u002Fx86_64=false\nkeystore\u002Fdebug=\"\"\nkeystore\u002Fdebug_user=\"\"\nkeystore\u002Fdebug_password=\"\"\nkeystore\u002Frelease=\"\"\nkeystore\u002Frelease_user=\"\"\nkeystore\u002Frelease_password=\"\"\nversion\u002Fcode=1\nversion\u002Fname=\"1.0\"\npackage\u002Funique_name=\"com.example.PROJECTNAME\"\npackage\u002Fname=\"\"\npackage\u002Fsigned=true\npackage\u002Fapp_category=2\npackage\u002Fretain_data_on_uninstall=false\npackage\u002Fexclude_from_recents=false\npackage\u002Fshow_in_android_tv=false\npackage\u002Fshow_in_app_library=true\npackage\u002Fshow_as_launcher_app=false\nlauncher_icons\u002Fmain_192x192=\"\"\nlauncher_icons\u002Fadaptive_foreground_432x432=\"\"\nlauncher_icons\u002Fadaptive_background_432x432=\"\"\nlauncher_icons\u002Fadaptive_monochrome_432x432=\"\"\ngraphics\u002Fopengl_debug=false\nxr_features\u002Fxr_mode=0\nscreen\u002Fimmersive_mode=true\nscreen\u002Fsupport_small=true\nscreen\u002Fsupport_normal=true\nscreen\u002Fsupport_large=true\nscreen\u002Fsupport_xlarge=true\nuser_data_backup\u002Fallow=false\ncommand_line\u002Fextra_args=\"\"\napk_expansion\u002Fenable=false\napk_expansion\u002FSALT=\"\"\napk_expansion\u002Fpublic_key=\"\"\npermissions\u002Fcustom_permissions=PackedStringArray()\npermissions\u002Finternet=false\n```\n\n#### iOS Preset\n\n```ini\n[preset.4]\n\nname=\"iOS\"\nplatform=\"iOS\"\nrunnable=true\ndedicated_server=false\ncustom_features=\"\"\nexport_filter=\"all_resources\"\ninclude_filter=\"\"\nexclude_filter=\"\"\nexport_path=\"\"\npatches=[]\nencryption_include_filters=\"\"\nencryption_exclude_filters=\"\"\nencrypt_pck=false\nencrypt_directory=false\nscript_export_mode=2\n\n[preset.4.options]\n\ncustom_template\u002Fdebug=\"\"\ncustom_template\u002Frelease=\"\"\napplication\u002Fapp_store_team_id=\"\"\napplication\u002Fprovisioning_profile_uuid_debug=\"\"\napplication\u002Fprovisioning_profile_uuid_release=\"\"\napplication\u002Fbundle_identifier=\"com.example.PROJECTNAME\"\napplication\u002Fsignature=\"\"\napplication\u002Fshort_version=\"1.0\"\napplication\u002Fversion=\"1.0\"\napplication\u002Ficon_1024x1024=\"\"\napplication\u002Flaunch_screens_interpolation=4\napplication\u002Fexport_project_only=false\napplication\u002Fmin_ios_version=\"12.0\"\narchitectures\u002Farm64=true\ncapabilities\u002Faccess_wifi=false\ncapabilities\u002Fpush_notifications=false\nuser_data\u002Faccessible_from_files_app=false\nuser_data\u002Faccessible_from_itunes_share=false\nprivacy\u002Fcamera=false\nprivacy\u002Fmicrophone=false\nprivacy\u002Fphotolibrary=false\nicons\u002Fiphone_120x120=\"\"\nicons\u002Fiphone_180x180=\"\"\nicons\u002Fipad_76x76=\"\"\nicons\u002Fipad_152x152=\"\"\nicons\u002Fipad_167x167=\"\"\nstoryboard\u002Fuse_launch_screen_storyboard=true\nstoryboard\u002Fimage_scale_mode=0\nstoryboard\u002Fcustom_image@2x=\"\"\nstoryboard\u002Fcustom_image@3x=\"\"\nstoryboard\u002Fuse_custom_bg_color=false\nstoryboard\u002Fcustom_bg_color=Color(0, 0, 0, 1)\n```\n\nReplace `PROJECTNAME` in `package\u002Funique_name` and `bundle_identifier` with the actual project name (lowercase, no spaces\u002Fspecial chars).\n\n### 3. Export\n\n```bash\nmkdir -p build\n\n# Windows — produces .exe + .pck\ngodot --headless --export-debug \"Windows\" build\u002Fgame.exe\n\n# macOS — produces .zip containing .app bundle\ngodot --headless --export-debug \"macOS\" build\u002Fgame.zip\n\n# Linux — produces executable binary\ngodot --headless --export-debug \"Linux\" build\u002Fgame.x86_64\n\n# Android — produces .apk\ngodot --headless --export-debug \"Android\" build\u002Fgame.apk\n\n# iOS — produces Xcode project (.xcodeproj)\ngodot --headless --export-debug \"iOS\" build\u002Fgame.ipa\n```\n\nThe preset name in quotes must match the `name=` field in `export_presets.cfg`.\n\nFor release builds, use `--export-release` instead of `--export-debug`.\n\n---\n\n## Platform Gotchas\n\n### Windows\n\n- `binary_format\u002Fembed_pck=true` creates a single `.exe` with data embedded — simpler distribution\n- Without `rcedit`, the `.exe` has no custom icon or version metadata (functional, just generic icon)\n- Windows Defender SmartScreen may block unsigned executables — users need to click \"Run anyway\"\n\n### macOS\n\n- Unsigned apps trigger Gatekeeper — users must right-click → Open on first launch\n- For distribution: `codesign --deep -s \"Developer ID Application: ...\" game.app`\n- Notarization: `xcrun notarytool submit game.zip --apple-id ... --team-id ... --password ...`\n- Universal binary (`architecture=\"universal\"`) supports both Intel and Apple Silicon\n\n### Linux\n\n- Mark executable: `chmod +x game.x86_64`\n- AppImage or Flatpak wrapping for broader distribution (out of scope for basic export)\n- `texture_format\u002Fs3tc_bptc=true` required for desktop GPU compatibility\n\n### Android\n\n- **Blank config error** — missing `textures\u002Fvram_compression\u002Fimport_etc2_astc=true` in project.godot\n- **Keystore error** — all three editor settings (`debug_keystore`, `debug_keystore_user`, `debug_keystore_pass`) must be set together or none (falls back to debug keystore)\n- **`cannot connect to daemon`** — benign, no adb server running\n- **Gradle-only fields** — `min_sdk`, `target_sdk`, `compress_native_libraries` cause errors when `use_gradle_build=false`\n- ARM64 only (`arm64-v8a=true`) covers 98%+ of modern Android devices\n\n### iOS\n\n- Export produces an Xcode project — must open in Xcode on macOS to build `.ipa`\n- Provisioning profiles must match the bundle identifier exactly\n- Debug builds require a development provisioning profile; TestFlight\u002FApp Store requires distribution profile\n- Physical device testing requires the device UDID in the provisioning profile\n- Most common failure: mismatched Team ID, bundle ID, or expired provisioning profile\n\n---\n\n## Touch Input (Mobile)\n\nFor Android\u002FiOS, add touch controls to the project:\n\n```gdscript\n# In project.godot:\n# [input_devices]\n# pointing\u002Femulate_touch_from_mouse=true\n# pointing\u002Femulate_mouse_from_touch=true\n\n# Or add virtual joystick\u002Fbuttons in a CanvasLayer\n# Use InputEventScreenTouch and InputEventScreenDrag for direct touch\n```\n\n## Multi-Platform project.godot\n\nWhen targeting multiple platforms, combine rendering settings:\n\n```ini\n[rendering]\n\n# Desktop quality\nanti_aliasing\u002Fquality\u002Fmsaa_3d=2\nlights_and_shadows\u002Fdirectional_shadow\u002Fsoft_shadow_filter_quality=3\n\n# Mobile compatibility\ntextures\u002Fvram_compression\u002Fimport_etc2_astc=true\n```\n\nDesktop exports ignore ETC2\u002FASTC (they use S3TC\u002FBPTC). Mobile exports ignore MSAA\u002Fshadow quality settings they don't support. Both can coexist.\n",{"name":5,"description":7},"main","f14d6437b86dcd1257925a71587a253624705809","skills\u002Fgodot-platform-export",0,"https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config","https:\u002F\u002Fgithub.com\u002Fdragoscirjan","http:\u002F\u002Flunaticthinker.me","2026-08-23 18:29:44",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add dragoscirjan\u002Fopencode-config --skill platform-export",{"tool":51,"command":52},"bunx","bunx skills add dragoscirjan\u002Fopencode-config --skill platform-export",{"tool":54,"command":55},"pnpm","pnpm dlx skills add dragoscirjan\u002Fopencode-config --skill platform-export","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Fgodot-platform-export\u002FSKILL.md",true,[],[60,77,96,115,135,147],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":32},"01M6GVBX5M8KVG8EZP2QTYZDGB","productivity-clarify","Guidelines for clarifying ambiguous tasks. Load when the immediate user request lacks execution context.","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity-clarify\u002FSKILL.md",[],[67,68,69,70,71,72,73,74,75,76],"productivity","productivity clarify","clarify","user","tasks","load","guidelines","user request","context","execution",{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":32},"01M6GVBQX6W1C1RAZE43EQ9NEY","productivity-caveman","Ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Use when user says \"caveman mode\", \"talk like caveman\", \"use caveman\", \"less tokens\", \"be brief\", or invokes \u002Fcaveman.","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity-caveman\u002FSKILL.md",[],[67,84,85,86,70,87,88,89,90,91,92,93,94,95],"caveman","productivity caveman","technical","use","full","token","tokens","usage","mode","ultra","brief","communication",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":107,"publishedAt":32},"01M6GVBHX6SZRBE7440A5RA6X9","mcp-tools","External MCP tools reference. Load at task start.","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-tools\u002FSKILL.md",[102],{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[108,109,110,111,112,113,72,114],"Tools","mcp tools","MCP","reference","start","task","at",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":125,"publishedAt":32},"01M6GVBD1AZ6NWNYAAQ9J9E71X","mcp-tools-godot","Godot MCP servers reference — editor, diagnostics, testing, docs, runtime. Load when doing Godot game dev.","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Fmcp-tools-godot\u002FSKILL.md",[121,124],{"categoryNo":122,"categoryName":123,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},[108,126,31,109,110,127,128,129,130,131,132,133,111,134,72],"mcp tools godot","mcp servers","testing","docs","editor","diagnostics","dev","game","runtime",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":32},"01M6GVBA6DM84KYRDPP1Q83GBJ","lang-zig","Zig development standards and tooling.","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Flang-zig\u002FSKILL.md",[],[142,143,144,145,146],"zig","lang zig","development","tooling","standards",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":32},"01M6GVB8PKXRMMJ4B2YPZG1350","lang-yaml","YAML standards and tooling.","https:\u002F\u002Fgithub.com\u002Fdragoscirjan\u002Fopencode-config\u002Fblob\u002Fmain\u002Fskills\u002Flang-yaml\u002FSKILL.md",[],[154,155,145,146],"yaml","lang yaml"]