3.5 KiB
M49 iOS Export Preflight
Scope
This is the local, debug-only iOS validation boundary for Aetherbound Guild. It does not authorize TestFlight, App Store submission, distribution signing or release packaging.
Verified configuration
- Godot:
4.6.1.stable.official.14d19694e - Xcode:
26.1.1 - Team ID:
X75CUV458P - Bundle ID:
com.wusu.aetherboundguild(proposed owner-local ID) - Architecture:
arm64 - Deployment target: iOS
14.0 - Orientation:
UIInterfaceOrientationLandscapeLeftandUIInterfaceOrientationLandscapeRight - Signing mode: Xcode automatic signing with the local Apple Development identity/profile available on this Mac
Export verification
The following command generated an Xcode project outside the repository:
HOME=/Users/wusumac /Applications/Godot.app/Contents/MacOS/Godot \
--headless --audio-driver Dummy --path runtime \
--export-debug "iOS Device Debug" \
/private/tmp/aetherbound-ios-export-final-20260906-e/AetherboundGuild
Result: Godot export exited 0, and
/private/tmp/aetherbound-ios-export-final-20260906-e/AetherboundGuild.xcodeproj
was created. The generated project contains one AetherboundGuild target and
one matching scheme.
arm64 Xcode verification
The signed device configuration was built with:
xcodebuild \
-project /private/tmp/aetherbound-ios-export-final-20260906-e/AetherboundGuild.xcodeproj \
-scheme AetherboundGuild -sdk iphoneos -configuration Debug \
-derivedDataPath /private/tmp/aetherbound-ios-signed-derived-20260906-e build
Result: ** BUILD SUCCEEDED **. The resulting app is arm64, has bundle ID
com.wusu.aetherboundguild, is signed by Apple Development: wu ShengHua (E2D99JSE7J), and carries Team ID X75CUV458P.
Non-blocking warnings
- Godot resizes the single opaque 1024px boot image for the required iOS icon slots. This is an export warning, not a build failure; a dedicated square app icon can replace it later without changing the runtime.
- Xcode reports empty camera/microphone/photo usage descriptions because the generated Godot template emits those optional keys. The current game does not request those capabilities.
Device state
xcrun devicectl list devices currently reports the three known iPhones as
unavailable, so an install/launch check could not yet be performed. M49-C
remains open until the owner's iPhone is connected, unlocked, trusted and has
Developer Mode enabled.
For regular development, the checked-in helper now uses the stable ignored
directory build/ios/ under the repository. From the repository root, rerun
the export after source changes and open the same Xcode project:
./tools/export_runtime_ios.sh
open build/ios/AetherboundGuild.xcodeproj
The Xcode project contains the exported game data from the moment of export; rerunning the helper is therefore required after changing Godot scenes, scripts or assets.
When a device is available, use its identifier from devicectl in this
sequence (the -allowProvisioningUpdates flag lets Xcode refresh the managed
development profile after the owner signs in):
xcrun devicectl list devices
xcodebuild \
-project build/ios/AetherboundGuild.xcodeproj \
-scheme AetherboundGuild -destination 'id=<DEVICE_UDID>' \
-configuration Debug -derivedDataPath build/ios-derived \
-allowProvisioningUpdates build
xcrun devicectl device install app --device <DEVICE_UDID> \
build/ios-derived/Build/Products/Debug-iphoneos/AetherboundGuild.app
xcrun devicectl device process launch --device <DEVICE_UDID> \
com.wusu.aetherboundguild