iOS uses the embedded runtime backend route and is currently
experimental (product_class experimental, ready=false): the code paths
compile and host-sim tests pass, but no development/demonstration usability or
product commitment is made without matching-simulator/device evidence. wzzc-dev/window/ios owns UIKit lifecycle, surface, and
input callbacks; moui/backend/ios assembles the MoUI runtime session and
exposes the neutral UIKit/Metal presenter surface. The entrypoint supplies
moui_skia_renderer providers with an explicit iOS platform policy; the
backend has no Skia dependency.
| Piece | Location |
|---|---|
| App logic | examples/<app>/app |
| Mobile metadata | examples/<app>/moui.mobile.json |
| MoonBit entrypoint | examples/<app>/ios_window_hosted |
| iOS host template | wzzc-dev/window/ios/template |
| MoUI embedded runtime backend | moui/backend/ios/window_hosted.mbt |
The entrypoint constructs IosEmbeddedRuntimeBackend and calls
window/ios::EventLoop.run_app. UIKit must feed lifecycle, surface, and touch
events through this path only.
- Xcode 15.4 or newer
- Swift 5 or newer
- iOS deployment target 15.0 or newer
UILaunchScreenandUIApplicationSupportsMultipleScenes=falseremain in the template Info.plist
Install Xcode from Apple, select the active developer directory, and verify the Simulator SDK before building:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
xcodebuild -version
xcrun --sdk iphonesimulator --show-sdk-pathCreate or select a simulator in Xcode's Devices and Simulators window, then boot it before running an app. Use its UDID rather than assuming a device name.
xcrun simctl list devices available
xcrun simctl boot <simulator-udid>
xcrun simctl bootstatus <simulator-udid> -b
open -a SimulatorRun moui doctor --platform ios before a native build.
moon check examples/showcase/ios_window_hosted --target native
moui build ios showcase \
--mobile-config "$PWD/examples/showcase/moui.mobile.json"
moui run ios showcase \
--mobile-config "$PWD/examples/showcase/moui.mobile.json"--prepare-only stops after input generation. --fallback-skia is useful for
packaging diagnostics only and cannot promote iOS runtime readiness.
sh scripts/window-hosted-hostsim-smoke.sh
moon test moui/backend/ios --target nativeSimulator or device evidence must cover first frame, touch/input, surface
detach/recreate, IME, clipboard, accessibility, and async-image behavior.
Update checks/platforms/ios.json only when the actual presenter route is
verified by matching-host evidence.
The route compiles and is usable for template integration, but remains
experimental (product_class experimental, ready=false). See
docs/platform-readiness-declaration.md and
docs/window-hosted-moui.md for the promotion criteria.