The iOS client for Arizona's
?native (JSON) render target -- the native counterpart of the browser client in
arizona's assets/js/ and of the Android client.
The server holds all state and logic and ships a cached-statics + diff stream over a
WebSocket; this thin client rebuilds a SwiftUI view tree from it and relays events
back. No app logic runs on the device.
The wire protocol is defined by arizona's include/arizona_wire.hrl and
include/arizona_effect.hrl; make check-wire compares this client's codes against
them. The client contract is in arizona's
docs/native.md.
It is built and tested against the arizona release pinned in .arizona-version, so an
arizona change never breaks it on its own: moving to a newer arizona is a PR here that
bumps the pin (Renovate opens one per arizona release), and CI checks it.
AzWire-- the protocol logic: op codes (Wire.swift), the node tree, the WebSocket client and its transport. Pure Swift, tested on any platform.AzClientUI-- the vocabulary-agnostic SwiftUI renderer.Sample/-- an XcodeGen app spec plus XCUITest e2e that open/native/menuand drive each example.
make test # swift test (any platform; Docker: swift:6.1)
make arizona # clone the pinned arizona into _arizona, once per pin
make check-wire # needs it compiled (`make server` does that)The sample app and the Simulator e2e need macOS + Xcode + brew install xcodegen.
Start arizona's e2e server, then run the tests (the Simulator reaches the host's
localhost:4040 directly):
make server # in another terminal
make e2eCI lives in .github/workflows/ci.yml. ARIZONA_DIR=../arizona points the targets at
another arizona checkout.