SAM 3.1
Sees what is drawn to be pressed
Everything on the screen that looks pressable is found in the picture, then set against what VoiceOver has there: reachable by its own name, buried inside something bigger, or not there at all.
Allyfix tests your iOS app with synthetic people, each given only what they can perceive. It fixes what stops them in your code, then keeps a test that replays with no AI.
Before
5 of 25 reachable
After
13 of 24 reachable
SAM 3.1
Everything on the screen that looks pressable is found in the picture, then set against what VoiceOver has there: reachable by its own name, buried inside something bigger, or not there at all.
Muse Spark
It works out what a screen is for, then plays each person step by step. The screen reader user gets VoiceOver's words and no picture. A separate judge decides after every step whether the task got done. Someone without a disability goes first: a task even they cannot do is not counted.
Muse Voice Transcribe
Allyfix listens to the Simulator's own audio. In the demo the app says “der Bahnhof”. A hearing person is told the words; the deaf person is told only that a sound played. If nothing on screen says the same thing, they are stuck, and the report can say exactly what was missing.
“der Bahnhof”
What the app said
a sound played
All the deaf person gets
Muse Wonder
It reads your source and the failures, and answers with exact edits on a new branch. The app reloads and the same people try again. You see who gets through now and what changed on screen, then keep the fix or undo it.
No model at all
What got someone through is saved in your repository and replays with no AI, so re-testing is free. It can run on its own whenever the code changes. Put the old code back, and the test fails.
Chosen after EN 301 549 §4.2, the standard the European Accessibility Act points to. Named only by access need and tool.
| § | Person | Gets | Acts |
|---|---|---|---|
| 4.2.1 | Screen reader user | What VoiceOver reads, in swipe order; no picture | Activates elements, as a double tap does |
| 4.2.2 | Low vision | The screen at text size 235%, blurred | Touches and swipes what can be made out |
| 4.2.3 | Color vision deficiency | The screenshot through a deuteranopia filter | Touches and swipes |
| 4.2.4 | Deaf or hard of hearing | The plain screenshot, and only that a sound played | Touches and swipes |
| 4.2.7 | Limited dexterity | The plain screenshot | Real taps, off their aim by a fixed tremor |
| 4.2.10 | Cognitive and learning | The plain screenshot | Acts only on what the words on screen say |
The blur and the color filter are test conditions, not a claim about how any one person sees.
You need a Mac with macOS 15 or later, Xcode 26 with an iOS Simulator, Node.js 20 or later, and a Meta Model API key.
git clone https://github.com/vladbars/allyfix.git && cd allyfix
echo 'MODEL_API_KEY=your-key' > .env
Vokabeln is the example, with accessibility problems to find. It opens in the Simulator; leave this terminal running.
cd examples/vokabeln && npm install && npx expo run:ios
In a second terminal, from the allyfix folder:
xcodebuild -project Allyfix.xcodeproj -scheme Allyfix -configuration Release \
-derivedDataPath build CODE_SIGN_IDENTITY=- CODE_SIGN_STYLE=Manual \
DEVELOPMENT_TEAM= PROVISIONING_PROFILE_SPECIFIER= build
open build/Build/Products/Release/Allyfix.app
Keep the Simulator window visible, then in Allyfix:
examples/vokabeln folder.More in the README, including how to test your own app.