Files
aetherbound-guild/docs/runtime/M49_IOS_EXPORT_PREFLIGHT.md
T

101 lines
3.5 KiB
Markdown

# 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: `UIInterfaceOrientationLandscapeLeft` and
`UIInterfaceOrientationLandscapeRight`
- 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:
```sh
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:
```sh
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:
```sh
./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):
```sh
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
```