>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
TypeScript

Zo laat je een neuraal netwerk mobiele apps voor je testen

Elke keer dat ik iemands pull request open in een React Native-project, betrap ik mezelf erop dat ik denk: handmatig layouts controleren op iOS en Android is een karwei waar je van wilt janken. Je moet de branch pullen, de bundle bouwen, de emulator starten, door het scenario klikken, screenshots maken en de auteur schrijven dat de knop van het scherm is gelopen.

Het team van Callstack heeft de tweede versie van het cali-tool uitgebracht. Het is een command-line utility die mobiel testen, performance audits en code reviews afhandelt met behulp van LLM-agents.

Waar gaat het project over

Web agents verrassen niemand meer: Playwright en Puppeteer zijn al lang geïntegreerd met taalmodellen. Bij mobiel ligt het altijd anders. Emulators zijn lastig, de React Native debugger leeft in zijn eigen wereld, en een model aansluiten zonder de omgeving te breken vergt wat werk.

Cali lost het probleem op door rolverdeling. De utility probeert niet een universele chatbot te zijn die alles doet. In plaats daarvan heeft het strikte werkingsmodi waarbij elke agent alleen het noodzakelijke gereedschapspakket krijgt:

  • cali qa voert testscenario's uit op een echte simulator of emulator via het agent-device-utility.
  • cali perf-review vindt onnodige re-renders en vertragingen door rechtstreeks verbinding te maken met agent-react-devtools.
  • cali review leest de repository en controleert diffs in pull requests.
  • cali dev probeert zelfstandig codewijzigingen aan te brengen onder toezicht van tests en de type checker.

De review-, perf-review- en dev-commando's zijn nog gemarkeerd als experimenteel, maar het basale qa-scenario is klaar voor gebruik.

Hoe je testing op je lokale machine uitvoert

Je hebt Node.js en het globaal geïnstalleerde agent-device-package nodig om te beginnen. Als de agent noodzakelijke vaardigheden mist, haalt Cali ze binnen via npx skills in de ~/.cali/skills-directory.

Je kunt de launch besturen met een enkele regel:

cali qa \
  --local ios \
  --artifact ./artifacts/MyApp.app \
  --prompt "проверь текст на экране онбординга и нажми кнопку далее"

Als je maar één iOS simulator of Android emulator draaiende hebt, pakt de utility deze automatisch op. Bij het starten op Android kan Cali zelfs AndroidManifest.xml rechtstreeks van .apk parsen om de applicationId te extraheren zonder extra flags.

Belangrijk detail: voor debug builds moet je de Metro server apart starten en stoppen. Cali is uitsluitend verantwoordelijk voor het interageren met de interface van de app.

Profiling en onnodige re-renders opsporen

Misschien wel de interessantste modus is perf-review. We weten allemaal hoe gemakkelijk het is om de performance in React Native te verpesten door per ongeluk een onstabiele callback door te geven aan een zware lijst.

Cali verbindt een agent met React DevTools en voert het doelscherm uit:

cali perf-review \
  --context ./cali-context.json \
  --platform android \
  --artifact ./artifacts/app.apk \
  --prompt "проверь экран оформления заказа на подвисания"

De agent analyseert interacties, legt metriek vast en genereert een gestructureerd rapport. Resultaten gaan naar de artifacts/perf-review-folder, die screenshots bevat, een manifest en een tekstsamenvatting met de belangrijkste problemen.

Gedeelde context en werken in CI

In plaats van lange chains van terminalargumenten gebruikt Cali een configuratiebestand cali-context.json. Het beschrijft de repository, build, acceptatiecriteria en beperkingen voor de agent:

{
  "workspaceRoot": ".",
  "repository": {
    "provider": "github.com",
    "owner": "my-team",
    "name": "shop-app",
    "defaultBranch": "main",
    "currentBranch": "feature/checkout-redesign"
  },
  "mobile": {
    "platform": "android",
    "artifactPath": "./artifacts/app.apk"
  },
  "qa": {
    "acceptanceCriteria": [
      "На экране оплаты отображается итоговая сумма",
      "Кнопка подтверждения остаётся кликабельной"
    ]
  },
  "dev": {
    "allowedValidations": ["bun test", "bunx tsc --noEmit"],
    "writePolicy": "workspace",
    "pushPolicy": "disabled"
  }
}

Command-line flags krijgen altijd voorrang boven het bestand. Dit is handig wanneer je een pad naar een verse artifact in een pipeline moet substitueren.

In GitHub Actions en Expo Application Services (EAS) detecteert de utility de omgeving zelfstandig. Een extra helper cali export-ci genereert een markdown-rapport met screenshots dat je direct kunt posten als comment op een open pull request via GitHub CLI:

name: Запуск мобильного QA
  env:
    AI_GATEWAY_API_KEY: ${{ secrets.AI_GATEWAY_API_KEY }}
    CALI_PLATFORM: android
    CALI_ARTIFACT_PATH: ./builds/app.apk
  run: npx cali qa --quiet

name: Подготовка отчёта
  run: npx cali export-ci --report ./artifacts/qa/report.json

name: Публикация комментария в PR
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: gh pr comment "${{ github.event.pull_request.number }}" --body-file ./artifacts/qa/ci-comment.md

Modellen aansluiten en beveiliging

Standaard is Cali geconfigureerd om met openai/gpt-5.4-mini te werken via AI Gateway. Als je een directe Anthropic key hebt, kun je overschakelen naar Sonnet via omgevingsvariabelen:

ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6

Het is prettig dat de auteurs aan beveiliging hebben gedacht: de utility scrubt tokens en secrets uit repository-URL's bij het laden van context, en de uiteindelijke report.json slaat alleen veilige velden op.

Is het de moeite waard om te proberen

Het gereedschap ziet er solide uit en lost een specifieke pijnpunt op voor teams die schrijven met Expo en React Native. Het belangrijkste voordeel hier is het strikte inputcontract en voorspelbare JSON-uitvoer. De agent dwaalt niet rond in een abstracte terminal maar is beperkt tot een duidelijke set van utilities.

Het project wint nog aan traction (rond de duizend sterren op GitHub), maar de rolarchitectuur maakt het nu al mogelijk om geautomatiseerde controles van kritieke gebruikerspaden op de CI-fase te implementeren. Als je het beu bent om handmatig basale smoke tests uit te voeren voor elke release, is het de moeite waard om de repository te klonen en een paar schermen te doorlopen op een lokale simulator.

Gerelateerde projecten